none
Error: "java.security.cert.CertificateException...? RRS feed

  • 질문

  • <datasources>
       <datasource jndi-name="java:jboss/datasources/SQLServerDS" pool-name="SQLServerDS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
          <connection-url>
            

    jdbc:sqlserver://o04wovabase.windows.net:1433;database=MyTestSQLServer;encrypt=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
          </connection-url>

    으로 SQL Azure에 접속하려는데 아래와 같은 예외가 발생합니다. 암호화와 연관된 부분같은데...

    [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-1) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: Could not create connection

    com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. Error: "java.security.cert.CertificateException:

    도움 말씀 기다리겠습니다. 꾸벅(_ _)

    좋은 하루 되시구요...^^

    2012년 8월 23일 목요일 오전 9:39

답변

  • 안녕하십니까? gladiator67 님,
    Microsoft MSDN의 Forum 사이트를 방문해 주셔서 감사합니다.

    현재 문의 하신 ”Error: "java.security.cert.CertificateException...?" 대해 답변을 드리겠습니다.

    encrypt 속성이 true로 설정되고 trustServerCertificate 속성이 false로 설정되며 연결 문자열의 서버 이름이 SQL Server SSL 인증서의 서버 이름과 일치하지 않는 경우 다음 오류가 발생합니다.
    JDBC 드라이버는 hostNameInCertificate라는 속성을 추가로 제공하는데 이 속성은 서버의 호스트 이름을 지정합니다. 이 속성의 값은 인증서의 주체 속성과 일치해야 합니다.

    다음 코드 예제는 연결 문자열에서 hostNameInCertificate 속성을 사용하는 방법을 보여 줍니다.

    String connectionUrl = 
        "jdbc:sqlserver://localhost:1433;" +
         "databaseName=AdventureWorks;integratedSecurity=true;" +
         "encrypt=true; trustServerCertificate=false;" +
         "trustStore=storeName;trustStorePassword=storePassword" +
         "hostNameInCertificate=hostName";
    

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

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

    • 답변으로 표시됨 gladiator67 2012년 8월 24일 금요일 오전 10:11
    • 답변으로 표시 취소됨 gladiator67 2012년 8월 25일 토요일 오전 6:44
    • 답변으로 표시됨 gladiator67 2012년 8월 26일 일요일 오전 11:57
    2012년 8월 23일 목요일 오전 10:16
    중재자
  • 안녕하세요. Windows Azure MVP 남정현입니다.

    겪고 계시는 문제점이 쉽게 해결되지 않는다는점이 참 안타깝습니다. 포럼에서 잘 해결되지 않는 부분인것 같은데 이 부분에 대해서는 MS 고객 지원 센터를 통해서 문제가 전달이 될 수 있도록 이야기가 되어야 할 것 같습니다.

    일단 버그 레포팅이나 제안에 대한 공식적인 채널은 Microsoft Connect 웹 사이트입니다만 포럼이나 직접적인 기술 지원을 통해서 문제에 대한 지원을 받으시는 것 보다는 응답이 느리거나 직접적인 해결책을 얻으실 수 없을 수도 있습니다. 버그 레포팅 방법은 아래 블로그 포스트를 참고하여 주시면 감사하겠습니다.

    http://blogs.msdn.com/b/jnak/archive/2008/10/27/submitting-a-bug-against-the-windows-azure-tools-and-sdk.aspx

    버그 레포팅 외에 Azure에 관련된 해결책을 일반적으로 빠르게 접하실 수 있을만한 곳으로는 미국 MSDN 포럼에 직접 글을 올리시거나 Stackoverflow.com 커뮤니티를 통하는 것이 좋을 것 같습니다.

    더운 날씨에 여러모로 연구하시고 문제를 해결하시느라 고생 많으실 것 같습니다. 좋은 소식 얻으시길 기대합니다. :-)


    남정현 (rkttu@rkttu.com) - Windows Azure Cafe SYSOP - http://cafe.naver.com/wazure | DEVPIA C# Forum SYSOP - http://www.devpia.com/CSharp.MAEUL | ContentStory (http://www.ineat.co.kr)

    • 답변으로 표시됨 gladiator67 2012년 8월 26일 일요일 오전 11:57
    2012년 8월 26일 일요일 오전 10:55
    중재자

모든 응답

  • 안녕하십니까? gladiator67 님,
    Microsoft MSDN의 Forum 사이트를 방문해 주셔서 감사합니다.

    현재 문의 하신 ”Error: "java.security.cert.CertificateException...?" 대해 답변을 드리겠습니다.

    encrypt 속성이 true로 설정되고 trustServerCertificate 속성이 false로 설정되며 연결 문자열의 서버 이름이 SQL Server SSL 인증서의 서버 이름과 일치하지 않는 경우 다음 오류가 발생합니다.
    JDBC 드라이버는 hostNameInCertificate라는 속성을 추가로 제공하는데 이 속성은 서버의 호스트 이름을 지정합니다. 이 속성의 값은 인증서의 주체 속성과 일치해야 합니다.

    다음 코드 예제는 연결 문자열에서 hostNameInCertificate 속성을 사용하는 방법을 보여 줍니다.

    String connectionUrl = 
        "jdbc:sqlserver://localhost:1433;" +
         "databaseName=AdventureWorks;integratedSecurity=true;" +
         "encrypt=true; trustServerCertificate=false;" +
         "trustStore=storeName;trustStorePassword=storePassword" +
         "hostNameInCertificate=hostName";
    

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

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

    • 답변으로 표시됨 gladiator67 2012년 8월 24일 금요일 오전 10:11
    • 답변으로 표시 취소됨 gladiator67 2012년 8월 25일 토요일 오전 6:44
    • 답변으로 표시됨 gladiator67 2012년 8월 26일 일요일 오전 11:57
    2012년 8월 23일 목요일 오전 10:16
    중재자
  • 안녕하세요. Windows Azure MVP 남정현입니다.

    지금 겪고 계시는 문제는 연결 문자열 설정에 관한 것 같습니다. 아래와 같이 맞추어서 설정하시고, SQL Azure 방화벽 설정에서 Windows Azure나 원격지 IP에 대한 접속 허용이 되어있는지 확인하시면 문제 없이 연결되실 겁니다. 그리고 사용하시는 Microsoft JDBC Driver가 4.0 이상인지 확인 부탁드립니다. (http://www.microsoft.com/download/details.aspx?displaylang=en&id=11774 에서 다운로드 가능합니다.)

    아래 연결 문자열은 encrypt=true를 사용하지 않고 간단하게 연결 문자열을 서술하는 경우를 예로 든 것인데, http://msdn.microsoft.com/en-us/library/hh290696.aspx 에 나온 내용을 참고하시면 도움이 될 것입니다.

    jdbc:sqlserver://<호스트 이름>.database.windows.net;databaseName=<데이터베이스 이름>;user=<관리자 - 또는 - 사용자 ID>@<호스트 이름>;password=<비밀 번호>

    감사합니다.


    남정현 (rkttu@rkttu.com) - Windows Azure Cafe SYSOP - http://cafe.naver.com/wazure | DEVPIA C# Forum SYSOP - http://www.devpia.com/CSharp.MAEUL | ContentStory (http://www.ineat.co.kr)

    • 답변으로 표시됨 gladiator67 2012년 8월 24일 금요일 오전 10:11
    • 답변으로 표시 취소됨 gladiator67 2012년 8월 25일 토요일 오전 6:44
    2012년 8월 23일 목요일 오후 12:52
    중재자
  • 답변 감사합니다. encrypt에 대한 연결문자열은 다음과 같이 해결하였습니다.

    <datasource jndi-name="java:jboss/datasources/SQLServerDS" pool-name="SQLServerDS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
                        <connection-url>
                            jdbc:sqlserver://o04wovsend.database.windows.net:1433;database=MyTestSQLServer;encrypt=true;hostNameInCertificate=data.sgp1-1.database.windows.net;loginTimeout=30;
                        </connection-url>
                        <driver-class>
                            com.microsoft.sqlserver.jdbc.SQLServerDriver
                        </driver-class>
                        <datasource-class>
                            com.microsoft.sqlserver.jdbc.SQLServerDataSource
                        </datasource-class>
                        <driver>
                            sqljdbc4.jar
                        </driver>

                         ......

    그런데도 Azure SQL에서는 여전히 다음과 같은 예외를 발생시킵니다.

    javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException:The connection is closed

    Localhost나 MS Azure Emulator에서는 정상적으로 작동이 되는데요...ㅠ_ㅠ 아무래도 MS SQL Azure와 Hibernate간의 버그가 아닌가 싶습니다.

    남정현님! MS Azure상의 버그를 신고하는 방법이 없을까요? JBoss는 community상에서 Bug를 신고하는 사이트가 있습니다. MS Azure도 그런 사이트가 있으면 좀 가르쳐주십시요...좋은 하루 되시구요..^^


    • 편집됨 gladiator67 2012년 8월 25일 토요일 오전 6:54
    2012년 8월 25일 토요일 오전 6:53
  • 안녕하세요. Windows Azure MVP 남정현입니다.

    겪고 계시는 문제점이 쉽게 해결되지 않는다는점이 참 안타깝습니다. 포럼에서 잘 해결되지 않는 부분인것 같은데 이 부분에 대해서는 MS 고객 지원 센터를 통해서 문제가 전달이 될 수 있도록 이야기가 되어야 할 것 같습니다.

    일단 버그 레포팅이나 제안에 대한 공식적인 채널은 Microsoft Connect 웹 사이트입니다만 포럼이나 직접적인 기술 지원을 통해서 문제에 대한 지원을 받으시는 것 보다는 응답이 느리거나 직접적인 해결책을 얻으실 수 없을 수도 있습니다. 버그 레포팅 방법은 아래 블로그 포스트를 참고하여 주시면 감사하겠습니다.

    http://blogs.msdn.com/b/jnak/archive/2008/10/27/submitting-a-bug-against-the-windows-azure-tools-and-sdk.aspx

    버그 레포팅 외에 Azure에 관련된 해결책을 일반적으로 빠르게 접하실 수 있을만한 곳으로는 미국 MSDN 포럼에 직접 글을 올리시거나 Stackoverflow.com 커뮤니티를 통하는 것이 좋을 것 같습니다.

    더운 날씨에 여러모로 연구하시고 문제를 해결하시느라 고생 많으실 것 같습니다. 좋은 소식 얻으시길 기대합니다. :-)


    남정현 (rkttu@rkttu.com) - Windows Azure Cafe SYSOP - http://cafe.naver.com/wazure | DEVPIA C# Forum SYSOP - http://www.devpia.com/CSharp.MAEUL | ContentStory (http://www.ineat.co.kr)

    • 답변으로 표시됨 gladiator67 2012년 8월 26일 일요일 오전 11:57
    2012년 8월 26일 일요일 오전 10:55
    중재자