2016-07-25 55 views
2

我已創建一些HTTPS服務器與自我簽署的證書與此CN=localhost。但是,當我開始在客戶端,它告訴我一些綁定,例外:更改在Java中的主機地址

socket::connect fails with error code = 10049 

我創建了CN=hostname一些新的證書,我發現(而這是計算機名)與以下行:

hostname = InetAddress.getLocalHost()); 

但這種方式對我來說並不實際。我想創建一個帶有一些URL的證書,如example.com,並且希望多次使用此證書。因此,我不得不以下的想法:我添加一些URL到/ etc/hosts文件,文件中有這樣的:

127.0.0.1  example.com 

然後我使用的URL example.com

有什麼方法可以更改InetAddress.getLocalhost?或者有可能使用某些客戶的IP地址順序主機名?

我用:

InetSocketAddress address = new InetSocketAddress("test.com",9999); 

創建客戶的地址,但是這不能解決綁定的異常。

有人有什麼想法嗎?

+0

另請參閱[分配一個域名爲localhost的開發環境(https://stackoverflow.com/q/7576217/608639)和[本地主機或127.0.0.1的第三方簽名SSL證書](https://stackoverflow.com/q/6793174/608639) – jww

+0

***'CN = www.example.com '***可能是錯的。主機名始終在* SAN *中。如果它存在於* CN *中,那麼它也必須存在於* SAN *中(在這種情況下,您必須列出它兩次)。有關更多規則和原因,請參閱[如何使用您的證書頒發機構簽署證書籤名請求](http://stackoverflow.com/a/21340898/608639)和[如何使用openssl創建自簽名證書?]( http://stackoverflow.com/q/10175812/608639)您還需要將自簽名證書放入適當的信任庫中。 – jww

回答

0

當主機名與主機名映射不可行時,讓我們使用IP地址創建證書,然後再將主機名數映射到相同的IP地址。

創建CN=127.0.0.1CN=<LOCAL_IP_ADDRESS>,然後將證書它解析爲example.com通過hosts文件,然後嘗試使用InetSocketAddress address = new InetSocketAddress("example.com",9999);

+0

你好! Thx爲您的迴應!我創建了一個新的自簽名證書並將其導入到我現有的密鑰庫中。現在我得到了這個異常:拋出的異常:javax.microedition.pki.CertificateException:證書不包含正確的站點名localhost vs test.com'我不明白這個異常。因爲我輸入了兩個! localhost和test.com的證書。 :-( –

+0

您在證書中有多少條目?您可以嘗試使用CN = 127.0.0.1的新證書文件嗎? –

+0

您對「您證書中有多少條目?」是什麼意思?我創建了一個新的證書與openssl,並將其導入到我的密鑰庫中,但是這並沒有解決我的問題,以我的瀏覽器作爲客戶端,我能夠訪問我的服務器,但與我的客戶端,這是一個Java應用程序,我知道這個錯誤:'發生IOException socket :: connect失敗,錯誤代碼= 10051'當我試圖達到主機名,我得到像上面寫的。我試圖解決'https://主機名:443 /' –