java - TrustManager 只允许一个特定的不受信任的证书

标签 java ssl https x509certificate

我正在围绕我们内部使用的一些其余 Web 服务构建一个小型包装器 Java 类。我们使用安全的 HTTPS 连接。通常,SSL 只允许受信任的证书。我希望包装类的用户能够将 X509Certificate 对象作为包装构造函数的输入。该证书通常是不安全的,但这就是重点 - 我们希望在内部进行测试而不使用安全证书。

public ServicesWrapper(String serviceURL, X509Certificate additionalCertificate)
{
    //Add the certificate to the trustmanager of the sslcontext.
}

我多次看到“信任所有证书”TrustManager hack (like here),但这不是我需要的。我真的很想指定给定的(不受信任的)证书现在应该被认为是受信任的。其他不受信任的证书不好。所以我实现了自己的 TrustManager,但我卡在了 checkTrusted 步骤:

public class NaiveTrustManager implements X509TrustManager
{
    //The extra certificate that should be trusted.
    private X509Certificate additionalCertificate;

    //Constructor
    public NaiveTrustManager(X509Certificate _additionalCertificate)
    {
        additionalCertificate = _additionalCertificate;
    }

    ...other methods here...


    public void checkServerTrusted(java.security.cert.X509Certificate[] certificateChain, String authType)
    {
        for(X509Certificate c : certificateChain)
        {
            **?????????????????**
                    pseudocode:
                    if (c is equal to additionalcertificate)
                        stop execution, we trust it!
                    if (nothing matches)
                        throw certificatEexception
        }
    }
}

根据证书链检查证书的正确语法是什么?我检查了一些属性,但证书似乎没有名称或 ID 或任何可匹配相等性或比较它们的内容。

最佳答案

不要为此编写代码。只需将自签名证书添加到您的测试环境信任库。

关于java - TrustManager 只允许一个特定的不受信任的证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761007/

相关文章:

java - 如何在没有托管 ZPL 打印机的情况下将 ZPL 命令转换为图像

java - 鼠标滚轮闪烁,更多关于原因

asp.net - 需要更新服务器或网站以支持 AWS 证书轮换

Java 精简代码

java - eureka 中所有注册微服务的 swagger 配置

php - 在网站本地备份上禁用 SSL 以在 WAMP 堆栈中进行本地编辑

android - Chrome 报告来自不同计算机的同一站点的 2 种不同的 SSL 挂锁状态,可能受到感染?

asp.net - IIs 8 将 URL 从 http 重定向到 https

asp.net - 我的 SSL 证书是否适用于 IIS 上的新 Wordpress 网站?

ssl - 表彰机器名称和 IP 地址的自签名证书