大家好,欢迎来到IT知识分享网。
1. 基础知识
1.1 什么是SSL
- SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书。服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书。但是,如果服务器需要对客户端进行身份验证,该怎么办?这就需要双向认证证书。
- 为什么需要另一种认证方式的证书?因为当同时使用两种认证方式的证书时,有助于双方(即客户端和服务器端)之间的相互认证。另外,与标准SSL证书不同的是,双向认证的SSL证书实际上被称作为个人认证证书(PAC)。
- 客户端证书是一种传输层身份验证机制;它可用于在应用层之前验证用户。就 Web 应用程序而言,它发生在“HTTPS”的“S”处:在发生 TLS 握手时对客户端进行身份验证,而不是在通过安全连接建立隧道的 HTTP 层进行身份验证。
SSL身份验证的工作原理
- 网站所有者为其网站域名购买SSL证书,CA遵循国际行业验证标准对申请人身份和域名所有权进行验证。验证成功后,CA为该域名颁发SSL证书。
- 网站所有者将CA机构颁发的SSL证书公钥和私钥都安装到网站服务器上。
- 当客户端浏览器提交HTTPS请求,将进行SSL握手
- 当SSL握手会话密钥发送到服务器后,服务器使用相应的私钥对会话密钥解密。
- 客户端浏览器与服务器双方利用这个会话密钥加密解密传输过程的所有数据。
2. 使用步骤
2.1 创建证书颁发机构并创建 CA 证书
//创建证书颁发机构 openssl genrsa -des3 -out ca.key 4096 //创建 CA 证书 openssl req -new -x509 -days 365 -key ca.key -out ca.crt //如果需要查看证书中输入的内容,可以运行: openssl x509 -in ca.crt -noout -text
2.2 创建客户端证书
//用户:创建密钥和证书签名请求 //如果您还没有 RSA 密钥,请创建一个: openssl genrsa -des3 -out user.key 4096 //然后,创建证书签名请求 (CSR) openssl req -utf8 -new -key user.key -out user.csr -subj "/C=CN/ST=M/L=M/O=M/CN=M-API" //签署企业社会责任 openssl x509 -req -days 365 -in user.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out user.crt -extfile client.conf //创建 PKCS #12 (PFX) openssl pkcs12 -export -out user.pfx -inkey user.key -in user.crt -certfile ca.crt
2.3 openssl参数详解
genra:生成RSA私钥 -des3:使用des3算法 -out :指定生成文件名 2048:私钥长度设置为2048 req:生成证书签名请求 -new:新生成 -key:私钥文件 -subj:生成CSR证书的参数 -days:证书有效期 -req:需要证书 -in:输入csr文件 -signkey:指定 .key 文件 -extfile: 指定额外参数文件
2.4 client.conf
authorityKeyIdentifier = keyid, issuer subjectKeyIdentifier = hash basicConstraints = critical, CA:FALSE keyUsage = critical, digitalSignature extendedKeyUsage = critical, clientAuth
2.5 nginx配置文件
SSL重要配置: - ssl_certificate : 指定网站证书 - ssl_certificate_key : 指定网站证书私钥 - ssl_verify_client : 开启客户端校验* - ssl_client_certificate : 客户端证书颁发CA*
server { listen 443 ssl; server_name {you server}; access_log /var/log/nginx/access.log log_json; ssl_certificate /home/test.crt; ssl_certificate_key /home/test-private.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_verify_client on; ssl_client_certificate /home/ca.crt; location / { return 201 ok; } }
2.6 发起请求
curl -v --cert-type P12 --cert /{path}/user.pfx:{password} '{you url}'
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122713.html