1

我使用以下 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;
    }

我对此有一些安全问题,因为据我所知,它只接受所有证书。所以我问自己是否有办法只接受来自 localhost 端口 9443 的证书?

4

1 回答 1

4

假设这些是您的自签名证书,而不仅仅是任何自签名证书,那么创建自己的证书颁发机构可能更有意义,这样您就可以拥有有效的签名证书,而不是创建变通办法并失去拥有证书的好处.

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

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

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

于 2011-10-11T21:48:06.990 回答