技术

acme使用免费证书

OnlyCEC · 3月10日 · 2020年 215次已读

 

安装acme.sh

curl  https://get.acme.sh | sh

  • acme.sh默认安装到了当前家目录。

[[email protected] ~]# ~/.acme.sh/
[[email protected] ~]# ll .acme.sh/
total 492
-rw-r--r-- 1 root root    296 Aug 15 14:28 account.conf
-rwxr-xr-x 1 root root 190583 Aug 15 14:28 acme.sh
-rw-r--r-- 1 root root     78 Aug 15 14:10 acme.sh.csh
-rw-r--r-- 1 root root     78 Aug 15 14:10 acme.sh.env
-rw-r--r-- 1 root root 269335 Aug 15 14:28 acme.sh.log
drwxr-xr-x 4 root root   4096 Aug 15 14:12 ca
drwxr-xr-x 2 root root   4096 Aug 15 14:28 deploy
drwxr-xr-x 2 root root   4096 Aug 15 14:28 dnsapi
-rw-r--r-- 1 root root   2777 Aug 15 14:28 http.header
drwxr-xr-x 2 root root   4096 Aug 15 14:28 notify

  • 此次安装,会在crontab创建定时任务。

[[email protected] ~]# crontab -l
5 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

添加自动DNS验证

  • 需要阿里云添加子账号,并授权“管理云解析权限”,添加API,阿里云 AK 是使用阿里云子账户来添加的。

  • 设置阿里云子账号环境变量。

[[email protected] ~]# cat .bashrc 
export Ali_Key="999999"
export Ali_Secret="99999"
[[email protected] ~]# source .bashrc

  • 设置cloudflare账号环境变量。

export CF_Key="65a4b9493c94234234496515e231c47534a6432423c8552db4"
export CF_Email="cf账号"

申请证书

#阿里云添加
[[email protected] ~]# acme.sh --issue --dns dns_ali -d domain.com -d *.domain.com
#cloudflare添加
[[email protected] ~]# acme.sh --issue --dns dns_cf -d domain.com -d *.domain.com

安装证书

acme.sh --install-cert -d domain.com -d *.domain.com\
  --key-file       /etc/nginx/sslkey/domain.com.key  \
  --fullchain-file /etc/nginx/sslkey/domain.com.pem \
  --reloadcmd     "/etc/init.d/nginx force-reload"

acme.sh自动更新

[[email protected] ~]# acme.sh  --upgrade  --auto-upgrade
[[email protected] ~]# cat .bashrc 
. "/root/.acme.sh/acme.sh.env"
#证书列表
[[email protected] ~]# acme.sh list
Main_Domain  KeyLength  SAN_Domains   Created                       Renew
eoecfd.com   ""         *.domain.com  Thu Aug 15 06:13:10 UTC 2019  Mon Oct 14 06:13:10 UTC 2019

证书自动更新

  • Let’s Encrypt 的证书有效期是 90 天的,需要定期重新申请,不过acme在安装的时候就已经设置了自动更新,所以这一步不用关心,很省心。 这里了解一下acme.sh的自动更新:安装acme时会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书. 查看任务

# crontab -l
47 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

#手动renew一下证书可以通过这个命令
acme.sh --cron -f

其他Nginx配置

 测试你的网站安全评分: 

https://www.ssllabs.com/ssltest/

  • 提高网站安全评分配置

server {

    listen 80;
    listen 443;
    server_name  $dm1;
    access_log  /var/log/nginx/$dm1_access.log;
    error_log  /var/log/nginx/$dm1.com_error.log;
    root /opt/web/$dm1;
    index index.html index.htm index.php;
    ssl on;
    keepalive_timeout   70;
    ssl_certificate sslkey/$dm1.pem;
    ssl_certificate_key sslkey/$dm1.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
    
	#设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
    ssl_prefer_server_ciphers on;
	#此处pem文件需要开启ssl_prefer_server_ciphers on才能生效,此选项能提高SSLlabs评分
	ssl_dhparam /etc/nginx/sslkey/dhparam.pem;
	
    proxy_set_header Host \$host:\$server_port;
    proxy_set_header X-Real-IP \$remote_addr;
    proxy_set_header REMOTE-HOST \$remote_addr;
    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto  \$scheme;



    location / {
        if (!-e \$request_filename) {
        rewrite ^/index.php(.*)$ /index.php?s=\$1 last;
        rewrite ^/(.*)$ /index.php?s=\$1 last;
        break;
        }
    }


    location ~ .*\.(php|php5)?$ {
            fastcgi_pass 127.0.0.1:9000;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME \$fastcgi_script_name;
    }

    location ~*  \.(mp4|jpg|jpeg|png|gif|css|js|ico|img|flv|swf|download)$ {
            expires max;
            log_not_found off;
    }

    location ~ /\.ht {
    deny all;
    }

    location ~ /\. {
    deny all;
    }

}

ssl_prefer_server_ciphers on; 这个配置能提高证书的评分。

ssl_dhparam /etc/nginx/ssl/dhparam.pem; 能提高证书评分,这个文件是在第四步时生成的,若没有做则不需要写这句。

 生成dhparam.pem文件 

openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

 

1 条回应
  1. OnlyCEC2020-3-10 · 19:11

    sss