cuốn sách gpt4 ai đã làm

Kho khóa Java - Lập trình chọn chứng chỉ để sử dụng từ tệp kho khóa

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 13:23:12 27 4
mua khóa gpt4 Nike

Tôi có tệp kho khóa Java chứa nhiều chứng chỉ ứng dụng khách. Tôi chỉ muốn chọn một trong các chứng chỉ này trong ứng dụng Java của mình để kết nối với dịch vụ. Có cách nào dễ dàng để làm điều này? Cách duy nhất tôi tìm thấy giải pháp cho đến nay là tạo kho khóa mới trong chương trình bằng cách sử dụng chi tiết chứng chỉ ứng dụng khách từ tệp kho khóa gốc (được tìm thấy qua bí danh của nó). Mặc dù vậy, tôi có thể có một cách dễ dàng để nói "sử dụng chứng chỉ từ tệp keystore.jks với bí danh này" mà không cần phải tạo kho khóa mới chỉ dành cho chứng chỉ bạn muốn sử dụng. Mã này như sau:

        // Thiết lập cài đặt Chứng chỉ ứng dụng khách
KeyStore clientCertStore = KeyStore.getInstance("JKS");
clientCertStore.load(FileInputStream mới(clientKeystoreLocation), clientKeystorePassword);

// Tạo một kho khóa tạm thời, sau đó trích xuất chứng chỉ ứng dụng khách bằng bí danh của nó từ keystore.jks, sau đó tạo
// một kho khóa mới có chứng chỉ này mà quá trình sẽ sử dụng để kết nối.
KeyStore tempKstore = KeyStore.getInstance("JKS");
tempKstore.load(null);
tempKstore.setKeyEntry(certificateAlias, clientCertStore.getKey(certificateAlias, bwConfig.clientKeystorePassword),
clientKeystorePassword, clientCertStore.getCertificateChain(certificateAlias));
clientCertStore = tempKstore;

KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(clientCertStore, clientKeystorePassword);

// Thiết lập cài đặt Truststore
Tệp tinstoreFile = Tệp mới(TrustStoreLocation);
KeyStore TrustStore = KeyStore.getInstance("JKS");
TrustStore.load(FileInputStream mới(truststoreFile), TrustStorePassword);
TrustManagerFactory TrustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
TrustManagerFactory.init(trustStore);

// Đặt thành mã hóa TLS 1.2
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(keyManagerFactory.getKeyManagers(), TrustManagerFactory.getTrustManagers(), null);

SSLSocketFactory ssf = sslContext.getSocketFactory();
ssf.createSocket(serviceURL.getHost(), servicePort);

bp.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", ssf);

câu trả lời hay nhất

Câu hỏi của bạn tương tự nhưLàm cách nào tôi có thể biết bí danh của mục nhập khóa mong muốn vào SSLSocket trước khi kết nối?

mặc địnhTrình quản lý khóasẽ chọn chứng chỉ đầu tiên trong quá trình bắt tay (dựa trên danh sách CA được máy chủ gửi), bạn có thể xây dựng chứng chỉ của riêng mìnhX509KeyManagerđể chỉ định mặc định trình bao bọc bí danh sẽ sử dụng.

cuối cùng X509KeyManager origKm = (X509KeyManager)keyManagerFactory.getKeyManagers()[0];
X509KeyManager km = X509KeyManager mới() {
public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket) {
trả về "bí danh";
}

công khai X509Certificate[] getCertificateChain(Chuỗi bí danh) {
trả về origKm.getCertificateChain(bí danh);
}

// ghi đè các phương thức còn lại được ủy quyền cho origKm ...
}

hiện hữu SSLContext Đặt mới vào trình quản lý khóa

 sslContext.init(KeyManager mới[] { km }, TrustManagerFactory.getTrustManagers(), null);

Về kho khóa Java - lập trình chọn chứng chỉ để sử dụng từ tệp kho khóa, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42442721/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress