Java 从SSLContext中提取证书
我正在以标准方式创建SSLContext:Java 从SSLContext中提取证书,java,ssl,ssl-certificate,keystore,Java,Ssl,Ssl Certificate,Keystore,我正在以标准方式创建SSLContext: 获取.p12证书文件 创建密钥库并将证书加载到其中 创建KeyManagerFactory,使用KeyStore初始化它,并获取KeyManagers 创建TrustManagerFactory,使用null初始化它,然后获取TrustManager 创建SSLContext并使用KeyManager和TrustManager初始化它 问题是-如何从SSLContext提取密钥库和证书数据?任务是从证书获取指纹哈希 是否可能,或者我必须单独获取,从
- 获取.p12证书文件
- 创建密钥库并将证书加载到其中
- 创建KeyManagerFactory,使用KeyStore初始化它,并获取KeyManagers
- 创建TrustManagerFactory,使用null初始化它,然后获取TrustManager
- 创建SSLContext并使用KeyManager和TrustManager初始化它
是否可能,或者我必须单独获取,从文件中读取证书?如果您有自定义TrustManager,则可以这样做。对于该自定义类,您可以参考此。查找private
SavingTrustManager
static类
在您使用java的默认TrustManager的地方,使用这个类以便您可以检索服务器发送的证书
SSLContext context = SSLContext.getInstance("TLS");
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(dummyTrustStore);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SavingTrustManager savingTrustManager = new SavingTrustManager(defaultTrustManager);
context.init(null, new TrustManager[] { savingTrustManager }, null);
SSLSocketFactory factory = context.getSocketFactory();
并且在开始握手后,您可以从静态成员变量链
从SavingTrustManager获取证书,如:
savingTrustManager.chain
如果您有密钥库,那么您可以获得如下证书
certificate cert=KeyStore.getCertificate(别名)代码>,但在使用该证书之前,您必须知道该证书的别名(名称)。然后获取指纹也很容易org.apache.commons.codec.binary.Hex.encodehextString(cert.getFingerprint())代码>所以要获取证书信息,我必须建立连接?嗯,不是我想做的,不过还是谢谢你。