前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 签发HTTPS证书 (acme.sh)

原 签发HTTPS证书 (acme.sh)

作者头像
霡霂
发布2018-06-04 16:19:47
2.4K0
发布2018-06-04 16:19:47
举报
文章被收录于专栏:雨过天晴雨过天晴

原来写过一篇文章《记录两个免费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 安装

代码语言:javascript
复制
curl https://get.acme.sh | sh

或者

代码语言:javascript
复制
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访问:

代码语言:javascript
复制
acme.sh --issue -d www.mydomain.com --standalone

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

1、方案二 (我采用的方案)
代码语言:javascript
复制
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:

代码语言:javascript
复制
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

代码语言:javascript
复制
# 在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端口;这里不再详细介绍。

输入图片说明
输入图片说明
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、letsencrypt 介绍
  • 二、acme.sh 介绍
  • 三、acme.sh 安装
  • 四、验证并生成证书
    • 1、方案一
      • 1、方案二 (我采用的方案)
      • 五、安装证书
        • 1、命令安装
          • 2、手动配置 (我采用的方案)
          • 六,验证https访问
          相关产品与服务
          SSL 证书
          腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档