[英]java secure client socket authentication
對於安全的服務器套接字,以便發送服務器證書,我要做的只是使用已使用密鑰庫初始化的KeyManagerFactory.getKeyManagers()
初始化SSLContext
。
但是如何在客戶端執行此操作?
即我為客戶做的:
System.setProperty("javax.net.ssl.keyStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "secret");
System.setProperty("javax.net.ssl.trustStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "secret");
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket("localhost", 7890);
我使用與信任庫相同的密鑰庫。 我認為只為了查看JSSE就可以了。
問題是我進入了服務器部分(在setNeedClientAuth
中將setNeedClientAuth設置為true)。
Exception in thread "main" javax.net.ssl.SSLHandshakeException: null cert chain
那么我應該如何配置客戶端以發送證書?系統屬性不是正確的方法嗎?
因為我看不到如何在客戶端使用SSLContext。
謝謝!
您不必在客戶端上設置特定的配置即可使用證書進行身份驗證。 密鑰庫中可能缺少一些中間的CA,並且客戶端無法從服務器發送的信任錨中構建證書路徑,因此無法確定證書是否適合身份驗證。
您可以將系統屬性javax.net.debug
添加到all
以在標准輸出上打印調試流。 也許您可以獲得有關該錯誤的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.