2014-02-28 30 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 

編輯部分從這裏開始:

謝謝@我的名,是的,我做了以下內容:

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

@我的名字是,請看我上面編輯的帖子。 – 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

然後改變你正在訪問使用該域名mydomain.com而不是IP地址的URL,現在的Windows將取代mydomain.com與所有請求的IP地址爲10.10.10.0。

相關問題