除非使用CApath或CAfile,否则无法验证CA证书

 choojo深呼吸 发布于 2023-01-18 20:58

由于信任问题,我无法将OpenSSL连接到服务器.我已经放置了CA证书/etc/ssl/certs/并且已经运行,sudo c_rehash并且可以看到已经创建了正确的文件.我可以看到CA证书在ca-certificates.crt中.但是如果我跑:

openssl s_client -connect servername.domain.com:636

该命令失败,验证返回码:21(无法验证第一个证书)

如果我做:

openssl s_client -connect servername.domain.com:636 -CApath /etc/ssl/certs/

我得到验证返回码:0(ok)

我能做什么,所以我不必指定CApath?

我正在使用Ubuntu 13.04.

2 个回答
  • 由于信任问题,OpenSSL连接到服务器.

    与几乎所有人都信任的浏览器不同,OpenSSL默认不信任任何内容.

    由您来决定应该信任什么.使用OpenSSL时必须指定一些内容s_client.

    如果您使用OpenSSL API以编程方式工作,则可以使用更多选项.但这似乎与使用OpenSSL命令有关.


    我能做什么,所以我不必指定CApath

    你可以使用CAfile.它避免了重新散列,并为域的信任创建了1:1映射.也就是说,您只信任该域的一个发行者.如果任何其他发行人声称是发行人,您将不会信任发行人或服务器.

    您可以看到如何从OpenSSL中提取所需的信息,s_clientCAfile在如何在OpenSSL中获取SSL证书中使用.

    当使用所有证书时CAPath,您信任任何发行人,即使它不是真正的发行人.这发生在过去和坏事.

    最坏的情况是坏人妥协您信任的CA并为域发布虚假证书.这也发生在过去,而且很糟糕.

    在上面的两个否定情况中,您可以放弃向DNS和CA授予信任,并使用证书或公钥锁定等安全多样化技术.如果您与站点之间存在预先存在的关系,那么您就知道服务器的预期公钥.在这种情况下,不需要信任CA.

    2023-01-18 21:05 回答
  • 您还可以设置和导出环境变量SSL_CERT_FILE或SSL_CERT_DIR ...

    export SSL_CERT_FILE=/path/to/ca_bundle.crt

    export SSL_CERT_DIR=/path/to/ca/dir

    然后,您不必在每个openssl命令中指定CAfile或CApath.

    2023-01-18 21:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有