2014-02-28 2 views
1

아래 인증서 예외가 발생합니다. 자체 서명 인증서를 만든 후에 CN을 어떻게 확인합니까? 나는 개발 서버의 IP 주소를 사용하고 무엇이 잘못 될 수 있는지 이해하지 못한다고 확신한다.java.security.cert.CertificateException : 존재하지 않는 주체 대체 이름

Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://xx.x.x.xxx:yyyy/myappname/myservleturl?wsdl. It failed with: 
java.security.cert.CertificateException: No subject alternative names present. 
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:151) 
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:133) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:234) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:197) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:145) 
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:93) 
at javax.xml.ws.Service.<init>(Service.java:56) 
at javax.xml.ws.Service.create(Service.java:680) 
at com.mycompanyname.st.client.Client.main(Client.java:32) 
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present 
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747) 
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241) 
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235) 
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1209) 
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:135) 
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) 
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199) 
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434) 
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234) 
at java.net.URL.openStream(URL.java:1010) 
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:793) 
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java:251) 
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:118) 
... 7 more 
Caused by: java.security.cert.CertificateException: No subject alternative names present 
at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142) 
at sun.security.util.HostnameChecker.match(HostnameChecker.java:75) 
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:264) 
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:250) 
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1188) 
... 22 more 

편집 부분은 여기서 시작 :

는 @ 내 이름-IS에 감사합니다, 나는 다음과 같은 한 :

keytool -printcert -v -file serverdev.cer 

그리고이 결과를 가지고 :

Owner: CN=xx.x.x.xxx, OU=it, O=companyname, L=cityname, ST=provincename, C=ca 
Issuer: CN=xx.x.x.xxx, OU=it, O=companyname, L=cityname, ST=provincename, C=ca 
Serial number: somestringhere 
Valid from: Fri Feb 28 16:11:14 EST 2014 until: Thu May 29 17:11:14 EDT 2014 
Certificate fingerprints: 
    MD5: someotherstringhere 
    SHA1: andyetanotherstringhere 

을 CN xx.xxxxx가 개발 서버의 IP 주소와 일치하는지 확인했습니다. 정확히 무엇이 잘못 될 수 있습니까?

+0

다음을보십시오 : http://shib.kuleuven.be/docs/ssl_commands.shtml –

+0

@ My-Name-Is는 위에 편집 된 게시물을 참조하십시오. – javagirl

+0

어떻게 서버에 액세스합니까? IP 또는 호스트 이름을 통해? –

답변

1

인증서에있는 DNS를 실제로 액세스하는 IP 주소로 매핑하여 운영 체제의 간단한 솔루션을 사용하여 해결할 수 있습니다. 예를 들어 인증서가 DNS mydomain.com에 대해 발행되었고이 IP 주소 10.10.10.0에 액세스하는 경우 여기에있는 호스트 파일에 다음 레코드를 추가하십시오 (Windows를 사용하는 경우)

C : \ WINDOWS \ system32 \ drivers \ 등

이 줄

10.10.10.0 mydomain.com

다음 대신 IP 주소의 도메인 mydomain.com을 사용하여 액세스하는 URL을 추가, 변경 이제 윈도우 교체 할 mydomain.com에 모든 요청에 ​​대해 귀하의 IP 주소 10.10.10.0.

관련 문제