[英]Two-way mutual SSL authentication
我的任務是在 Spring 啟動 REST API 中實現功能以聯系另一個 ZDB974238714CA8DE634ACE 網絡服務。 外部API采用雙向SSL認證。 我已經獲得了要在我們這邊實施的正確證書,並且我已經實施了 Java 代碼。 但是每當我運行代碼時,我都會收到“收到致命警報:handshake_failure”。 我已經將 jks 密鑰庫加載到 SSLContext 中,如下所示:
FileInputStream truststoreFile = new FileInputStream("/Users/myUser/Desktop/myProject/myProjectName/src/main/resources/keystore-name.jks");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore truststore = KeyStore.getInstance(KeyStore.getDefaultType());
char[] trustorePassword = "keyStorePassword".toCharArray();
truststore.load(truststoreFile, trustorePassword);
trustManagerFactory.init(truststore);
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
KeyManager[] keyManagers = {};//if you have key managers;
sslContext.init(keyManagers, trustManagerFactory.getTrustManagers(), new SecureRandom());
我是否真的需要配置其他任何東西才能從我們的 API 啟用雙向 SSL,在這種情況下就像我的客戶端一樣? 我想我可以喜歡證書密鑰庫和 go。 但也許我需要做其他事情來啟用它?
您在錯誤的上下文中使用了與您共享的文件。 該文件是包含客戶端證書和相應密鑰的密鑰庫。
TrustStore - 告訴客戶(您)應該信任哪些 CA。
密鑰庫 - 告訴服務器有關客戶端(您)的信息。
為了使雙向 TLS 握手能夠通過,您需要加載 Keystore 並在 KeyManager 中進行設置,如下所示。
// Load the Keystore
KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream keystoreStream = new FileInputStream(pathToJKSFile);
keyStore.load(keystoreStream, keystorePassword.toCharArray());
// Add Keystore to KeyManager
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, keystorePassword.toCharArray());
// Create SSLContext with KeyManager and TrustManager
SSLContext context = SSLContext.getInstance("TLS");
context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());
SSLSocketFactory sslSocketFactory = context.getSocketFactory();
// Now, use this SSLSocketFactory while making the HTTPS request
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.