在 Nginx 中安装 CA 签名 SSL/TLS 证书
就像我们在上面使用自签名 SSL/TLS 证书一样,任何人都可以为其网站生成和使用安全证书。
因此,对那些网站的真实性提出了一个很大的问号。
因此,为确保 SSL/TLS 证书和网站的真实性,我们需要由全球证书颁发机构对安全证书进行数字签名。
该全球证书颁发机构 (CA) 的真实性还通过 SSL/TLS 证书(称为 rootCA 证书)来确保,该证书默认安装在所有著名的 Web 浏览器中。
获取由证书颁发机构 (CA) 签署的 SSL/TLS 证书。
我们需要生成证书签名请求 (CSR) 并将其发送给该 CA。
但是在生成 CSR 之前,我们需要一个用于加密的私钥。
因此,我们应该使用 openssl 命令生成私钥。
# openssl genrsa -out /etc/pki/nginx/private/nginx-01.key 2048 Generating RSA private key, 2048 bit long modulus (2 primes) .......................................................................................+++++ ..................+++++ e is 65537 (0x010001)
现在,使用上述私钥生成 CSR。
# openssl req -new -key /etc/pki/nginx/private/nginx-01.key -out /etc/pki/nginx/nginx-01.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ---- Country Name (2 letter code) [XX]:PK State or Province Name (full name) []:Sindh Locality Name (eg, city) [Default City]:Karachi Organization Name (eg, company) [Default Company Ltd]:onitroad Organizational Unit Name (eg, section) []:IT Lab Common Name (eg, your name or your server's hostname) []:nginx-01.onitroad.com Email Address []:jackli@nginx-01.onitroad.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
使用电子邮件或者任何其他通信介质将此 CSR 发送给 CA。
然后 CA 将对 CSR 进行数字签名,并将发回两个文件。
- 数字签名的 SSL/TLS 证书
- RootCA 或者链证书
在 Nginx Web 服务器中,我们需要将这两个证书合并到一个文件中。
因此,我们正在生成一个证书包文件,如下所示。
# cat nginx-01.crt CA.crt >> /etc/pki/nginx/bundle.crt
编辑 Nginx 配置文件以启用 HTTPS 并安装 CA 签名的 SSL/TLS 证书。
# vi /etc/nginx/nginx.conf
我们需要添加一个服务器块以在 Nginx 中启用 HTTPS。
幸运的是,Nginx 配置文件已经包含一个特定于 SSL/TLS 配置的服务器块。
找到并取消注释以下服务器块。
我们必须其中更新 SSL/TLS 证书和私钥的位置。
# Settings for a TLS enabled server. server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/pki/nginx/bundle.crt"; ssl_certificate_key "/etc/pki/nginx/private/nginx-01.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
重新启动 Nginx 服务使更改生效。
# systemctl restart nginx.service
在 Web 浏览器中打开 URL https://nginx-01.onitroad.com。
这次页面将通过 HTTPS 提供服务,而不会抛出任何警告或者错误。
在本文中,我们将学习如何在 Nginx Web 服务器中生成和安装 SSL/TLS 证书。
本文分为两个部分,一个是关于自签名 SSL/TLS 证书的配置,另一个是关于在 Nginx Web 服务器上安装 CA 签名的 SSL/TLS 证书。
在 Nginx 中安装自签名 SSL/TLS 证书
我们可以为 Nginx 网站使用自签名 SSL/TLS 证书,如果我们在网络中托管网站,用户非常了解我们网站的真实性。
或者我们没有为网络配置证书颁发机构。
自签名 SSL/TLS 证书是一种未由证书颁发机构 (CA) 签名的证书。
这些类型的安全证书易于生成且不花钱。
在 /etc/pki 中创建 nginx 目录来存储 SSL/TLS 证书和私钥。
# mkdir -p /etc/pki/nginx/private
使用 openssl 命令生成私钥和 SSL/TLS 证书。
默认情况下,Openssl 软件包安装在最小的 CentOS/RHEL 8 操作系统上。
但是,如果我们在 Linux 服务器上找不到它,那么我们可以使用 dnf 命令安装 openssl 包。
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/nginx/private/nginx-01.key -out /etc/pki/nginx/nginx-01.crt Generating a RSA private key ................................+++++ .+++++ writing new private key to '/etc/pki/nginx/private/nginx-01.key' ---- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ---- Country Name (2 letter code) [XX]:PK State or Province Name (full name) []:Sindh Locality Name (eg, city) [Default City]:Karachi Organization Name (eg, company) [Default Company Ltd]:onitroad Organizational Unit Name (eg, section) []:IT Lab Common Name (eg, your name or your server's hostname) []:nginx-01.onitroad.com Email Address []:jackli@nginx-01.onitroad.com
编辑 Nginx 配置文件并添加一个服务器块来为网站启用 HTTPS。
# vi /etc/nginx/nginx.conf
Nginx 配置文件已经包含一个用于 HTTPS 的服务器块,但这些指令默认已被注释。
取消注释以下行并更新 ssl_certificate 和 ssl_certificate_key 的路径。
# Settings for a TLS enabled server. server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/pki/nginx/nginx-01.crt"; ssl_certificate_key "/etc/pki/nginx/private/nginx-01.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
重新启动 nginx.service 使更改生效。
# systemctl restart nginx.service
在 Web 浏览器中打开 URL https://nginx-01.onitroad.com。
Web 浏览器将向我们发出有关网站安全证书的警告。
忽略它并继续访问网站。
在 CentOS 8 上安装 Nginx Web 服务器
首先,我们需要在 Linux 操作系统上安装 Nginx Web 服务器。
我们需要有一个 Nginx Web 服务器的工作实例,以便我们可以通过 SSL/TLS 证书将现有网站从 HTTP 转换为 HTTPS。
登录到服务器。
检查 Linux 操作系统和内核版本。
# uname -a Linux nginx-01.onitroad.com 4.18.0-193.6.3.el8_2.x86_64 #1 SMP Wed Jun 10 11:09:32 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux # cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core)
在这里,我们使用的是 CentOS Linux 8.2 操作系统。
但是对于其他平台,我们将执行的步骤几乎相同。
在 CentOS/RHEL 8 中,Nginx 在默认的 yum 存储库中以模块的形式提供。
列出模块的可用版本。
# dnf module list nginx Last metadata expiration check: 0:06:07 ago on Sun 19 Jul 2020 08:50:14 PM PKT. CentOS-8 - AppStream Name Stream Profiles Summary nginx 1.14 [d] common [d] nginx webserver nginx 1.16 common [d] nginx webserver Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
使用 dnf 命令安装默认版本的 Nginx Web 服务器。
# dnf module install nginx
启用并启动 nginx.service。
# systemctl enable --now nginx.service Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service -> /usr/lib/systemd/system/nginx.service.
在 Linux 防火墙中允许 HTTP 和 HTTPS 服务。
# firewall-cmd --permanent --add-service={http,https} success # firewall-cmd --reload success
在 Web 浏览器中打开 URL http://nginx-01.onitroad.com。
Nginx Web 服务器已成功安装。
什么是 SSL/TLS 证书?
SSL 代表安全套接字层。
它是一种全球标准安全技术,可实现网络浏览器和网络服务器之间的加密通信。
TLS 代表传输层安全。
它是 SSL 的继承者,是该协议的更安全和更新的变体。
数以百万计的网站和网络应用程序使用 SSL/TLS 证书来保证用户数据的安全、验证网站的所有权、防止攻击者创建网站的虚假版本并获得用户信任。