【发布时间】:2019-04-15 12:15:24
【问题描述】:
我试图在 SSL 连接的上下文中了解客户端和服务器之间的关系。我是否正确理解相同的证书颁发机构(我 - 在下面的示例中)签署服务器和客户端证书的事实使得它们可以通信。因此,只有当客户端使用与服务器证书相同的 CA 签名的客户端证书进行身份验证时,服务器才接受通信,这对于 SSL 连接的想法至关重要?
(下面的脚本直接来自http://blog.nategood.com/client-side-certificate-authentication-in-ngi)
# Create the CA Key and Certificate for signing Client Certs
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
# Create the Server Key, CSR, and Certificate
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
# We're self signing our own server cert here. This is a no-no in production.
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
# Create the Client Key and CSR
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
# Sign the client certificate with our CA cert. Unlike signing our own server cert, this is what we want to do.
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
server {
listen 443;
ssl on;
server_name example.com;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client on;
【问题讨论】:
-
没有。客户端需要信任签署服务器证书的 CA,服务器需要信任签署客户端证书的 CA。
-
但是是否可以使用由不同 CA 签名的服务器和客户端证书来建立连接?所以,当客户端和服务器证书时。没有共同点...
-
我展示的 scipts 中如何体现“信任”?
-
相同的 CA,不同的 CA,没有区别。
ssl_client_certificate指令告诉服务器信任哪个客户端 CA,浏览器的证书管理器包含浏览器信任的所有服务器 CA。