[英]Enable HTTPS in a Spring Boot Java application with a P7B certificate
[英]How to send a .p7b format client certificate with request in spring boot?
我對 SSL/TLS 還很陌生。 我正在編寫一個 java 客戶端,它將對 URL 執行簡單的 get 請求。 但連同 URL 一起,我必須發送提供給我的客戶端證書(.p7b)。 我已經提取了 .p7b 文件中存在的所有證書以分離 .cert 文件並將這些 .cert 文件添加到 java 信任存儲中。 但是,在我到達該端點時執行所有步驟后,我收到此警告
*** ServerHelloDone
[read] MD5 and SHA1 hashes: len = 4
0000: 0E 00 00 00 ....
Warning: no suitable certificate found - continuing without client authentication
*** Certificate chain
<Empty>
***
這是我用於配置其余模板的 java 代碼
@Bean
public RestTemplate getTemplate(RestTemplateBuilder builder) throws Exception{
char[] password = "changeit".toCharArray();
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial(keyStore("classpath:truststore/truststore.jks", password), new TrustSelfSignedStrategy())
.build();
HttpClient client = HttpClients.custom().setSSLContext(sslContext).build();
return builder
.requestFactory(new HttpComponentsClientHttpRequestFactory(client))
.build();
}
private KeyStore keyStore(String file, char[] password) throws Exception {
KeyStore keyStore = KeyStore.getInstance("JKS");
File key = ResourceUtils.getFile(file);
try (InputStream in = new FileInputStream(key)) {
keyStore.load(in, password);
}catch(Exception e) {
e.printStackTrace();
}
return keyStore;
}
我無法弄清楚我錯過了什么。 請幫忙
如果“發送 [a] 客戶端證書”實際上是指進行 SSL/TLS 客戶端身份驗證,即使您省略了將直接顯示它的日志部分,您嘗試連接的服務器也明確要求,這不僅包括發送證書。 發送證書並不能證明身份,因為任何人都可以復制和發送證書。 要進行身份驗證和證明身份,您系統中的 SSL/TLS 實現(這里是 Java 的 JSSE 組件)必須同時發送證書以及鏈式證書(如果需要),並使用相應的私鑰對某些數據進行簽名握手。 有些人只注意到第一部分,因此只談論第一部分,但沒有第二部分就毫無用處。
簡而言之,僅僅發送證書是沒有用的,這意味着只有證書是沒有用的。 您必須同時擁有證書(通常是鏈)和私鑰,而您顯然沒有,因為 p7b 不能包含私鑰。
正常和推薦的程序是您從 CA(或從 CA 獲得證書的人)獲得證書 - 可能但不一定是 p7b,因為您首先生成並給了他們一個 CSR(證書簽名請求),在這種情況下,您已經擁有私鑰——找到它並使用它。 使用它的方法取決於它的形式,這又取決於你如何生成它,你沒有說,但你最終會想要一個KeyStore
對象,你可以給.loadKeyMaterial
NOT Trust
。 (如果服務器正在使用不是已建立的“公共”CA 之一的 CA(或錨點)下的證書,則您只需要或應該使用.loadTrustMaterial
。)
如果其他人生成了 CSR 並(然后)獲得了證書,則他們需要向您提供私鑰,或者您需要從他們那里獲取私鑰,然后將其與上述證書一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.