centos7利用acme.sh获取Let's Encrypt的永久免费ssl证书并配置网站域名https访问

我与影子孤独终老i 提交于 2019-11-27 16:46:53

acme.sh介绍:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

github:https://github.com/Neilpang/acme.sh

 1. 安装 acme.sh

安装非常简单,就一个命令,建议使用root账户进行安装,以下演示都是root账户。

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

安装所在的目录为 ~/.acme.sh/

创建一个别名方便使用

alias acme.sh=~/.acme.sh/acme.sh

安装时已经为系统创建crontab定时任务,续签证书的调度任务。可以通过 crontab -l 查看,如下

自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

安装过程中所有的修改都限制在安装目录~/.acme.sh/中,因此不用担心对已有的系统任何功能和文件污染。

2. 生成SSL证书

假设为 www.mydomain.com 这个域名配置证书。

在生成之前需要先安装 socat ,使用如下命令安装

mkdir ~/src
cd ~/src
wget http://www.dest-unreach.org/socat/download/socat-1.7.3.0.tar.gz
tar -xf socat-1.7.3.0.tar.gz 
cd socat-1.7.3.0
./configure --prefix=$HOME
make
make install

下面开始正式生成ssl证书,生成证书的方式有多种,可以参考:https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

在此使用 --standalone 的方式,保证服务器的80端口是空闲的, acme.sh 能自己作为一个web服务临时监听80端口完成证书验证。

acme.sh --issue -d www.mydomain.com --standalone

生成的证书目录在:/root/.acme.sh/www.mydomain.com

3. nginx配置SSL证书

    #ssl
    upstream mydomain7777 {
        server 127.0.0.1:7777  weight=1;
    }
    server {
        listen       443 ssl;
        server_name  www.mydomain.com;

        location / {
            proxy_pass http://mydomain7777;
            proxy_redirect default;
            client_max_body_size 10m; #表示最大上传10M,需要多大设置多大。
            #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Scheme $scheme;
        }

        ssl_certificate      /root/.acme.sh/www.mydomain.com/fullchain.cer;
        ssl_certificate_key  /root/.acme.sh/www.mydomain.com/www.mydomain.com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
    }

还可以配置http强制转https(可选)

    server {
        listen       80;
        server_name  www.mydomain.com;
        rewrite ^(.*) https://$server_name$1 permanent;
    }

 

注:proxy_set_header X-Forwarded-Scheme $scheme; 配置是为了程序中获取到请求协议(http或者https),以java为例获取代码如下:

String scheme = request.getHeader("X-Forwarded-Scheme");
if (scheme == null) {
    scheme = request.getScheme();
}

 

参考博客:

1. https://my.oschina.net/u/3042999/blog/1858891

2. https://community.webfaction.com/questions/21246/trying-to-use-lets-encrypt-using-acmesh-need-socat-tools

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!