在 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 证书

在本文中,我们将学习如何在 Nginx Web 服务器中生成和安装 SSL/TLS 证书。

本文分为两个部分,一个是关于自签名 SSL/TLS 证书的配置,另一个是关于在 Nginx Web 服务器上安装 CA 签名的 SSL/TLS 证书。

更多: zhilu jiaocheng

在 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 证书来保证用户数据的安全、验证网站的所有权、防止攻击者创建网站的虚假版本并获得用户信任。

日期:2020-09-17 00:16:36 来源:oir作者:oir