Cố gắng triển khai xác thực khóa ứng dụng khách (với ca tự ký).Xác thực ứng dụng khách với HttpClient
Mã trông giống như:
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream("client.p12"), "changeit".toCharArray())
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(null, new TrustSelfSignedStrategy()) //DONT DO THAT, IT'S JUST TO SIMPLIFY THIS EXAMPLE. USE REAL TrustStore WITH REAL SERVER CERTIFICATE IMPORTED. DONT TRUST SELF SIGNED
.loadKeyMaterial(keyStore, "changeit".toCharArray())
.build();
socketFactory = new SSLConnectionSocketFactory(
sslcontext,
new String[] {"TLSv1.2", "TLSv1.1"},
null,
new NoopHostnameVerifier()
);
HttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.build();
Với -Djavax.net.debug=all
tôi có thể nhìn thấy nó một cách chính xác chọn giấy chứng nhận của tôi, tôi thấy chữ ký, tôi thấy yêu cầu chứng chỉ, và có ECDHClientKeyExchange, vv, tất cả có vẻ tốt đẹp.
Nhưng dù sao tôi nhận được câu trả lời sau đây từ Nginx (với tình trạng 400):
<head><title>400 The SSL certificate error</title></head>
Thông báo, mà cấp giấy chứng nhận không chính xác/nginx chìa khóa thường giảm phiên, w/o cung cấp bất kỳ chi tiết để đáp ứng văn bản đơn giản .
này client.p12
công trình từ dòng lệnh, như:
$ curl -ivk --cert client.p12:changeit https://192.168.1.1
* Rebuilt URL to: https://192.168.1.1/
* Trying 192.168.1.1...
* Connected to 192.168.1.1 (192.168.1.1) port 443 (#0)
* WARNING: SSL: Certificate type not set, assuming PKCS#12 format.
* Client certificate: client-es.certs.my
* TLS 1.2 connection using TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
* Server certificate: server.certs.my
* Server certificate: ca.my
> GET/HTTP/1.1
> Host: 192.168.1.1
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
Vì vậy, chìa khóa này chắc chắn là hợp lệ. Nhưng tại sao nó không hoạt động cho Java? Có bất cứ điều gì tôi đã bỏ lỡ trong cấu hình java ssl?
Chứng chỉ của bạn có được nhập vào kho khóa của bạn không? – STaefi
nó được tải trực tiếp từ 'client.p12'. Tôi cũng đã cố gắng để nhập nó vào kho khóa, nhưng nó không thay đổi bất cứ điều gì –