使用acme.sh为网站配置ssl证书

2,657次阅读

共计 3235 个字符,预计需要花费 9 分钟才能阅读完成。

就目前的形式来看,今后的网站肯定是要向 https 发展的,再加上谷歌也要把 http 网站设置为不安全,所以,为网站配置一个证书是很有必要的。

证书选择的话,作为我等小屁民,当然没那个闲钱去购买收费证书,反正网上免费的也有,而且都能支持,为啥还要花钱呢?

Let’s Encrypt 就是一款免费证书,而且被众多厂商支持,人人都能免费申请哦!

本次就选择申请 Let’s Encrypt 的免费证书为网站配置 https,不过直接申请的话比较麻烦,还要更改 DNS 啊各种,很啰嗦,还好网上有专门申请此证书的 shell 脚本,而且能够使用文件验证的方式进行申请,很方便快捷,这就是 acme.sh

登录 SSH,下载并安装 acme.sh 脚本

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

安装完成后会出现以下提示

[Mon Dec 18 23:37:03 CST 2017] Installing from online archive. [Mon
Dec 18 23:37:03 CST 2017] Downloading
https://github.com/Neilpang/acme.sh/archive/master.tar.gz [Mon Dec 18
23:37:08 CST 2017] Extracting master.tar.gz [Mon Dec 18 23:37:08 CST
2017] It is recommended to install socat first. [Mon Dec 18 23:37:08
CST 2017] We use socat for standalone server if you use standalone
mode. [Mon Dec 18 23:37:08 CST 2017] If you don’t use standalone mode,
just ignore this warning. [Mon Dec 18 23:37:08 CST 2017] Installing to
/root/.acme.sh [Mon Dec 18 23:37:08 CST 2017] Installed to
/root/.acme.sh/acme.sh [Mon Dec 18 23:37:08 CST 2017] Installing alias
to ‘/root/.profile’ [Mon Dec 18 23:37:08 CST 2017] OK, Close and
reopen your terminal to start using acme.sh [Mon Dec 18 23:37:08 CST
2017] Installing alias to ‘/root/.cshrc’ [Mon Dec 18 23:37:08 CST
2017] Installing cron job [Mon Dec 18 23:37:09 CST 2017] OK [Mon Dec
18 23:37:09 CST 2017] Install success!

整个安装会将所需的脚本文件存放到 /root/.acme.sh 目录中,并配置环境变量,不过安装时发现环境变量不生效,所以就手动执行了一次,这样就可以在任意目录都能使用 acme.sh 脚本了

source /root/.cshrc

申请证书

acme.sh --issue -d www.usebsd.com -d usebsd.com --webroot /home/wwwroot/

这里注意,-d 参数是指定申请证书的域名,域名必须可以访问,且正确指向后面配置的网站目录,多个域名添加多个 -d 参数即可,–webroot 参数是指定网站存放根目录,这里一定要正确,否则将申请不到证书

当域名解析正确,网站路径指向也正确后,执行上面的命令,会在网站根目录中添加证书申请所需的验证文件,随后 Let’s Encrypt 会对文件进行访问,验证通过就会下发网站证书

证书申请成功后,会自动保存在 /root/.acme.sh/ 目录下,以域名为目录名进行存放,但现在还没有结束,还需要生成咱们能使用的证书

acme.sh --installcert -d www.usebsd.com -d usebsd.com --key-file /usr/local/etc/nginx/ssl/www.usebsd.com.key --fullchain-file /usr/local/etc/nginx/ssl/www.usebsd.com.cer --reloadcmd "service nginx restart"

其中 –key-file 参数和 –fullchain-file 参数一定要正确,因为会在指定位置生成证书文件,而且后期证书自动更新也是根据现在配置的命令完成的,后方的 –reloadcmd 则是证书生成后执行的重新载入 nginx 命令,不过 nginx 用 reload 的话不会重新读取证书,所以这里改为 restart

生成 dhparam,这是为了让 ssllab 检测能够达到 A +,是否生成这个自己决定

openssl dhparam -out /usr/local/etc/nginx/ssl/www.usebsd.com.pem 2048

打开网站 nginx 配置文件,将证书配置进去

server {
    listen 80;
    listen 443 ssl http2;
    ssl_certificate /usr/local/etc/nginx/ssl/www.usebsd.com.cer;
    ssl_certificate_key /usr/local/etc/nginx/ssl/www.usebsd.com.key;
    ssl_dhparam /usr/local/etc/nginx/ssl/www.usebsd.com.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 10m;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_buffer_size 1400;
    add_header Strict-Transport-Security max-age=15768000;
    ssl_stapling on;
    ssl_stapling_verify on;
    server_name www.usebsd.com usebsd.com;
    access_log /home/wwwlogs/www.usebsd.com_nginx.log combined;
    index index.html index.htm index.php;
    root /home/wwwroot;
    if ($ssl_protocol = "") {return 301 https://www.usebsd.com$request_uri;}
    if ($host != www.usebsd.com) {return 301 https://www.usebsd.com$request_uri;}
    include /usr/local/etc/nginx/rewrite/typecho.conf;

    location ~ [^/]\.php(/|$) {fastcgi_split_path_info ^(.+?.php)(/.*)$;
        fastcgi_pass unix:/var/run/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
        expires 30d;
        access_log off;
    }

    location ~ .*\.(js|css)?$ {
        expires 7d;
        access_log off;
    }

    location ~ /\.ht {deny all;}
}

正文完
 
Blood.Cold
版权声明:本站原创文章,由 Blood.Cold 2019-05-06发表,共计3235字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。