繁体   English   中英

客户端是否需要根证书 CA 才能与服务器建立 HTTPS 连接?

[英]Is a root certificate CA required on the client side to establish an HTTPS connection with server?

我有一个创建根密钥、根 pem 和根证书的 PowerShell 脚本:(一些样板代码和检查隐藏在下面的代码中)

  1. 生成加密私钥
  2. 创建一个 private.pem 文件
  3. 创建私有 CA.crt 文件
openssl genrsa -des3 -passout pass:$RootPass -out $root_key $key_bit_len
openssl req -x509 -new -nodes -key $root_key -sha256 -days $Duration -out $root_cert -passin pass:$RootPass -subj $subj_info_private
openssl req -x509 -new -nodes -key $root_key -sha512 -days $Duration -out $root_pem -passin pass:$RootPass -subj $subj_info_private

然后用于通过以下方式签署服务器证书:

  1. 制作服务器密钥文件
  2. 创建证书签名请求文件
  3. 创建服务器 Certificate.crt 文件
  4. 将.crt 转换为.pfx
openssl genrsa -out $server_key $key_bit_len
openssl req -new -key $server_key -out $server_csr -subj $subj_info_public
openssl x509 -req -in $server_csr -CA $root_pem -CAkey $root_key -CAcreateserial -out $server_cert -days $Duration -sha512 -extfile $ext_file -extensions 'req_ext' -passin pass:$RootPass
openssl pkcs12 -export -inkey $server_key -in $server_cert -passout pass:$PFXExportPass -name $PersonalCommonName -out $server_pfx

现在在我的服务器上,我可以将根证书安装到受信任的根 CA 存储中,并将服务器(个人)证书安装到个人存储中。

为了让此服务器与客户端安全通信,客户端是否必须安装相同的根证书? 或者有什么我不明白的地方,比如制作客户端密钥,如mariaDB 网站所示。 我试图了解 SSL 证书的技术细节,以了解我是否需要将私钥私有 CA 证书分发给各种客户端(在我的例子中是与中央服务器通信的 EC2 实例)或者是否有其他选项。

证书用于验证站点,即确保一个站点实际上是在与预期的服务器而不是中间人对话。

为了验证证书,需要确定证书是为访问的站点(即 URL 中的域)颁发的,并且是由受信任的 CA 颁发的。 如果无法完成对受信任 CA 的检查,那么中间人就可以通过自己的 CA 为该站点颁发伪造的证书。

受信任的 CA 必须预先为客户端所知,即服务器不能简单地在 TLS 握手中发送它,因为 TLS 握手是不可信的。 如果客户端只信任 TLS 握手中发送的 CA,那么中间人攻击者可以在那里提供自己的 CA。

如果证书是由公共 CA 颁发的,则客户端通常已经知道并信任该 CA。 如果您使用自己的 CA,则需要以某种方式将此 CA 放入客户端信任存储区,然后才能建立 TLS 连接并正确验证证书。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM