none
드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Server로 보안 연결을 설정할 수 없습니다. 오류 : "Socket closed". RRS feed

  • 질문

  • 제목과 같은 오류가 발생하여 곤란에 처해있습니다...

    자바를 사용해서 mssql로 된 db에 접속하려고 하는데요, 혼자 찾아봤지만 해결이 되지 않아 질문 드립니다...

    "jdbc:sqlserver://주소:포트;databaseName=이름"과 같은 형식으로 url을 작성하고 DriverManager.getConnection()을 사용해서 연결을 시도했더니 위와 같은 오류가 발생하였습니다.

    마지막 문구로 봤을때 소켓과 관련된 문제인것 같기도 한데요....

    좋은 답변 부탁드리겠습니다 ㅠ

    2013년 6월 18일 화요일 오후 1:51

모든 응답

  • [해결방안1]

    검색해 본결과 중 하나는 %Java_home%/jre/lib/ext폴더에 있는 sunjce_provider.jar를 클래스패스에 함께 잡아주면 위 에러가 나지 않는다고 합니다.

    [해결방안2]

    Java 응용 프로그램에서 SSL(Secure Sockets Layer) 암호화를 사용할 수 있도록 하는 연결 문자열 속성을 사용하는 방법은 아래와 같습니다.

    encrypt, trustServerCertificate, trustStore, trustStorePassword, hostNameInCertificate 등의 새 연결 문자열 속성에 대한 자세한 내용은 연결 속성 설정을 참조하십시오.

    SSL 암호화를 사용한 연결

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다

    2013년 6월 19일 수요일 오전 1:54
    중재자
  • 답변해 주셔서 감사합니다!

    sunjce_provider.jar를 클래스패스에 추가해 보았지만 여전히 해결되지 않았습니다.. ㅠ
    SSL 암호화를 사용한 연결도 읽어보고 나름대로 수정해 보았지만 여전히 되지 않는군요..

    다음은 문제가 생기는 부분의 코드 일부 입니다.

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            _ConnectDB();
    }

    public void _ConnectDB()
    {
            String url;
            Connection conn;

            url = "jdbc:sqlserver://주소:포트;" +
                    "databaseName=DB이름; integratedSecurity=true;" +
                    "encrypt=true; trustServerCertificate=true;";

            if(android.os.Build.VERSION.SDK_INT > 9)
            {
                    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                    StrictMode.setThreadPolicy(policy);
            }

            try
            {
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

                    conn = DriverManager.getConnection(url, 이름, 암호);
                    // 이 부분에서 예외가 발생해서 catch부분으로 넘어갑니다.
                    // 그리고 표시되는 메시지가 질문의 제목과 동일하게 나타납니다.

                    .....
            }
            catch(Exception e)
            {
                    text.setText(e.getMessage());
                    return;
            }
    }

    몇몇 부분을 생략하긴 했지만 에러와 관련있는 부분은 모두 적어놓았습니다.
    그리고 위쪽의 if문에서 빨간줄이 계속 그어져서 "Clear Lint Markers"를 사용해 빨간줄을 없엔뒤 실행시켜보고 있습니다.
    혹시 이게 에러의 원인이 될수 있을까요?


    • 편집됨 jkuhm 2013년 6월 19일 수요일 오전 11:40 오타 발생
    2013년 6월 19일 수요일 오전 11:37