2013-02-26 58 views
4

對於這個特定的問題,搜索互聯網已經證明過於複雜。也許你可以指出我正確的方向?Java SSL/TLS客戶端使用在運行時加載的自簽名證書連接並驗證服務器?

我已經使用自簽名證書設置了SSL/TLS服務器(不是HTTPS)。我已成功連接到它並使用Node.JS

var sock = tls.connect({ 
    host:'127.0.0.1', 
    port:443, 
    servername:'foobar', 
    ca: fs.readFileSync('foobar-cert.pem') 
}, function() { 
    if(sock.authorized) 
    console.log('secure connection - yea!') 
    else 
    console.log('Not Secure because ' + sock.authorizationError) 
}) 

但我似乎無法在Java中找到等效的示例代碼。

如何使用自簽名證書文件進行服務器身份驗證,以Java方式連接到TLS服務器?自簽名證書將在運行時加載,而不是安裝到計算機的共享CA文件中。

best answer I have found so far需要外部庫。這是我的最後手段,因爲我相信Java會內置我所需的內容,而且根本不需要外部庫。

編輯:感謝您對重新開放問題的快速反應。

編輯:我看到我的問題被關閉爲telling java to accept self-signed ssl certificate重複。 這不是正確的,因爲我的問題有額外的要求,這是我 上述:

  • 建議:「證書......在你的JVM信任導入」
    我的要求「自我簽名證書......沒有安裝到 計算機的共享文件CA」

  • 建議:‘禁用證書驗證’(不推薦)
    我的要求 「自簽名的證書將在運行時加載」(和用於服務器驗證)

  • 建議:「將其導入您的信任使用keytool」
    我的要求「自簽名的證書......沒有安裝到 計算機的共享文件CA」

回答

4

我寫了一個blog post稍後回來顯示如何在Android上執行此操作(包括在運行時讀取證書),但是相同的代碼應該在桌面上運行。

其基本思想是在運行時創建信任庫,讀取證書並將其添加到信任庫。然後使用自定義信任庫創建可與SSLSocketFactory一起使用的SSLContext。

博客文章中的示例將SSLSocketFactory傳遞給URLConnection,但您可以使用SSLSocketFactory的createSocket方法獲取套接字並直接使用它。

+0

謝謝。你有我需要的一切。 – 2013-02-27 16:05:54

相關問題