SSL:了解自签名证书

标签 ssl openssl certificate x509

我想知道在建立 SSL 连接时通常如何检查自签名证书。

让我们看一下自签名证书:

  • 客户端和服务器提供带有私钥的自签名证书(例如使用 OpenSSL 创建)

  • 服务器收到来自客户端"ClientHello"消息时,他正在向客户端传输他的证书。

  • ServerHelloDone消息发送给客户端,然后客户端需要验证证书。

客户端在收到服务器证书时,验证证书的步骤是什么? 我知道通常不应该使用自签名证书,事实上没有第三方实例 (CA) 可以检查。

客户端是直接接受服务器证书而没有任何进一步的步骤,还是客户端在建立连接之前已经提供了服务器“根”证书?

最佳答案

When the client is receiving the server certificate, what are his steps to verify this certificate?

客户端执行证书链接引擎来验证证书。重要的检查是:

1) 证书签名

2) 证书主题。主题字段中的 CN 属性(或主题备用名称中的适当名称)必须与输入的 URL 匹配。例如,您连接到 www.example.com,那么这个名称必须列在主题和/或 SAN 扩展名中。

3) 证书有效期

4) 证书吊销

5) 证书链接到受信任的根(以自签名形式呈现)

6) RFC5280中定义的其他检查(包括但不限于:增强的 key 使用、策略约束、名称约束等)。

在自签名证书的情况下,证书链由单个元素组成——服务器证书。在这种情况下,客户端只跳过第 4 步,因为自签名证书无法撤销。并且这个自签名证书必须作为受信任的根证书被客户端明确信任,因为所有自签名证书都是根证书。

关于SSL:了解自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27929357/

相关文章:

c++ - 如何使用 OpenSSL 测量 C++ Curl 中的握手时间?

python - 如何在 ssl python 套接字中设置密码

security - 确保无需凭据的客户端/服务器身份验证

java - wss4j: - 找不到别名的 key :monit

.htaccess - 如何更改此 .htaccess 以在 SSL 中加载我的网站

java - 如何通过 SSL 连接 PostgreSQL 数据库?

ssl - 运行 Fiddler 作为 HTTP 到 HTTPS 反向代理

ssl - Golang : how to specify certificate in TLS config for http client

ios - 无法在 swift 中解密使用 openssl -aes256 加密的字符串

http - SSL 自签名证书