关于自签名的疑惑

284 天前
 weimo383

最近在配置 SSL ,连接公司测试内网一直 TLS 握手失败,显示 bad certificate ,证书无法验证通过。查了一下 SSL 验证过程,大致是服务器发送一个证书,包含 CA 私钥加密后的数字签名,客户端用对应的 CA 公钥解密。

然后还是有一些问题请教 v 站大?

  1. 自签名的话是至少生成两张证书吗?我以为是一张 root certificate 交给客户端并添加信任列表,另外一张 server certificate 由服务器发送 server hello 。(假设不需要验证客户端身份)

  2. 客户端如果要信任测试的内网服务器,是否需要问 IT 管理员要 root certificate ?我的情况还比较复杂,是 arduino 单片机作为客户端,我猜需要要到 root certificate 并且添加到 firmware 里面才能连接。

  3. server certificate 包含了 CSR 信息以及数字签名?数字签名是由 CA 私钥加密的? CSR 信息里面有服务器公钥? root certificate 包含什么?我以为应该有 CA 公钥吧,不然客户端怎么检验数字签名?

1156 次点击
所在节点    SSL
9 条回复
weimo383
284 天前
不考虑中间证书哈?
weimo383
284 天前
公司的服务器是 windows server , 访问的服务是 AD 认证, 请问有可能导出 root certificate 供客户端访问吗?
cs010
284 天前
1. 你认为的是对的。
2.理论是的。Arduino 具体怎么添加不知道,反正要让他信任根证书
3. server cert 包含了 root ca 对证书信息的签名,并且包含了 root ca 的 serial number ,客户端会根据 serial number 找到 root ca ,用 root ca 的公钥验签,确定 server cert 是由 root ca 签发。
证书里面还包含了很多东西,打开浏览器绿色锁的证书信息,可以很方便看到。
xiangyuecn
284 天前
递归验证,需要完整证书链。

根证书 A -签名-> 中间证书 B -签名-> 中间证书 C -签名-> 你的证书 D

-------
客户端拿到你的证书 D 后,根据指纹找到证书 C ,用 C 的公钥验证 D 里面的签名

客户端拿到证书 C 后,根据指纹找到证书 B ,验证 C 的有效性
...
以此类推,最终找到了根证书 A ,根证书一般内置在系统里面
------
因为 A 可信,所以 B 可信,继续 C 可信,然后你的 D 也可信,最基本的验证完成

如果中间证书 C 或 B 没有找到(证书链缺失),证书 D 直接无效,没法验证

-----
证书 D 中一般会包含 A 、B 、C (完整证书链),比如 pem 文件 直接简单粗暴的把证书文本 按 D C B A 的顺序放到一起 多加几个换行就 ok 了

所以,系统内只需要有根证书就 ok 了,自签的证书 只需要把自己生成的根证书导入到系统根证书颁发机构里面( Android 不 root 导入不了,并且不信任用户证书),自签证书就能生效
xiangyuecn
284 天前
1. 一般生成两个证书,方便通用些,根证书必须给客户端添加上
2. 其实就是问题 1
3. 证书不包含 csr 信息,csr 是证书请求 用于签发证书,csr 里面包含了待申请证书的公钥(你持有的私钥不会发送给任何人,包含证书颁发机构)。数字签名都是用私钥签名的,私钥除了你自己不会暴露给任何人。

根证书和普通证书没有多大区别,你有的他也有,所有证书都有公钥。

-------------
<硬广> HTML5 网页版 ACME 客户端:向 Let's Encrypt 、ZeroSSL 等支持 ACME 协议的证书颁发机构,免费申请获得用于 HTTPS 的 SSL/TLS 域名证书( RSA 、ECC/ECDSA ),支持多域名和通配符泛域名;只需在现代浏览器上操作即可获得 PEM 格式纯文本的域名证书,不依赖操作系统环境,无需下载和安装软件,纯手动操作,只专注于申请获得证书这一件事

https://xiangyuecn.gitee.io/acme-html-web-browser-client/ACME-HTML-Web-Browser-Client.html
billlee
284 天前
1. 自签名是一张证书。一张 root 证书和另一张 server 证书的叫自建 CA.
2. AD 域的根证书在入域的电脑上就有,你直接导出来就可以用。证书是不需要保密的。
3. 证书包含公钥和一些附加的信息,包括名称、用途等字段,以上所有的信息都有 CA 的签名。签名是用 CA 的私钥对证书信息的摘要做加密。root 证书和服务器证书的区别基本上就只有用途字段不同。
weimo383
284 天前
@billlee 谢谢
julyclyde
284 天前
@cs010 你确认有 serial 这个机制??请拿出证据
hyomarchandocl85
259 天前
@julyclyde
What is the use of serial number in certificate?
This is a unique identifier assigned by the CA which issued the certificate. The serial number is unique within the CA which issued the certificate: no two certificates signed by the same CA certificate have the same serial number.

serial number 应该是 CA 本身的标识符,找父级证书应该是 issuer name

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960856

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX