前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给各人。点击跳转到网站。
简介
TLS,即传输层安全性,及其前身SSL,即安全套接字层,是用于将平凡流量包装在受掩护的加密包中的网络协议。
使用这项技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部方拦截。证书体系还帮助用户验证他们正在连接的站点的身份。
在本指南中,您将为 CentOS 7 服务器上的 Nginx web 服务器设置一个自署名的 SSL 证书。
先决条件
要完资源教程,您应具备以下条件:
- 配置了具有 sudo 权限的非根用户的 CentOS 服务器,如《CentOS 7 初始服务器设置》中所述。
- 在服务器上安装了 Nginx,如《如安在 CentOS 7 上安装 Nginx》中所述。
当您准备好开始时,请使用您的 sudo 用户登录到服务器。
步骤 1 — 创建 SSL 证书
TLS/SSL 通过使用公共证书和私钥的组合来工作。SSL 密钥在服务器上保密。它用于加密发送给客户端的内容。SSL 证书与哀求内容的任何人公开共享。它可用于解密由相干 SSL 密钥署名的内容。
服务器上应该已经存在 /etc/ssl/certs 目录,用于生存公共证书。您还必要创建一个 /etc/ssl/private 目录,用于生存私钥文件。由于此密钥的保密对于安全性至关紧张,因此紧张的是要锁定权限,以防止未经授权的访问:
- sudo mkdir /etc/ssl/private
- sudo chmod 700 /etc/ssl/private
复制代码 现在,您可以通过在终端中输入以下下令,使用 OpenSSL 一次性创建自署名密钥和证书对:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
复制代码 您将被要求回答一系列题目。在讨论这些题目之前,让我们看看下令中发生了什么:
- openssl:这是用于创建和管理 OpenSSL 证书、密钥和其他文件的根本下令行工具。
- req:此子下令指定您要使用 X.509 证书署名哀求(CSR)管理。“X.509” 是 SSL 和 TLS 依照的用于其密钥和证书管理的公钥底子设施尺度。您要创建一个新的 X.509 证书,因此您正在使用此子下令。
- -x509:这进一步修改了先前的子下令,告诉实用程序您要创建自署名证书,而不是生成证书署名哀求,这通常会发生。
- -nodes:这告诉 OpenSSL 跳过使用暗码短语掩护您的证书的选项。您必要 Nginx 可以或许在服务器启动时无需用户干预地读取文件。暗码短语会阻止这种环境发生,因为您每次重新启动后都必要输入它。
- -days 365:此选项设置证书被视为有用的时间长度。在此处设置为一年。
- -newkey rsa:2048:这指定您要同时生成新证书和新密钥。您之前没有创建用于签署证书的密钥,因此必要同时创建它和证书。rsa:2048 部分告诉它生成一个长度为 2048 位的 RSA 密钥。
- -keyout:此行告诉 OpenSSL 在哪里放置您正在创建的生成私钥文件。
- -out:这告诉 OpenSSL 在哪里放置您正在创建的证书。
如上所述,这些选项将创建一个密钥文件和一个证书。您将被要求回答关于服务器的一些题目,以便将信息嵌入证书中。
适当填写提示。最紧张的一行是哀求“通用名称(例如服务器 FQDN 或您的名称)”。您必要输入与您的服务器关联的域名或您服务器的公共 IP 地址。
提示的全部内容将如下所示:
- Country Name (2 letter code) [XX]:US
- State or Province Name (full name) []:Example
- Locality Name (eg, city) [Default City]:Example
- Organization Name (eg, company) [Default Company Ltd]:Example Inc
- Organizational Unit Name (eg, section) []:Example Dept
- Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
- Email Address []:webmaster@example.com
复制代码 您创建的两个文件将被放置在 /etc/ssl 目录的适当子目录中。
由于您正在使用 OpenSSL,您还应该创建一个强大的 Diffie-Hellman 组,用于与客户端协商完善前向保密。
您可以通过输入以下下令来实行此操作:
- sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
复制代码 这可能必要几分钟,但完成后,您将在 /etc/ssl/certs/dhparam.pem 中拥有一个强大的 DH 组,您可以在配置中使用。
步骤 2 — 配置 Nginx 使用 SSL
在 CentOS 中,默认的 Nginx 配置相当零散,带有默认的 HTTP 服务器块存储在主配置文件中。Nginx 会在 /etc/nginx/conf.d 目录中检查以 .conf 结尾的文件以获取额外的配置。
您将在此目录中创建一个新文件,用于配置一个服务器块,以使用您生成的证书文件提供内容。然后,您可以选择配置默认的服务器块以将 HTTP 哀求重定向到 HTTPS。
创建 TLS/SSL 服务器块
在 /etc/nginx/conf.d 目录中创建并打开一个名为 ssl.conf 的文件:
- sudo vi /etc/nginx/conf.d/ssl.conf
复制代码 在此中,起首打开一个 server 块。默认环境下,TLS/SSL 连接使用端口 443,因此这应该是您的 listen 端口。server_name 应设置为您在生成证书时用作通用名称的服务器域名或 IP 地址。接下来,使用 ssl_certificate、ssl_certificate_key 和 ssl_dhparam 指令来设置您生成的 SSL 文件的位置:
- server {
- listen 443 http2 ssl;
- listen [::]:443 http2 ssl;
- server_name your_server_ip;
- ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
- ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
- ssl_dhparam /etc/ssl/certs/dhparam.pem;
- }
复制代码 接下来,您将添加一些额外的 SSL 选项,以增长站点的安全性。您将使用的选项是来自 Cipherlist.eu 的发起。该网站旨在为流行软件提供易于消化的加密设置。
有一些配置的部分您可能希望举行修改。起首,您可以为上游哀求添加您首选的 DNS 解析器到 resolver 指令中。在本指南中,您使用了 Google 的解析器,但如果您有其他偏好,可以举行更改。
最后,您应该花一点时间了解 HTTP 严格传输安全性(HSTS),特别是关于“preload”功能。预加载 HSTS 可以提供加强的安全性,但如果意外启用或错误启用,可能会产生深远的效果。在本指南中,您不会预加载这些设置,但如果您确信理解了其影响,可以举行修改。
- server {
- listen 443 http2 ssl;
- listen [::]:443 http2 ssl;
- server_name your_server_ip;
- ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
- ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
- ssl_dhparam /etc/ssl/certs/dhparam.pem;
- ########################################################################
- # from https://cipherlist.eu/ #
- ########################################################################
-
- ssl_protocols TLSv1.3;# Requires nginx >= 1.13.0 else use TLSv1.2
- ssl_prefer_server_ciphers on;
- ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
- ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
- ssl_session_timeout 10m;
- ssl_session_cache shared:SSL:10m;
- ssl_session_tickets off; # Requires nginx >= 1.5.9
- ssl_stapling on; # Requires nginx >= 1.3.7
- ssl_stapling_verify on; # Requires nginx => 1.3.7
- resolver 8.8.8.8 8.8.4.4 valid=300s;
- resolver_timeout 5s;
- # Disable preloading HSTS for now. You can use the commented out header line that includes
- # the "preload" directive if you understand the implications.
- #add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
- add_header X-Frame-Options DENY;
- add_header X-Content-Type-Options nosniff;
- add_header X-XSS-Protection "1; mode=block";
- ##################################
- # END https://cipherlist.eu/ BLOCK #
- ##################################
- }
复制代码 因为您使用的是自署名证书,所以不会使用 SSL stapling。Nginx 将简单地输出警告,为您的自署名证书禁用 stapling,并继续正常运行。
最后,添加您站点的其余 Nginx 配置。这将根据您的需求而有所差别。您只需复制默认位置块中使用的一些指令,这将设置文档根目录和一些错误页面:
- server {
- listen 443 http2 ssl;
- listen [::]:443 http2 ssl;
- server_name your_server_ip;
- ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
- ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
- ssl_dhparam /etc/ssl/certs/dhparam.pem;
- ########################################################################
- # from https://cipherlist.eu/ #
- ########################################################################
-
- . . .
-
- ##################################
- # END https://cipherlist.eu/ BLOCK #
- ##################################
- root /usr/share/nginx/html;
- location / {
- }
- error_page 404 /404.html;
- location = /404.html {
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- }
- }
复制代码 完成后,生存并退出。这将配置 Nginx 使用您生成的 SSL 证书来加密流量。指定的 SSL 选项确保只使用最安全的协媾和暗码。请留意,此示例配置仅提供默认的 Nginx 页面,因此您可能必要修改它以满意您的需求。
创建从 HTTP 到 HTTPS 的重定向(可选)
根据当前的配置,Nginx 对于端口 443 的哀求会相应加密内容,但对于端口 80 的哀求则会相应未加密内容。这意味着您的站点提供了加密,但并未强制使用。在某些环境下这可能没题目,但通常最好要求加密。特别是在浏览器和服务器之间可能传输暗码等机密数据时,这一点尤为紧张。
荣幸的是,默认的 Nginx 配置文件允许我们轻松地向默认的端口 80 服务器块添加指令。您可以通过在 ssl.conf 的开头插入以下内容来实现:
- server {
- listen 80;
- listen [::]:80;
- server_name your_server_ip;
- return 301 https://$host$request_uri;
- }
- . . .
复制代码 完成后生存并关闭文件。这将配置端口 80(默认)的 HTTP 服务器块,将传入哀求重定向到您配置的 HTTPS 服务器块。
步骤 3 —— 启用 Nginx 中的更改
现在您已经举行了更改,可以重新启动 Nginx 来实施新的配置。
起首,您应该检查配置文件中是否存在语法错误。您可以通过输入以下下令来实行此操作:
如果一切顺遂,您将会得到以下雷同的效果:
- nginx: [warn] "ssl_stapling" ignored, issuer certificate not found
- nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
- nginx: configuration file /etc/nginx/nginx.conf test is successful
复制代码 请留意开头的警告。如前所述,由于自署名证书无法使用 SSL stapling,因此此特定设置会引发警告。这是预期的,您的服务器仍然可以正确加密连接。
如果您的输出与上述内容匹配,则您的配置文件没有语法错误。您可以安全地重新启动 Nginx 以实施更改:
- sudo systemctl restart nginx
复制代码 Nginx 进程将被重新启动,实施您配置的 SSL 设置。
步骤 4 —— 测试加密
现在,您可以测试您的 SSL 服务器了。
打开您的网络浏览器,然后在地址栏中输入 https://,后面跟上您服务器的域名或 IP:
- https://server_domain_or_IP
复制代码 由于您创建的证书未经您浏览器信托的证书颁发机构署名,您可能会看到雷同下面的警告:
!Nginx self-signed cert warning
这是预期的和正常的。您只关心证书的加密方面,而不是主机真实性的第三方验证。点击“高级”然后点击提供的链接以继续访问您的主机:
!Nginx self-signed override
您应该可以或许访问您的站点。如果您检察浏览器地址栏,您将看到部分安全性的指示。这可能是一个带有“x”的锁定图标,或者带有感叹号的三角形。在这种环境下,这只是意味着无法验证证书。它仍然在加密您的连接。
如果您配置了 Nginx 将 HTTP 哀求重定向到 HTTPS,您还可以检查重定向是否正常工作:
- http://server_domain_or_IP
复制代码 如果效果显示相同的图标,这意味着您的重定向已经正常工作。
结论
您已经配置了 Nginx 服务器以为客户端连接使用强加密。这将允许您安全地提供哀求,并防止外部方读取您的流量。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |