签发HTTPS证书 (acme.sh)

原来写过一篇文章《记录两个免费HTTPS服务商》里面记录了三个免费的证书提供商。 其中沃通的证书好像已经不能用了,不过最近的一年中:阿里云,腾讯云,百度云等都接入了国外的某家证书提供商,以提供免费的证书服务。

通过国内的云服务商提供的证书服务,大都有一年到两年的服务期限,这类操作大多为中文界面,切流程简单,就不做过多说明,本篇文章主要对:开源的letsencrypt证书申请作简要的记录。

letsencrypt 是一个开源的免费证书服务,由国际很多知名厂商共同提倡组建的一个组织,其主页上提供了这些厂商的名称和logo。

一、letsencrypt 介绍

由于其是一个开源组织,旨在推动https技术的推广,所以其开放了https证书申请的整个流程所需要的接口(文档),并以开放的形式提供给开发者,所以据此,产品了大批各种语言的证书申请工具。在那里,你可以看到由各种语言:Bash,C,Go,PHP,Python,java…… 所编写的证书申请和部署工具。

本篇文章主要介绍基于Bash(Shell)的 acme.sh

二、acme.sh 介绍

github的主页上提供了一个基本的安装使用说明(中文版),在那里你能查看到基本的使用和安装流程,。

acme.sh 是一个shell脚本工具集,其提供了一个自动化:证书的申请,认证,安装,以及证书的自动更新。

acme.sh 提供两种方式生成证书:基于http的文件验证;和基于dns的txt解析。本文主要介绍基于http的文件验证方式,dns的验证,请查阅:生成证书部分。

三、acme.sh 安装

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

或者

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

安装的主要过程:

  • 下载 最新的压缩包 Downloading https://github.com/Neilpang/acme.sh/archive/master.tar.gz
  • 解压到~/.acme.sh
  • 设置别名,就是在~/.bashrc中引入 acme.sh.env,后者中设置了别名。
  • 配置 crontab,在crontab中加入17 0 * * * "/home/dingdayu/.acme.sh"/acme.sh --cron --home "/home/dingdayu/.acme.sh" > /dev/null

这是一个自动化的安装过程,如果你需要了解更多的安装,可以查看作者的安装说明

四、验证并生成证书

工具提供了两种验证协议,这里是http文件验证

在进行下面的验证之前,你需要准备好:

[x] 已完成域名指向

[x] 创建域名主目录(可选,否请选方案一)

[x] 已配置基于http的访问(可选,否请选方案一)

1、方案一

若没有配置nginx或Apache的http访问:

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

--standalone 命令,会临时启一个80端口以供通过验证,如果80端口已经被占用,则不推荐使用这种方案。

1、方案二 (我采用的方案)
acme.sh --issue -d www.mydomain.com --webroot /home/wwwroot/www.mydomain.com/public/

这里的前提,域名www.mydomain.com已经指向并可访问/home/wwwroot/www.mydomain.com/ 目录了,请特别注意laravelthinkphp等框架的public,--webroot所提供的目录,一定是可以通过http直接访问的目录。

切记在执行命令前,通过浏览器访问域名,验证是否成功,方便后续排错。

acme.sh 会自动生成到webroot目录下验证目录,并在验证通过后,将验证文件删除。

五、安装证书

1、命令安装

acme.sh 提供了一种自动安装证书的命令 --installcert:

acme.sh --installcert -d mydomain.com \
--key-file /etc/nginx/ssl/mydomain.key \
--fullchain-file /etc/nginx/ssl/mydonain.cer \
--reloadcmd "service nginx force-reload"

其中 --reloadcmd 是用来指定在配置完成后 执行nginx配置重载的命令,作者在文档中特别提出service nginx reload并不会重载证书,但是我用 nginx -s reload的时候是会重载的,这里备注下,不知是否是service的差别。

我并没有使用上面的自动安装的方法,而是用的手动配置,这样才能更好的配置

2、手动配置 (我采用的方案)

在第四步中,验证通过后会生成秘钥,并发送到letsencrypt进行签发,然后导出 .key.cer等文件。在最后会在控制台输出具体的存放路径,并以绿色字体显示以示提醒。

官方的自动安装证书的命令中,存在备份相关证书的操作,这里可以自行备份。

为了方便的使用cron的更新脚本,这里并没有对路径进行copy,你可以copy到其他路径配置,在cron中增加reloadcmd命令copy更新证书文件。

根据上面的证书路径,配置nginx

# 在80端口监听server同级,增加一个新的server
server {
        listen 443;
        ssl on;
        ssl_certificate /home/dingdayu/.acme.sh/anyingwxapp.xyser.com/anyingwxapp.xyser.com.cer;
        ssl_certificate_key /home/dingdayu/.acme.sh/anyingwxapp.xyser.com/anyingwxapp.xyser.com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_session_timeout 5m;
	ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

	root /data/wwwroot/anyingwxapp/public;
        server_name anyingwxapp.xyser.com;
        index index.html index.htm index.php;
        # 下面的等同80端口的相关转发策略
	location = /50x.html {
            root   html;
        }

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

        location ~ \.php$ {
            fastcgi_split_path_info  ^(.+\.php)(/.*)$;
            fastcgi_param  PATH_INFO $fastcgi_path_info;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  HTTPS  on;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}

安装完成后,重启nginx sudo nginx -s reload (是否需要sudo,请更加实际情况添加)

六,验证https访问

通过https://www.mydomain.com 访问,查看是否正常。 如果不正常,则排查http://www.mydomain.com 是否正常,若http正常,则表明443端口监听出错。

另外记得防火墙的问题,在开启443监听后,将iptablefirewall防火墙,开启443端口;这里不再详细介绍。

输入图片说明

转载于:https://my.oschina.net/dingdayu/blog/968265

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值