Java:接受自签名证书

时间:2011-10-11 21:26:23

标签: java security certificate self-signed

我使用以下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的证书?

1 个答案:

答案 0 :(得分:4)

假设这些是您的自签名证书而不仅仅是任何自签名证书,那么创建自己的证书颁发机构可能更有意义,因此您可以拥有有效的签名证书,而不是创造工作并失去获得证书的好处。

通过创建自己的CA,您可以签署自己的证书,然后只需将CA证书导入Java密钥库。然后没有自签名证书的问题。此外,您还可以信任证书(假设您妥善保管证书密钥)。

成为您自己的CA实际上比您想象的要容易得多。至少对我来说就是这种情况。

这是一个带有一些分步说明的链接。 http://sandbox.rulemaker.net/ngps/m2/howto.ca.html