acme.sh

简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书。
acme.sh 有以下特点:
一个纯粹用Shell(Unix shell)语言编写的ACME协议客户端。
完整的ACME协议实施。 支持ACME v1和ACME v2 支持ACME v2通配符证书
简单,功能强大且易于使用。你只需要3分钟就可以学习它。
Let's Encrypt免费证书客户端最简单的shell脚本。
纯粹用Shell编写,不依赖于python或官方的Let's Encrypt客户端。
只需一个脚本即可自动颁发,续订和安装证书。 不需要root/sudoer访问权限。
支持在Docker内使用,支持IPv6

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

本文记录了我在把网站从HTTP升级到 HTTPS ,申请和安装SSL证书路上踩过的几个坑。

安装环境:
操作系统:centos 7 X64
SSL证书来源:Let's Encrypt
安装用脚本:acme.sh
服务器:nginx
域名:chandao.test.com

1.安装acme.sh

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

2.安装后的配置
把 acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash 的 alias, 方便你的使用:

alias acme.sh=~/.acme.sh/acme.sh
echo 'alias acme.sh=~/.acme.sh/acme.sh' >>/etc/profile

安装过程中会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书(可执行crontab -l 查看)。

  * * * root /root/.acme.sh/acme.sh --cron --home /root/.acme.sh &>/var/log/acme.sh.logs

3.申请证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证(本文不提供dns方式申请,dns手动模式,不能自动更新证书。在续订证书时,您必须手动向域中添加新的txt记录。)

HTTP 方式方法如下:

acme.sh --issue -d chandao.test.com --webroot /data/wwwroot/chandao

只需要指定域名, 并指定域名所在的网站根目录【命令中/data/wwwroot/chandao为域名的根目录路径】. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

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

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

默认情况下,证书将每60天更新一次(可配置)。更新证书后,将通过以下命令自动重新加载Apache / Nginx服务:service apache2 force-reloadservice nginx force-reload

请注意:reloadcmd非常重要。证书可以自动续订,但是,如果没有正确的“reloadcmd”,证书可能无法刷新到您的服务器(如nginx或apache),那么您的网站将无法在60天内显示续订证书。

nginx示例1:

acme.sh --installcert -d chandao.test.com --key-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key --fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer --reloadcmd "service nginx force-reload"

nginx示例2:

acme.sh --install-cert -d chandao.test.com \
--key-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key \
--fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer \
--reloadcmd "service nginx force-reload"

apache示例:

acme.sh --install-cert -d chandao.test.com \
--cert-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer \
--reloadcmd "service apache2 force-reload"

附带完成前面1-4步骤的截图:

5. Nginx/Tengine服务器安装SSL证书

Nginx 配置Http和Https共存

listen ; #如果硬性要求全部走https协议,这一行去除
listen ssl http2; #如果硬性要求全部走https协议,这里去除ssl
server_name chandao.test.com; #ssl on; #如果硬性要求全部走https协议,这里开启ssl on
ssl_certificate /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer;
ssl_certificate_key /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key; #ssl性能调优
#nginx 1.13.0支持了TLSv1.,TLSv1.3相比之前的TLSv1.、TLSv1.1等性能大幅提升
ssl_protocols TLSv1 TLSv1. TLSv1.;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
#使用ssl_session_cache优化https下Nginx的性能
ssl_session_cache builtin: shared:SSL:10m;
#OCSP Stapling 开启。OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高 TLS 握手速度
ssl_stapling on;
#OCSP Stapling 验证开启
ssl_stapling_verify on;

完整例子:

server {
listen ; #如果硬性要求全部走https协议,这一行去除
listen ssl http2; #如果硬性要求全部走https协议,这里去除ssl
server_name chandao.test.com;
access_log off;
index index.html index.htm index.php;
root /data/wwwroot/chandao; #ssl on; #如果硬性要求全部走https协议,这里开启ssl on
ssl_certificate /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer;
ssl_certificate_key /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key; #ssl性能调优
#nginx 1.13.0支持了TLSv1.,TLSv1.3相比之前的TLSv1.、TLSv1.1等性能大幅提升
ssl_protocols TLSv1 TLSv1. TLSv1.;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
#使用ssl_session_cache优化https下Nginx的性能
ssl_session_cache builtin: shared:SSL:10m;
#OCSP Stapling 开启。OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高 TLS 握手速度
ssl_stapling on;
#OCSP Stapling 验证开启
ssl_stapling_verify on; #error_page /.html;
#error_page /.html; location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
} location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ /\.ht {
deny all;
}
}

6.重启nginx
保存退出后,通过nginx -t来检查配置文件是否正确,有错误的话改之即可。配置文件检测正确之后,通过service nginx force-reload来重载配置文件。

nginx -t
service nginx force-reload

7. 更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版 :

acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

acme.sh --upgrade --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

acme.sh --upgrade --auto-upgrade 

6. 出错怎么办:
如果出错, 请添加 debug log:

acme.sh --issue ..... --debug 

或者:

acme.sh --issue ..... --debug 

查看证书列表

acme.sh --list
删除证书

acme.sh remove Main_Domain(证书的主域名,上述证书列表中可看见)

8.注意事项:
1、开启后请把所有网站的链接替换为https,尤其是图片链接等。推荐写链接时用//www.test.com而不是https://www.test.com,这种写法会优先使用HTTPS而且不会禁止HTTP。
2、记得打开443端口。
3、如果过了一段时间出现了类似NET :: ERR_CERT_AUTHORITY_INVALID的错误,请检查是不是设置了证书链SSLCertificateChainFile。
4、安装证书时,--key-file和--fullchain-file的参数是你想要把证书安装在的位置,而不是之前申请到的证书的位置。这个位置会在配置nginx时使用到。
5、如果配置参数出错,最好只安装不要再申请。因为申请次数有限制。同一域名,每周最多申请10个证书,每周刷新。
6、域名要写常用的。如果要使用https://www.test.com访问网页,域名选项-d 的参数一定要写www.test.com,如果申请证书和访问的域名不完全一致,访问时会提示不安全“访问的网站使用的安全证书域名错误”。

Linux下使用acme.sh 配置https 免费证书的更多相关文章

  1. 如何为nginx配置https(免费证书)

    前言: 给http协议申请ssl免费证书,还是比较主流的一种方式,但是逐渐得一些浏览器不支持自签名的证书了.毕竟这是为了使用者及平台都变得安全的方式,所以无可厚非的,而且也有很多网站即使不使用商业付费 ...

  2. Linux下使用acme.sh申请和管理Let’s Encrypt证书

    关于Let's Encrypt 免费SSL证书 Let's Encrypt 作为一个公共且免费 SSL 的项目逐渐被广大用户传播和使用,是由 Mozilla.Cisco.Akamai.IdenTrus ...

  3. Nginx 配置 Https 免费证书访问

    配置HTTPS 现在做博客或者做网站没有 https 已经不行了,就记录一下我在腾讯云配置 https 的过程吧,非常简单,1个小时就可以了. 还涉及到 http 访问自动转发到 https 访问路径 ...

  4. Nginx/Apache + acme.sh 实现https访问

    1 概述 acme.sh实现了acme协议,可以从Let's Encrypt生成免费的ssl证书用于实现https,本文介绍了常见的两种服务器Apache与Nginx上利用acme.sh配置https ...

  5. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  6. linux下Java环境的配置

    linux下Java环境的配置 现在用linux的朋友越来越多了,前几天就有两个朋友问我linux下怎么配置java环境,我想还有很多朋友想了解学习这方面的东西,就写一个完全一点的linux java ...

  7. redis 在Linux下的安装与配置

    redis在Linux下的安装与配置 by:授客  QQ:1033553122 测试环境 redis-3.0.7.tar.gz 下载地址: http://redis.io/download http: ...

  8. linux下WEB服务器安装、配置VSFTP

    转载  http://www.oicto.com/centos-vsftp/?tdsourcetag=s_pcqq_aiomsg linux下WEB服务器安装.配置VSFTP 由 admin · 发布 ...

  9. Linux下Kafka单机安装配置方法

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topi ...

随机推荐

  1. AIROBOT系统 之 私人存储 和 DLNA 智能电视云

    需求背景 工作多年之后发现有太多的电子资料到处存放.个人电脑是Mac,硬盘都不大,放不了太多东西.并且有时候想随时随地存放一些东西.所有就有了大家一个私有存储的需求 个人休息在家经常喜欢看电影电视剧, ...

  2. Flask 接入第三方云通讯平台时出现 {‘172001’:’网络错误’}

    错误:{‘172001’:’网络错误’},经过上网查找原因,原来是 Python 升级到 2.7.9 之后引入了一个新特性,当打开一个 https 链接时,会验证一次 SSL 证书.而当目标网站使用的 ...

  3. delphi 调试查看变量值

    在debug状态,打开run下的add watch就可以添加需要查看的变量,可以各种格式显示非常方便

  4. Vue.js中使用select选择下拉框

    在Vue.js中使用select选择下拉框有两种方法: 第一种: Add.html: <select v-model="sysNotice.noticeType" id=&q ...

  5. .net中使用 道格拉斯-普特 抽希轨迹点

    Douglas一Peukcer算法由D.Douglas和T.Peueker于1973年提出,简称D一P算法,是目前公认的线状要素化简经典算法.现有的线化简算法中,有相当一部分都是在该算法基础上进行改进 ...

  6. netty例子

    流式编程 客户端 这里MessageToByteEncoder继承于outchanel 服务端

  7. angular4脚手架搭建

    Angular4.X安装,创建 1.安装最新的nodejs(node -v ,npm -v) 2.新建文件夹(右键git bash here)npm install -g @angular/cli 3 ...

  8. 19.C# 泛型

    1.泛型的概念 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用. 2. .net提供的泛型 2.1可空 ...

  9. PeopleSoft translate value 排序

    这个function 可以对record.field 的dropdownlist 排序,也可以把描述前边加个数字.但是有时候用户不接受.所以调用这个方法是比较好的选择. Function Order_ ...

  10. Python学习笔记(Ⅱ)——循环/选择/函数

    一.循环结构 python中提供了for循环和while循环两种操作,没有do……while语句. 1.for循环: 与其他语言中for循环的常见的写法如for (int i=0;i<10;i+ ...