Linux下使用acme.sh 配置https 免费证书

简单来说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/acmesh-official/acme.sh

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

安装环境:

操作系统:centos 7 X64

SSL证书来源:Let's Encrypt

安装用脚本:acme.sh

服务器:nginx

域名:*.abc.com

1、安装acme.sh


# yum -y isntall curl
# curl https://get.acme.sh | sh 出现了红色的提醒:
It is recommended to install socat first
We use socat for standalone server if you use standalone mode.
If you don't use standalone mode, just ignore this warning.
大概意思就是叫我最好安装 socat yum install epel-release -y
yum install socat -y
curl https://get.acme.sh | sh

检查是否安装好

#直接运行
acme.sh
#如报错请运行如下
source ~/.bashrc

安装完成后的工作目录在当前用户的.acme.sh【~/.acme.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 查看)。

13 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

3、获取阿里云的ID和Secret

获取Ali_Key 和 Ali_Secret的地址

# 替换成从阿里云后台获取的密钥
export Ali_Key="LTAI4G***********Pp8dZVzS"
export Ali_Secret="8GaI2***************zgzfwmhTyb732" # 添加完成后
~/.acme.sh/account.conf能看到阿里的ID和Secret

其他地方注册的请参考这里

4、生成证书

新版本acme.sh --register-account -m 邮箱 --server zerossl
https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA # 换成自己的域名
阿里云
acme.sh --issue --dns dns_ali -d abc.com -d *.abc.com [Mon Apr 30 15:35:14 CST 2018] Your cert is in /root/.acme.sh/xxx.com/xxx.com.cer
[Mon Apr 30 15:35:14 CST 2018] Your cert key is in /root/.acme.sh/xxx.com/xxx.com.key
[Mon Apr 30 15:35:14 CST 2018] The intermediate CA cert is in /root/.acme.sh/xxx.com/ca.cer
[Mon Apr 30 15:35:14 CST 2018] And the full chain certs is there: /root/.acme.sh/xxx.com/fullchain.cer

DNSPOD

export DP_Id=""

export DP_Key="
*********"

acme.sh --issue --dns dns_dp -d abc.com -d *.abc.com

申请的证书会放到 ~/.acme.sh/ 目录里面,所有的 acme.sh 配置都记录在 ~/.acme.sh/ 目录里面,acme.sh 有自动的配置读取,并按域名划分,下次你再次执行的时候,它知道你之前是用的那个目录,只需要告诉它域名就好了。

默认ZeroSSL 而且还需要注册用户麻烦,还是使用LetsEncrypt来作为CA

最新版可能需要指定CA,

acme.sh --issue --dns dns_ali -d abc.com --server LetsEncrypt

参考:https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA

顺便一提的是Let’s Encrypt有申请错误的限制,同一域名同一账号连续失败5次后会被暂停申请1个小时,之前忘了给RAM用户附加权限,提示添加txt校验域名失败,添加权限后,然后就出现如下提示

 Create new order error. Le_OrderFinalize not found. {
"type": "urn:ietf:params:acme:error:rateLimited",
"detail": "Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/",
"status": 429
}
Please add '--debug' or '--log' to check more details.
See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

这个就是频繁提交失败后被服务器暂停申请了,等1个小时再试就好了。

5、安装证书

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件,

例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件.

这里面的文件都是内部使用, 而且目录结构可能会变化.

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

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

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

acme.sh --install-cert -d abc.com \
--key-file /usr/local/nginx/conf/ssl/abc/abc.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/abc/abc.com.cer \
--reloadcmd "/usr/local/nginx/sbin/nginx -s reload" [Mon Apr 30 16:19:32 CST 2018] Reload success

指定了存放证书的目录,nginx配置文件会配置我这里是创建了一个key文件

6、配置nginx

server {
listen 80;
listen 443 ssl; server_name h5.7dianchina.com;
access_log /var/log/nginx/qidian_h5.log; ssl on;
ssl_certificate key/abc.com.cer;
ssl_certificate_key key/abc.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

参考:https://www.jianshu.com/p/b6b172f69c14

https://www.jianshu.com/p/06e3aba8c62e

https://www.derror.com/p/configure-https-for-nginx-using-acmesh/

https://my.oschina.net/kimver/blog/1634575

时间到期续费证书

acme.sh --renew -d baoko.cn --webroot /www/nginx/key/

openssl x509 -in abc.crt -noout -dates

Acme-https证书申请的更多相关文章

  1. 项目总结20:阿里云免费https证书申请

    项目总结20:阿里云免费https证书申请 1. 登录阿里云控制台 www.aliyun.com,用账户信息登录 2. 在”产品与服务”搜索SSL,选择SSL证书 3. 点击购买证书 4. 选择” S ...

  2. linux免费https证书申请教程

    linux免费https证书申请教程直接去阿里云 菜单有个证书服务进去有个购买证书菜单 选择免费的 然后会提示写个人资料 然后系统生成csr 然后提交审核这个时候会有份邮件 文件下载上传到你的服务器 ...

  3. Centos7 通配符HTTPS证书申请 实测 笔记

    环境: 免费通配符HTTPS证书网址: https://letsencrypt.org/ 1.下载证书申请工具 [root@centos ~]# mkdir /opt/letsencrypt -p [ ...

  4. HTTPS证书申请相关笔记

    申请免费的HTTPS证书相关资料 参考资料: HTTPS 检测 苹果ATS检测 什么是ECC证书? 渠道2: Let's Encrypt 优点 缺点 Let's Encrypt 的是否支持非80,44 ...

  5. acme自动证书申请

    安装acme.sh curl https://get.acme.sh | sh acme.sh默认安装到了当前家目录. [root@iZbp17hycbhnayg00ohec9Z ~]# ~/.acm ...

  6. 微信小程序之后台https域名绑定以及免费的https证书申请

    微信小程序在11月3号发布了,这是一个全新的生态,没有赶上微信公众号红利的开发者,运营者可别错过这趟车了. 但是微信的后台需要全https,之前我还不相信,后台注册了后进后台才发现,服务器配置如下图 ...

  7. https证书申请

     因为要为海外组的aws设置https证书,由于使用的是新的域名,所以要先申请购买证书,然后设置上去.由于是第一次做这件事.所以过程有些坎坷.      先购买https证书.看了几家,感觉GoDad ...

  8. https证书申请流程和简介

    HTTPS证书是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安 ...

  9. 免费好用的阿里云云盾证书服务(https证书)申请步骤

    推荐一个免费的阿里云产品:云盾证书(https证书) 为了能让非专业人士看懂,同样尽量用直白的话,一般来说:当你个人需要建立网站,或者公司要建立官网.商城,通常需要先购买服务器或云主机,虚拟空间,然后 ...

  10. 免费靠谱的 Let’s Encrypt 免费 https 证书申请全过程

    申请 Let’s Encrypt证书的原因: 现在阿里云等都有免费的 https 证书,为什么还要申请这个呢(估计也是因为阿里云这些有免费证书的原因,所以 Let’s Encrypt 知道的人其实并不 ...

随机推荐

  1. session反序列化

    先来了解一下关于session的一些基础知识 什么是session?在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息.这样 ...

  2. Python常用的数据结构

    一.list 列表 1.列表的特点 有序的,元素可以重复,列表中的元素可以进行增上改查,可以存放不同的数据类型 2.创建列表 中括号创建并填充 --->[] 通过构造函数创建 list() 列表 ...

  3. Sentry 开发者贡献指南 - 数据库迁移

    Django 迁移是我们处理 Sentry 中数据库更改的方式. Django 迁移官方文档:https://docs.djangoproject.com/en/2.2/topics/migratio ...

  4. 适配器模式(Adapter模式)

    模式的定义与特点 适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作.适配器模式分为类结构型模式和对象结构型模式 ...

  5. java-异常-编译时检测异常和运行时异常区别(throws和throw区别)

    1 package p1.exception; 2 /* 3 * 对于角标是整数不存在,可以用角标越界表示, 4 * 对于负数为角标的情况,准备用负数角标异常来表示. 5 * 6 * 负数角标这种异常 ...

  6. shell循环ping ip的写法

    #!/bin/bash for i in `seq 1 20` do if ping -w 2 -c 1 192.168.43.$i | grep "100%" > /dev ...

  7. Luogu_P2048

    超级钢琴 有 \(n\) 个音符,编号从 \(1\) 到 \(n\) .第 \(i\) 个音符的美妙度为 \(A_i\) . 我们要找到 \(k\) 段不同超级和弦组成的乐曲,每段乐曲的连续音符个数 ...

  8. JavaScript的内存管理

    JavaScript的内存管理 1.什么是内存管理? 在了解JavaScript的内存管理之前,可以先大致熟悉一下什么是内存管理,不管什么样的编程语言,在其代码执行的过程中都是需要为其分配内存的. 不 ...

  9. 如何生成Java文档注释(Java Doc Comments)

    在我们的Java SDK中已经提供了javadoc工具来生成我们的文档. 所以我们可以手动调用javadoc工具来生成文档,或者通过IDE生成.当然IDE也是调用javadoc,不过更快更省事. 注释 ...

  10. Saas系统架构的思考,多租户Saas架构设计分析

    ToB Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...