如何在CentOS 7上使用Lets Encrypt配置Nginx

时间:2020-01-09 10:39:41  来源:igfitidea点击:

如何在CentOS 7或RHEL 7服务器上使用Lets Encrypt免费的SSL证书保护Nginx Web服务器?
如何在CentOS 7服务器上使用Lets Encrypt配置Nginx?
如何在CentOS Linux 7服务器上安装和设置Lets Encrypt TLS/SSL证书。

Lets Encrypt是您的网站或任何其他项目的免费,自动和开放的证书颁发机构。
本教程显示如何使用Lets Encrypt为Nginx Web服务器安装免费的SSL证书。
您将学习如何在服务器上正确部署Diffie-Hellman,以在CentOS/RHEL 7上获得SSL Labs A +分数。

如何在CentOS 7上使用Lets Encrypt保护Nginx

获取SSL证书的过程如下:

  • 获取acme.sh软件:git clone https://github.com/Neilpang/acme.sh.git
  • 创建/.well-known/acme-challenge/目录:mkdir -p/var/www/html/.well-known/acme-challenge /
  • 在您的域中获取SSL证书:acme.sh --issue -w/DocumentRootPath/-d your-domain
  • 在Nginx上配置TLS/SSL:vi/etc/nginx/sites-available/default
  • 设置cron作业以进行自动续订
  • 打开端口443(HTTPS):sudo firewall-cmd --add-service = https

让我们看看如何安装acme.sh客户端并在CentOS/RHEL 7上使用它来从Lets Encrypt获得SSL证书。

步骤1安装所需的软件

使用yum命令安装git,wget,curl和bc软件包:

$ sudo yum install git bc wget curl

步骤2安装acme.sh让加密客户端

克隆仓库:

$ cd /tmp/
$ git clone https://github.com/Neilpang/acme.sh.git

在系统上安装acme.sh客户端,运行:

$ cd acme.sh/
$ sudo -i
# ./acme.sh --install

安装后,必须关闭当前终端,然后再次重新打开以使别名生效。
或只需执行以下源命令:

$ sudo source ~/.bashrc

步骤3建立acme-challenge目录

执行以下mkdir命令。
确保根据需要将D设置为实际的DocumentRoot路径:

# D=/usr/share/nginx/html
# mkdir -vp ${D}/.well-known/acme-challenge/
###---[ `NOTE: Adjust permission as per your setup` ]---###
# chown -R nginx:nginx ${D}/.well-known/acme-challenge/
# chmod -R 0555 ${D}/.well-known/acme-challenge/

还创建用于存储SSL证书的目录:

# mkdir -p /etc/nginx/ssl/theitroad.local/

步骤4建立dhparams.pem档案

运行openssl命令:

# cd /etc/nginx/ssl/theitroad.local/
# openssl dhparam -out dhparams.pem -dsaparam 4096

步骤5获得域证书

为您的域颁发证书:

acme.sh --issue -w /path/to/www/htmlRoot/ -d example.com -k 2048
sudo acme.sh --issue -w /usr/local/nginx/html -d server2.theitroad.local -k 2048

步骤6配置Nginx

您刚刚成功地从Lets Encrypt请求了CentOS 7或RHEL 7服务器的SSL证书。
现在是配置它的时候了。
编辑default.ssl.conf:

$ sudo vi /etc/nginx/conf.d/default.ssl.conf

追加以下配置:

## START: SSL/HTTPS server2.theitroad.local ###
server {
    #------- Start SSL config with http2 support ----#
    listen 10.21.136.134:443 http2;
    server_name server2.theitroad.local;
    ssl on;
    ssl_certificate /etc/nginx/ssl/theitroad.local/server2.theitroad.local.cer;
    ssl_certificate_key /etc/nginx/ssl/theitroad.local/server2.theitroad.local.key;
    ssl_session_timeout 30m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
    ssl_session_cache shared:SSL:10m;
    ssl_dhparam /etc/nginx/ssl/theitroad.local/dhparams.pem;
    ssl_prefer_server_ciphers on;
 
    ## Improves TTFB by using a smaller SSL buffer than the nginx default
    ssl_buffer_size 8k;
 
    ## Enables OCSP stapling
    ssl_stapling on;
    resolver 8.8.8.8;
    ssl_stapling_verify on;
 
    ## Send header to tell the browser to prefer https to http traffic
    add_header Strict-Transport-Security max-age=31536000;
 
    ## SSL logs ##
    access_log /var/log/nginx/ssl_access.log;
    error_log /var/log/nginx/ssl_error.log;
    #-------- END SSL config -------##
    # Add rest of your config below like document root, php and more ##
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    # Allow php apps
    location ~ \.php$ {
        root /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}
## END SSL server2.theitroad.local ######

在vi/vim文本编辑器中保存并关闭文件。

步骤7安装证书

将颁发的证书安装到nginx服务器:

# acme.sh --installcert -d server2.theitroad.local \
--keypath /etc/nginx/ssl/theitroad.local/server2.theitroad.local.key \
--fullchainpath /etc/nginx/ssl/theitroad.local/server2.theitroad.local.cer \
--reloadcmd 'systemctl reload nginx'

确保使用ss命令或netstat命令打开端口os:

# ss -tulpn

步骤8防火墙配置

您需要在服务器上打开端口443(HTTPS),以便客户端可以连接它。
如下更新规则:

$ sudo firewall-cmd --add-service=https
$ sudo firewall-cmd --runtime-to-permanent

步骤9进行测试

打开浏览器并输入您的域,例如:

https://server2.theitroad.local

使用SSLlabs测试站点进行测试:

https://www.ssllabs.com/ssltest/analyze.html?d=server2.theitroad.local

步骤10 acme.sh命令

列出所有证书:

# acme.sh --list

续订名为server2.theitroad.local的域的证书

# acme.sh --renew -d server2.theitroad.local

请注意,Cron作业也会尝试为您续订证书。
默认情况下按如下方式安装(您无需采取任何措施)。
要查看作业运行:

# crontab -l

输出示例:

8 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

升级acme.sh客户端:

# acme.sh --upgrade

获得帮助:

# acme.sh --help | more