如何安装Nginx让我们加密并从SSLLabs测试中获取A +
在本教程中,我将逐步向您展示如何使用Letsencrypt证书安装和配置Nginx Web服务器。 本指南将告诉您如何安装Nginx Web服务器,安装让我们的加密工具,生成SSL证书以加密,使用SSL配置nginx虚拟主机,以及创建额外的SSL配置以从SSL测试SSL实验室获取A +。
先决条件
- Linux服务器 - Ubuntu 18.04或CentOS 7.5
- 根特权
我们将要做什么?
- 安装Nginx Web服务器
- 配置防火墙UFW / Firewalld
- 安装让我们加密并生成SSL证书
- 配置安全SSL
- 使用SSL配置Nginx虚拟主机
- 测试
第1步 - 安装Nginx Web服务器
在本教程中,我们将指导您在两台Linux服务器(Ubuntu 18.04和CentOS 7.5)上使用Letsencrypt安装和配置Nginx Web服务器。
在Ubuntu 18.04上。
更新存储库,然后使用下面的apt命令安装nginx。
sudo apt update
sudo apt install nginx -y
在CentOS 7.5上。
将EPEL存储库安装到CentOS系统并使用yum命令安装Nginx。
sudo yum install epel-release -y
sudo yum install nginx -y
安装完成后,启动Nginx服务并使其每次在系统启动时启动。
systemctl start nginx
systemctl enable nginx
Nginx Web服务器现在已安装,并且正在默认HTTP端口80上运行。请使用下面的netstat命令进行检查。
netstat -plntu
第2步 - 配置防火墙UFW - Firewalld
建议打开服务器上的防火墙并根据需要打开特定端口。 在这一步中,我们将演示如何在Linux服务器Ubuntu 18.04上使用UFW防火墙和CentOS 7.5系统上的Firewalld打开SSH,HTTP和HTTPS端口。
在Ubuntu 18.04上 - UFW防火墙
在Ubuntu系统上启用UFW防火墙之前,请确保在列表防火墙配置中启用了SSH端口。
使用ufw命令将SSH服务端口添加到防火墙配置,然后启用UFW防火墙服务。
ufw allow ssh
ufw enable
现在添加HTTP和HTTPS服务。
ufw allow http
ufw allow https
SSH,HTTP和HTTPS服务端口已添加到UFW防火墙服务列表中,请使用以下命令检查它。
ufw status
在CentOS 7.5 - Firewalld上
在向firewelld添加端口和服务之前,请确保firewalld服务已启动并正在运行。
启动firewalld服务并使其每次在系统启动时启动。
systemctl start firewalld
systemctl enable firewalld
注意:
- Firewald服务列表中默认启用SSH服务。
现在使用下面的firewall-cmd命令添加HTTP和HTTPS服务。
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
重新加载firewalld配置并检查服务列表。
firewall-cmd --reload
firewall-cmd --list-services
您将在列表中获得SSH,HTTP和HTTPS服务。
第3步 - 安装Letsencrypt并生成证书
在这一步中,我们将安装letsencrypt工具,并使用cerbot命令生成强大的SSL证书Letsencrypt。
在Ubuntu 18.04上
使用下面的apt命令安装letsencrypt软件包。
sudo apt install letsencrypt -y
在CentOS 7.5上
现在使用下面的yum命令在CentOS 7上安装letsencrypt软件包。
sudo yum install certbot -y
安装完成后,我们将创建一个用于生成SSL证书文件的新配置。
在Ubuntu 18.04上
转至'/ etc / nginx'配置目录并在'snippets'目录下创建新的配置文件'cerbot.conf'。
cd /etc/nginx/
vim snippets/certbot.conf
在那里粘贴以下配置。
location /.well-known { alias /var/www/html/.well-known; }
保存并退出。
现在编辑默认的Nginx虚拟主机文件。
vim sites-available/default
在“服务器{..}”块下添加以下配置。
include snippets/certbot.conf;
保存并退出。
在CentOS 7.5上
转至'/ etc / nginx'配置目录,并在'default.d'目录下创建新的配置文件'certbot.conf'。
cd /etc/nginx/
vim default.d/certbot.conf
粘贴下面的配置。
location /.well-known { alias /usr/share/nginx/html/.well-known; }
保存并退出。
现在测试nginx配置并确保没有错误,然后重新启动nginx服务。
nginx -t
systemctl restart nginx
接下来,使用certbot命令生成SSL letsencrypt证书。
在Ubuntu 18.04上
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email myemail@gmail.com -w /var/www/html -d hakase-labs.io
在CentOS 7.5上
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email myemail@gmail.com -w /usr/share/nginx/html -d hakase-labs.io
注意:
- 我们将把我们域的RSA密钥大小指定为'4096',并且我们将在Ubuntu系统上将认证方法定义为默认web根目录'/ var / www / html','/ usr / share / nginx / html '目录为CentOS 7系统。
完成后,您将在'/ etc / letsencrypt / live'目录中获取域名的所有SSL证书文件。
为了获得额外的安全性,我们将使用OpenSSL命令生成DHPARAM密钥'4096',如下所示。
openssl dhparam -out /etc/nginx/dhparam.pem 4096
DHPARAM密钥已经生成到'/ etc / nginx'目录。
第4步 - SSL配置
在这一步中,我们将定义Nginx Web服务器的SSL配置。 我们将创建新的配置'ssl.conf',其中包含专门针对Nginx Web服务器的经过调整的SSL配置安全性。
在Ubuntu 18.04上
转至'/ etc / nginx /'配置目录并在'snippets'目录下创建新的SSL配置'ssl.conf'。
cd /etc/nginx/
vim snippets/ssl.conf
在CentOS 7.5上
转至'/ etc / nginx /'配置目录,并在'default.d'目录下创建新的SSL配置'ssl / conf'。
cd /etc/nginx/
vim default.d/ssl.conf
在那里粘贴以下SSL配置。
# Specify the TLS versions ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # Ciphersuites recommendation from the chiper.li # Use this chipersuites to get 100 points of the SSLabs test # Some device will not support #ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"; # Mozilla Ciphersuits Recommendation # Use this for all devices supports ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; # Use the DHPARAM key and ECDH curve >= 256bit ssl_ecdh_curve secp384r1; ssl_dhparam /etc/nginx/dhparam.pem; server_tokens off; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # Enable HTTP Strict-Transport-Security # If you have a subdomain of your site, # be carefull to use the 'includeSubdomains' options add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; # Enable OSCP Stapling for Nginx web server # If you're using the SSL from Letsencrypt, # use the 'chain.pem' certificate ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/hakase-labs.io/chain.pem; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # XSS Protection for Nginx web server add_header X-Frame-Options DENY; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options nosniff; add_header X-Robots-Tag none;
保存并退出。
注意:
- 指定站点的TLS版本,只接受TLSv1 TLSv1.1 TLSv1.2。
- 指定SSL加密套件,并且建议使用Mozilla建议的SSL加密套件来获得所有设备的兼容性。
- 启用HSTS,OSCPStapling并添加XSS保护。
第5步 - 使用SSL配置Nginx虚拟主机
在这一步中,我们将为该域名创建一个虚拟主机文件。 我们将创建一个新的虚拟主机,一个名为hakase-labs.io的域名,其网页根目录将位于'/ var / www / site01'目录。
创建新目录'/ var / www / site01'并在里面创建'index.html'文件。
mkdir -p /var/www/site01
echo '<h1><center>Nginx - Letsencrypt - A+</center></h1>' > /var/www/site01/index.html
现在进入'/ etc / nginx'配置目录,为ubuntu创建名为'hakase-labs.io'的新虚拟主机文件,为CentOS 7系统创建'hakase-labs.conf'。
在Ubuntu 18.04上
cd /etc/nginx/
vim sites-available/hakase-labs.io
在CentOS 7.5上
cd /etc/nginx/
vim conf.d/hakase-labs.conf
将下面的示例Nginx虚拟主机配置粘贴到那里。
server { listen 80; listen [::]:80; server_name hakase-labs.io; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; root /var/www/site01; index index.html index.php index.htm; server_name hakase-labs.io; error_log /var/log/nginx/hakase-error.log warn; ssl_certificate /etc/letsencrypt/live/hakase-labs.io/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hakase-labs.io/privkey.pem; #SSL Configuration include snippets/ssl.conf; location ~ /.well-known { allow all; } location / { try_files $uri $uri/ =404; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
保存并退出。
注意:
- 更改'include snippets / ssl.conf;' 线。 如果您使用的是Ubuntu,请将其保留为默认值。 如果您使用CentOS,请将目录更改为'default.d / ssl.conf'
只在Ubuntu系统上
启用新的虚拟主机文件并测试配置,并确保没有错误。
ln -s /etc/nginx/sites-available/hakase-labs.io /etc/nginx/sites-enabled/
nginx -t
现在重新启动nginx服务。
systemctl restart nginx
已启用启用HTTPS和其他SSL配置的新虚拟主机。
使用netstat命令进行检查,您将在列表中获得HTTPS端口443。
netstat -plntu
第6步 - 测试
打开你的网页浏览器并输入你的域名,我的是'http://hakase-labs.io'。
你将被重定向到HTTPS连接。
现在转到SSL测试网站' https://www.ssllabs.com/ssltest/ '并输入您自己的域名,然后等待以获得结果。
以下是我使用'Mozilla密码组推荐'的结果。
以下是我使用'Cipher.li密码组推荐'的结果。
您将看到所有结果都具有“A +”结果,并且仅在Mozilla建议和Cipherli.st建议中的“密码强度”上有所不同。
要检查服务器上的OSCP Stapling和HSTS,请滚动测试结果页面,您将得到如下所示的结果。
如果要从命令行检查OSCPStapling,请使用以下命令检查它。
echo QUIT | openssl s_client -connect hakase-labs.io:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'
对于HSTS测试,请使用下面的curl命令进行检查。
curl -s -D- https://hakase-labs.io | grep -i Strict
使用SSL Letsencrypt以及从SSLabs测试获取A +的Nginx Web服务器安装和配置已成功完成。