1.安装

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

这个脚本主要做以下动作:

  1. 拷贝sh脚本到~/.acme.sh/
  2. 创建alias别名acme.sh=~/.acme.sh/acme.sh
  3. 启动定时器

实际在使用中发现第二项并没有进行source操作,所以acme.sh别名并不会工作,这里我们需要手动source一下。

source ~/.bashrc

2.配置与申请证书

  • 首先去阿里云取出Key与Secret,阿里云现在支持RAM访问控制,新建用户组授权DNS读写,然后再新建用户加入授权的组,取出两个数据后直接Shell输入。

    export Ali_Key="LTAIqWtLa4xxxxx"
    export Ali_Secret="R4LS1L9dqDjYPkkgCHsdgucxxxxxxx"
  • 接下来Shell申请证书,这里我为confluence服务器申请,域名为wiki.domain.com。

    acme.sh --issue --dns dns_ali -d wiki.domain.com

这段命令的意思是使用dns_ali脚本~/.acme.sh/dnsapi/dns_ali.sh读取刚刚的export数据后进行申请,申请成功后会将刚刚的Key、Secret与PATH信息一起写入~/.acme.sh/account.conf文件。

  • 如果需要创建pkcs12(pfx)证书
# 命令参数
acme.sh  --toPkcs  -d <domain>  [--password pfx-password]

# 例
acme.sh --toPkcs -d wiki.domain.com --password spex.top
  • Java开发需要用到jks格式证书,pfx转jks
keytool -importkeystore -srckeystore  mycert.pfx -srcstoretype pkcs12 -destkeystore mycert.jks -deststoretype JKS

3.安装证书

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方。

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

acme.sh  --installcert  -d  wiki.domain.com   \
        --key-file   /etc/nginx/ssl/confluence/wiki.domain.com.key \
        --fullchain-file /etc/nginx/ssl/confluence/fullchain.cer \
        --reloadcmd  "service nginx force-reload"
  • 一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload
  • Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<domain>.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。
  • --installcert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效。
  • /etc/nginx/ssl/confluence文件夹需要自己建立,这里因为fullchain.cer文件的特殊性存在,对于nginx需要多域名Web代理的,所以每一个网站都新建一个文件夹。

4.配置NGINX

upstream confluence {
    server 127.0.0.1:8090;
}
server {
    listen 80;
    server_name wiki.domain.com;
    
    rewrite ^(.*)$ https://$host$1 permanent;
}    
server {
    listen 443;
    server_name wiki.domain.com;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl/confluence/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/confluence/wiki.domain.com.key;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:20m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;
    location / {
        proxy_pass http://confluence;
        proxy_redirect off;
        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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
}

5.Nginx错误处理

Permission denied

failed (13: Permission denied) while connecting to upstream
这是Selinux引起的,解决方式如下,推荐第二种,而不是关闭Selinux这种粗暴的方式。

1.关闭SeLinux

1.1 临时关闭(不用重启机器):

setenforce 0 ##设置SELinux 成为permissive模式

setenforce 1 设置SELinux 成为enforcing模式

1.2修改配置文件需要重启机器:

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可

2.执行下面的命令

setsebool -P httpd_can_network_connect 1

参考链接:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

Last modification:May 7th, 2019 at 03:15 pm