网络信息安全|第4章:启用 HTTPS

  • 原创
  • Madman
  • /
  • /
  • 0
  • 1296 次阅读

网络信息安全-min.jpg

Synopsis: HTTP 是明文传输,非常不安全,数据可能被窃听、篡改,服务器身份也可能被冒充,而 HTTPS 是基于我们前面介绍的 SSL/TLS 协议,可实现安全加密连接。本文结合上一篇文章搭建的私有 CA 为 Nginx 服务器签署数字证书,Nginx 开启 HTTPS 功能

1. 什么是 HTTPS ?

HTTPS(Hypertext Transfer Protocol Secure) 是一种互联网通信协议,可保护用户计算机与网站服务器之间的数据完整性和机密性,用户可以在使用你的网站时获得安全加密的、私人在线体验。建议: 无论你的网站上的内容是什么(比如博客),都请采用 HTTPS 来保护用户与你网站的交互

HTTPS 使用 HTTPS 发送的数据会通过 TLS 协议从而得到保护,TLS 协议能够提供三个关键的保护:

  1. Authentication: 确保用户确实是在与你的网站进行通信,而不是冒充的钓鱼网站,可防止中间人攻击
  2. Encryption: 加密用户与你的网站之间交换的数据,可确保用户的信息不会被窃听
  3. Data integrity: 确保数据在传输过程中不会被恶意篡改或者损坏

所以 HTTPS 也可以被称为 HTTP over TLSHTTP over SSL,建立 HTTPS 连接包含 TCP 握手和 TLS 握手两个阶段,比如下图是 TCP 三次握手 + TLS v1.2 基于 RSA 算法握手:

http-over-tls-handshake-min

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:

[root@CentOS ssl]# scp nginx.csr root@192.168.40.128:/tmp

3. CA 签署证书

CA 先验证 CSR 有没有被篡改过:

[root@CentOS ~]# openssl req -text -in /tmp/nginx.csr -noout -verify

如果没有问题就可以颁发证书了,注意: 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
                                
                            
未经允许不得转载: LIFE & SHARE - 王颜公子 » 网络信息安全|第4章:启用 HTTPS

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.

专题系列