网络信息安全|第4章:启用 HTTPS
Synopsis: HTTP 是明文传输,非常不安全,数据可能被窃听、篡改,服务器身份也可能被冒充,而 HTTPS 是基于我们前面介绍的 SSL/TLS 协议,可实现安全加密连接。本文结合上一篇文章搭建的私有 CA 为 Nginx 服务器签署数字证书,Nginx 开启 HTTPS 功能
1. 什么是 HTTPS ?
HTTPS(Hypertext Transfer Protocol Secure)
是一种互联网通信协议,可保护用户计算机与网站服务器之间的数据完整性和机密性,用户可以在使用你的网站时获得安全加密的、私人在线体验。建议: 无论你的网站上的内容是什么(比如博客),都请采用 HTTPS
来保护用户与你网站的交互
HTTPS
使用 HTTPS
发送的数据会通过 TLS
协议从而得到保护,TLS 协议能够提供三个关键的保护:
Authentication
: 确保用户确实是在与你的网站进行通信,而不是冒充的钓鱼网站,可防止中间人攻击Encryption
: 加密用户与你的网站之间交换的数据,可确保用户的信息不会被窃听Data integrity
: 确保数据在传输过程中不会被恶意篡改或者损坏
所以 HTTPS
也可以被称为 HTTP over TLS
或 HTTP over SSL
,建立 HTTPS 连接包含 TCP 握手和 TLS 握手两个阶段,比如下图是 TCP 三次握手 + TLS v1.2 基于 RSA 算法握手:
2. 服务器申请数字证书
上一篇 文章讲述了如何通过 OpenSSL
工具来生成 私钥
并创建 证书签署请求(CSR)
,之后你可以将 CSR 发送给互联网上可信任的 CA,比如 DigiCert。也有提供免费数据证书的 CA 机构,比如 Let’s Encrypt,如何申请可以参考 网络信息安全|第7章:申请 Let's encrypt 免费 RSA/ECC 双证书 自动续期 和 网络信息安全|第8章:申请 Let's encrypt 通配符证书 自动续期
为方便测试,我们使用本地自建 CA 来签发服务器 Nginx 的证书,并配置 Nginx 启用 HTTPS 功能
假设我们已经在 192.168.40.128
上按照上一篇文章第 4 章所述,搭建好了私有 Root CA。现在准备在 192.168.40.123
上为 Nginx 启用 HTTPS,所使用的系统都是 CentOS 7.3
CentOS 7 中安装 Nginx 后,它的默认配置目录为 /etc/nginx
1. 生成私钥 [root@CentOS ~]# cd /etc/nginx [root@CentOS nginx]# mkdir ssl && cd ssl/ [root@CentOS ssl]# (umask 077; openssl genrsa -out nginx.key 2048) 2. 生成 CSR (注意:由于是私有 CA,所以 Nginx 的组织机构信息 O=Madmalls.com Co.,Ltd 必须与 CA 的一致,否则后续 CA 无法签署此证书) [root@CentOS ssl]# openssl req -new \ -key nginx.key \ -out nginx.csr \ -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=Madmalls.com Co.,Ltd/OU=Secure Web Server/CN=*.wangy.com" \ -reqexts SAN \ -config <(cat /etc/pki/tls/openssl.cnf \ <(printf "\n[SAN]\nsubjectAltName=DNS:www.wangy.com,DNS:blog.wangy.com")) 3. 提交给 CA 之前,需要先验证 CSR 是否正确 [root@CentOS ssl]# openssl req -text -in nginx.csr -noout -verify
然后将 CSR
发送给本地私有 CA:
3. CA 签署证书
CA 先验证 CSR
有没有被篡改过:
如果没有问题就可以颁发证书了,注意: CA 在签署证书时必须添加证书使用者要求的 SAN
扩展信息:
[root@CentOS ~]# openssl ca \ -days 365 \ -in /tmp/nginx.csr \ -out /etc/pki/CA/certs/nginx.crt \ -extensions SAN \ -config <(cat /etc/pki/tls/openssl.cnf \ <(printf "\n[SAN]\nsubjectAltName=DNS:www.wangy.com,DNS:blog.wangy.com")) Using configuration from /dev/fd/63 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: May 29 07:25:14 2019 GMT Not After : May 28 07:25:14 2020
0 条评论
评论者的用户名
评论时间暂时还没有评论.