我目前正在尝试通过 Java 中的 SSL/TLS 通过 Internet 传输数据,并且我希望双方都进行身份验证。我自己实现了 KeyManager 来加载密钥对并向对方提供适当的证书。
现在,我正在尝试检查证书,我正在通过实现我自己的 TrustManager 来做到这一点(双方都持有对方的证书,一切都是自签名的)。但是,getAcceptedIssuers 并没有像我想要的那样工作,因为即使我没有返回,连接仍然可以毫无问题地建立。
为什么证书不会被拒绝?
protected static class SelectingTrustManager implements X509TrustManager{
final X509TrustManager delegate;
private String[] trustedAliases;
private final KeyStore keystore;
public SelectingTrustManager(X509TrustManager delegate, KeyStore keystore, String[] trustedAliases) {
this.trustedAliases = trustedAliases;
this.keystore = keystore;
this.delegate = delegate;
}
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException{
delegate.checkClientTrusted(chain, authType);
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException{
delegate.checkServerTrusted(chain, authType);
}
public X509Certificate[] getAcceptedIssuers(){
return new X509Certificate[0];
}
}