[英]java https://localhost (SSL) - possible without installing certs on client?
閱讀以下內容后,我仍然堅持制作最低限度的https ://localhost 獨立安裝免安裝網絡服務器 java 應用程序。 它需要無庫,使用 Java 8,並接受來自瀏覽器的連接,而無需先安裝任何特殊的客戶端證書。 我不清楚這是否可以使用自簽名證書,因為它只需要為“本地主機”工作。
到目前為止,我已經使用生成了一些關鍵文件
openssl genrsa -aes128 -out privkey.pem 2048 # makes privkey.pem
openssl req -new -x509 -key privkey.pem # makes cert.crt
我拼湊了最低限度的 Kotlin 設置功能
private fun ssl():SSLServerSocketFactory {
val password = "MYPASSWORD".toCharArray()
val kmf = KeyManagerFactory.getInstance("SunX509")
val tmf = TrustManagerFactory.getInstance("SunX509")
val sslContext = SSLContext.getInstance("TLS")
// initialise the keystore
KeyStore.getInstance("JKS").let { ks->
FileInputStream("lig.keystore").use {
ks.load(it, password)
}
kmf.init(ks, password)
tmf.init(ks)
}
// setup the HTTPS context and parameters
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null)
return sslContext.serverSocketFactory
}
ssl().createServerSocket().use { serverSocket ->
serverSocket.reuseAddress = true
serverSocket.bind(InetSocketAddress(port))
logger.info { "WebServer ready and listening on ${serverSocket.localPort}" }
但是我在如何完成它時遇到了麻煩:我需要制作一個lig.keystore
文件嗎? 這甚至可以在客戶端瀏覽器上不安裝證書的情況下完成嗎?
有兩種常見的方法可以通過 HTTPS 在客戶端(瀏覽器)和服務器之間建立安全連接:
默認情況下,您可以為由用戶 Web 瀏覽器信任的根證書頒發機構 (CA) 簽署的服務器獲取 SSL 證書。
您可以生成自簽名 SSL 證書,並讓用戶將其作為受信任的證書導入他們的 Web 瀏覽器。
到目前為止,您所做的似乎是生成一個帶有自簽名證書的服務器端密鑰庫,並且(或多或少)配置了 Kotlin 服務器以使用它。 問題是客戶端(瀏覽器)。 在沒有用戶或用戶系統管理員參與的情況下,沒有安全的方法讓瀏覽器信任自簽名證書。 (安全......對用戶來說是安全的!)
任何合法的 CA 都不應該為“localhost”頒發 SSL 證書; 例如https://www.ssl2buy.com/wiki/how-to-get-ssl-certificate-for-web-applications-that-runs-on-localhost
僵局。
好的,讓我們退后一步。 使用 HTTPS / SSL 的目的是確保:
用戶的 Web 瀏覽器正在與正確的服務器通信,而不是其他一些冒充它的服務器。
瀏覽器和服務器之間的連接是加密的,因此沒有第三方可以窺探流量。
但是您正在嘗試為localhost
連接執行此操作。 localhost
IP 地址是一個環回地址。 除非操作系統內核受到損害,否則您可以保證通過環回連接發送的網絡數據包不會離開主機。
您可以忽略“模擬”問題。 假設用戶的機器沒有受到損害,其他人就無法在用戶的機器上啟動“假”服務器。
您可以忽略“窺探”問題。 假設用戶的機器沒有被入侵:
所以,解決方法很簡單。 對“localhost”連接使用“http”。 它應該是安全的......假設用戶的機器沒有受到損害。
注意:如果用戶的機器已被入侵,那么壞人有其他方法來攔截 SSL 無法防御的流量。
另一個具體案例:
我正面臨一個來自 https 的網絡應用程序,它將在 http://localhost 加載本地數據
Safari Web 瀏覽器由於安全流 (https) 中的不安全通信 (http) 而被阻止。
可以討論這種行為,但在那種情況下,本地主機的自簽名證書會有所幫助。即使 Safari 瀏覽器發出警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.