【问题标题】:Trust only my selfsigned certificate in httpclient在 httpclient 中只信任我的自签名证书
【发布时间】:2013-08-11 13:12:43
【问题描述】:

我生成了自签名证书以使用它来验证我的网络应用程序。客户端而不是 Web 浏览器使用客户端应用程序与 Web 服务器通信。客户端应用程序使用 httpclient。互联网上有很多关于如何信任 httpclient 中所有 ssl 证书的示例。我不想信任所有证书,我只想信任一个,即我的自签名证书(当然每个 CA 都信任证书)。我知道我可以使用 keytool 将我的证书添加到受信任的密钥库,但我不想在 JSSE 密钥库中进行交互。我想说 httpclient 信任一个特定的自签名证书。

第一个问题

有可能吗?

第二个问题

描述的解决方案在开发环境中是可以的。我认为这是不好的做法,但我想知道它在生产环境中是否可以接受?

【问题讨论】:

    标签: ssl-certificate apache-httpclient-4.x self-signed


    【解决方案1】:

    有可能吗?

    当然可以。您可能只需要做更多的工作来管理您的信任材料并为您的应用程序初始化 SSL 上下文。您可以选择信任一个且唯一的证书,也可以选择使用 JRE 附带的信任材料,然后有选择地添加特定于您的应用程序的信任材料。

    您可以使用Apache HttpClient 4.3 中的SSLContextBuilder 来简化信任和密钥材料管理和初始化的过程

    在生产环境中可以接受吗?

    这在很大程度上取决于应用程序的安全上下文和要求。仅信任一个特定证书而不信任任何标准 CA 可能会使您的应用程序不太容易受到中间人攻击,但每次相关证书过期或被吊销时都需要重新配置并可能重新部署。确保私钥不会落入坏人之手也将成为您的责任。这是优点和缺点的结合。

    【讨论】:

    • 感谢您的回答。我想信任 CA 签署的证书和我的自签名证书。主要缺陷是无法撤销我的证书,当有人窃取或破坏我的私钥时,需要重新部署客户端应用程序。我不担心证书过期,因为我只需要大约 3 个月的时间。总结这不是最好的主意。
    • @Mariusz:我认为标准的 JSSE 实现(至少在 Java 1.8 之前)也不会尝试通过查询证书撤销列表 (CRL) 来验证证书,因此您不会损失太多。同时,即使证书确实被吊销,您仍然需要重新部署以将新证书放在其位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2016-11-29
    • 2019-09-03
    相关资源
    最近更新 更多