我使用以下TrustManager在我的Java应用程序中接受来自本地测试服务器的自签名证书:
public class CertificateAcceptor {
private TrustManager[] createTrustManager() {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// leave blank to trust every client
}
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// leave blank to trust every client
}
}};
return trustAllCerts;
}
我对此有一些安全问题,因为据我所知,这只接受所有证书。所以我问自己是否有办法只接受来自9443端口的localhost的证书?
答案 0 :(得分:4)
假设这些是您的自签名证书而不仅仅是任何自签名证书,那么创建自己的证书颁发机构可能更有意义,因此您可以拥有有效的签名证书,而不是创造工作并失去获得证书的好处。
通过创建自己的CA,您可以签署自己的证书,然后只需将CA证书导入Java密钥库。然后没有自签名证书的问题。此外,您还可以信任证书(假设您妥善保管证书密钥)。
成为您自己的CA实际上比您想象的要容易得多。至少对我来说就是这种情况。
这是一个带有一些分步说明的链接。 http://sandbox.rulemaker.net/ngps/m2/howto.ca.html