【问题标题】:Is the Https connection trust, If Https cert public key is same? (HttpClient5)Https 连接是否信任,如果 Https 证书公钥相同? (HttpClient5)
【发布时间】:2021-08-18 03:39:04
【问题描述】:

在 PKI 系统中,您可以使用 CA 公钥来验证证书:

x509Certificate.verify(CAPublicKey);

但我只想信任指定的证书,而不是整个 CA 和他签署的所有证书。你不能用自己的公钥验证证书这不起作用然后抛出异常:

x509Certificate.verify(currentCertificatePublicKey);

java.security.SignatureException: Signature does not match

所以我尝试这样做:

x509Certificate.getPublicKey().getEncoded().equals(currentCertificatePublicKey);

这项工作,但我不确定是否安全。我做了一些研究,但我仍然不能 100% 确定,因为没有人像那样使用 https,所以问题是:

有没有可能在没有证书私钥的情况下欺骗 https 客户端? (TLS_1.2)

【问题讨论】:

    标签: java https x509certificate


    【解决方案1】:

    在数组上使用.equals 来比较它们的内容是不正确的。
    这将检查两个数组是否是同一个对象。

    正确的使用方法是Arrays.equals()

    Array.equals() :
    如果两个数组包含相同的数字,则认为两个数组相等 元素,以及两个数组中所有对应的元素对 是平等的。
    https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#equals(byte[],%20byte[])

    byte[] certificatePublicKey = x509Certificate.getPublicKey().getEncoded();
    byte[] storedPublicKey = currentCertificatePublicKey.getEncoded();
    
    bool isPublicKeyCorrect = Arrays.equal(certificatePublicKey, storedPublicKey);
    

    【讨论】:

    • 谢谢。这在证书验证中是否安全?
    猜你喜欢
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2021-04-04
    • 1970-01-01
    • 2011-01-04
    • 2019-02-05
    相关资源
    最近更新 更多