SSL證書服務(wù)器名稱是如何解析的/我可以使用keytools添加其他名稱嗎?為了清楚起見,這些問題的措辭可能是不同的,但它們都與同一問題有關(guān)。SSL證書服務(wù)器名稱是如何解析的?為什么瀏覽器似乎使用證書的cn字段,而Java的機制似乎只關(guān)注“Subject Alternative Name”?是否可以使用KeyTool向SSL證書添加其他名稱?如果沒有,那么使用OpenSSL代替OpenSSL是一個好的選擇嗎?只是一些背景:我需要一個主服務(wù)器來使用HTTPS與多個服務(wù)器進(jìn)行通信。顯然,我們不想為每個服務(wù)器購買SSL證書(可能有很多),所以我想使用自簽名證書(我一直在使用KeyTool來生成它們)。在我將證書添加到操作系統(tǒng)中后,瀏覽器(IE和Chrome)很高興地接受連接為受信任的。但是,即使在將證書添加到Java的仙人掌之后,Java仍然不會接受信任的連接,并拋出以下異常:引發(fā)原因:java.security.cert.CertificateException:在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(X509T rustManagerImpl.java:264)com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509 TrustManagerImpl.java:250)com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Clien tHandshaker.java:1185).我發(fā)現(xiàn)我可以讓Java信任實現(xiàn)我自己的HostNameVerifier的證書,我從這里復(fù)制了該證書:com.sun.jbi.internal.security.https.DefaultHostnameVerifier只是為了測試(順便說一下,作為參數(shù)傳遞給HostnameVerifier的主機名是正確的,所以我認(rèn)為它應(yīng)該被接受)。我一直使用證書字段cn作為主機名(通常是IP地址)。有人能告訴我,如果我做錯了什么,并指出我的正確方向嗎?
3 回答

DIEA
TA貢獻(xiàn)1820條經(jīng)驗 獲得超3個贊
這種情況下,在證書中使用IP地址將是一個更大的問題??赡芨腎P地址是DNS的用途。通過使用動態(tài)DNS服務(wù)和使用具有該名稱的證書(或任何解決該動態(tài)名稱的CNAME),您更有可能解決問題

守著星空守著你
TA貢獻(xiàn)1799條經(jīng)驗 獲得超8個贊
請注意,您可以在另一臺機器上使用Java 7中的keyTool,并在以后復(fù)制密鑰存儲庫(您不必運行Java 7)?;蛘?,我已經(jīng)為使用OpenSSL編輯了我的答案。盡管如此,從長遠(yuǎn)來看,您可能會發(fā)現(xiàn)使用主機名而不是IP地址更靈活(無論如何,使用SAN是個好主意)
添加回答
舉報
0/150
提交
取消