世界上最伟大的投资就是投资自己的教育

全场限时 5 折

首页Nginx
随风 · 练气

使用 acme.sh 安装 Let’ s Encrypt 提供的免费 SSL 证书

随风发布于4731 次阅读

1. 介绍

Let’ s Encrypt 已有免费的证书可用,以后的网站估计都要上 https 的吧,所以把我的网站上的证书换了一下,这节主要是参考使用 acme.sh 给 Nginx 安装 Let’ s Encrypt 提供的免费 SSL 证书这篇文章,并结合自己的情况,把我的经验记录下来。

2. 安装

我们使用acme.sh来申请和管理证书,它很简单用,还能够利用 crontab 自动更新证书,而且是默认就有的功能。

首先安装。

$ wget -O -  https://get.acme.sh | sh

安装完之后,可以退出登录,再重新登录,或者执行一下source ~/.bashrc

之后就可以使用acme.sh命令了。

3. 申请证书

首先申请和下载证书。

$ acme.sh --issue -d boat.rails365.net -w /home/hfpp2012/boat_manager/current/public

我要使用的域名是boat.rails365.net,我有一个项目是用 rails 写的,根目录为/home/hfpp2012/boat_manager/current/public,一定要保证这个目录是可写,可访问的,因为acme.sh会去检测它,其实就是为了验证,这个网站是不是你的。

这样申请成功之后,证书也会被保存下来,比如保存在下面这个位置:

/home/hfpp2012/.acme.sh/boat.rails365.net

你可以进去看看的,接下来我们要把证书安装到你的应用中。

$ acme.sh --installcert -d boat.rails365.net \
               --keypath       /home/hfpp2012/boat_manager/ssl/boat.rails365.net.key  \
               --fullchainpath /home/hfpp2012/boat_manager/ssl/boat.rails365.net.key.pem \
               --reloadcmd     "sudo nginx -s reload"

值得注意的是:

  1. 会复制一些文件到--keypath--fullchainpath参数所指定的地方,所以要保证目录是通的,是可写的,一般放到网站根目录相关的地方,如果你的/home/hfpp2012/boat_manager目录,没有ssl这个目录,要先新建一个。

  2. 证书更新之后,会让 nginx 也更新的,因为这些证书是要由 nginx 使用的,所以要更新,那acme.sh会自动去触发那个更新的命令,所以你得告诉acme.sh如何去更新 nginx 的配置。所以这也是--reloadcmd发挥的作用,里面的值,得根据你的系统而定,只要能更新到 nginx 的配置就好了。

  3. 更新 nginx 配置时,有可以会使用 sudo,所以最好你的用户是可以免密码使用 sudo 的。

接下来,还需要再生成一个文件,具体我也不知道有什么用,很多 ssl 的配置都需要它。

$ openssl dhparam -out /home/hfpp2012/boat_manager/ssl/dhparam.pem 2048

4. nginx 配置

最后,把上面所有生成的文件跟 nginx 结合起来,再把配置写到 nginx 的配置文件中。

比如,我是这样的:

upstream boat_manager {
    server unix:///home/hfpp2012/boat_manager/shared/tmp/sockets/puma.sock fail_timeout=0;
}

server {
        listen 443 ssl;
    server_name boat.rails365.net;
        ssl_certificate         /home/hfpp2012/boat_manager/ssl/boat.rails365.net.key.pem;
        ssl_certificate_key     /home/hfpp2012/boat_manager/ssl/boat.rails365.net.key;
        # ssl_dhparam 
        ssl_dhparam             /home/hfpp2012/boat_manager/ssl/dhparam.pem;
    root /home/hfpp2012/boat_manager/current/public;
    keepalive_timeout 70;

    location ~ ^/assets/ {
       gzip_static on;
       expires max;
       add_header Cache-Control public;
    }

        try_files $uri/index.html $uri @boat_manager;
    location @boat_manager {
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_redirect off;
          proxy_pass http://boat_manager;

          #proxy_http_version 1.1;
          #proxy_set_header Upgrade $http_upgrade;
          #proxy_set_header Connection "upgrade";
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

server {
    listen 80;
    server_name boat.rails365.net;
    return 301 https://boat.rails365.net$request_uri;
}

顶层的 http 指令那里,也需要加上这两行:

http {
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
}

最后,你把 nginx 重启一下,再试试效果。

完结。

本站文章均为原创内容,如需转载请注明出处,谢谢。

3 条回复
相关小书
nginx教程

nginx教程

最全面,最深入的nginx入门到精通的教程

发表于

喜欢
统计信息
    学员: 29067
    视频数量: 1973
    文章数量: 489

© 汕尾市求知科技有限公司 | Rails365 Gitlab | Qiuzhi99 Gitlab | 知乎 | b 站 | 搜索

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top