如何安装Nginx让我们加密并从SSLLabs测试中获取A +

在本教程中,我将逐步向您展示如何使用Lets加密证书安装和配置Nginx Web服务器以及如何获取A ...

如何安装Nginx让我们加密并从SSLLabs测试中获取A +

在本教程中,我将逐步向您展示如何使用Letsencrypt证书安装和配置Nginx Web服务器。 本指南将告诉您如何安装Nginx Web服务器,安装让我们的加密工具,生成SSL证书以加密,使用SSL配置nginx虚拟主机,以及创建额外的SSL配置以从SSL测试SSL实验室获取A +。

先决条件

  • Linux服务器 - Ubuntu 18.04或CentOS 7.5
  • 根特权

我们将要做什么?

  1. 安装Nginx Web服务器
  2. 配置防火墙UFW / Firewalld
  3. 安装让我们加密并生成SSL证书
  4. 配置安全SSL
  5. 使用SSL配置Nginx虚拟主机
  6. 测试

第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

安装Nginx Web服务器

第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

配置UFW防火墙

在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服务。

配置Firewalld

第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系统。

创建让我们加密SSL证书

完成后,您将在'/ 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

配置Nginx

第6步 - 测试

打开你的网页浏览器并输入你的域名,我的是'http://hakase-labs.io'。

测试nginx

你将被重定向到HTTPS连接。

现在转到SSL测试网站' https://www.ssllabs.com/ssltest/ '并输入您自己的域名,然后等待以获得结果。

以下是我使用'Mozilla密码组推荐'的结果。

A +来自SSL实验室的结果

以下是我使用'Cipher.li密码组推荐'的结果。

用Cipher.li密码组推荐

您将看到所有结果都具有“A +”结果,并且仅在Mozilla建议和Cipherli.st建议中的“密码强度”上有所不同。

要检查服务器上的OSCP Stapling和HSTS,请滚动测试结果页面,您将得到如下所示的结果。

OSCPStapling

如果要从命令行检查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'

从命令行检查OSCPStapling

对于HSTS测试,请使用下面的curl命令进行检查。

curl -s -D- https://hakase-labs.io | grep -i Strict

HSTS测试

使用SSL Letsencrypt以及从SSLabs测试获取A +的Nginx Web服务器安装和配置已成功完成。

参考