精华内容
下载资源
问答
  • get.acme.sh 1.从Web安装: : 安装 curl https://get.acme.sh | sh -s email=my@example.com 或者 wget -O - https://get.acme.sh | sh -s email=my@example.com 2.高级安装:
  • acme.sh-源码

    2021-02-15 01:47:33
    ACME Shell脚本:acme.sh 一个完全用Shell(Unix shell)语言编写的ACME协议客户端。 完整的ACME协议实现。 支持ACME v1和ACME v2 支持ACME v2通配符证书 简单,强大且非常易于使用。 您只需要3分钟即可学习。 ...
  • ACME.SH,停止错误“客户端ID不是数字”! Description(法语)[英语较低] 该存储库仅专用于acme.sh及其DNS API“ dns_ispconfig.sh ”,旨在解决此重复的“客户端ID不是数字”错误。 似乎有些主机正在“与...
  • acme.sh:实现ACME客户端协议的纯Unix Shell脚本
  • ansible-acme-sh:使用acme.sh使用“让我们加密”安装并自动更新SSL证书
  • 经过一番研究oneinstack的内部,也发现了oneinstack使用acme.sh这个库,这个是用Shell脚本编写的,不需要安装其他东西,比较纯净,觉得比较适合自己,记录一下过程。 准备工作 一个已解析好的域名(可以用http来..

    前言

    一直想更新一下https,最近刚好有点空,就实现了一下。

    之前看过一篇教你快速撸一个免费HTTPS证书的文章,通过Certbot来管理Let's Encrypt的证书,使用前需要安装一堆库,觉得不太友好。所谓条条大路通罗马,肯定还有其他方法可以做这个事情。

    经过一番研究oneinstack的内部,也发现了oneinstack使用 acme.sh 这个库,这个是用Shell脚本编写的,不需要安装其他东西,比较纯净,觉得比较适合自己,记录一下过程。

    准备工作

    1. 一个已解析好的域名(可以用http来访问)。
    2. 开启服务器的443端口防火墙。

    步骤

    一、安装acme.sh

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

    具体参考这几篇:

    https://www.v2ex.com/t/656367
    https://www.v2ex.com/t/656394
    https://m.cnbeta.com/view/960295.htm
    一些网站https证书出现问题的情况分析

    (最后这篇说很多大站都受影响了)

    HTTPS 加密通信挺重要的,之前也听说过 MITM(中间人攻击),不过这还是第一次听说证书被劫持的……

    怎么说好呢,应该可以说网络上不能保证绝对安全吧,或者说绝对安全是不存在的。

    想起来之前搭建的一个服务还没上 HTTPS,然而想不起来之前是怎么配置 SSL 证书的了,然后又得去找资料烦死了,于是这回顺便来记录一下好了啦。(摊手

    通过 Let’s encrypt 可以获得 90 天免费且可续期的 SSL 证书,而利用 acme.sh 可以自动生成和更新,就来介绍一下配置的过程吧。

    当然,你还可以尝试用 Let’s Encrypt 的 certbot 工具来签发证书,不过要装一堆库吧,我也不记得了……

    下面的内容涉及 acme.sh 的安装,证书的签发及认证,如何安装到 nginx,以及自动更新证书、更新 acme.sh 等。

     

    0x01 安装 acme.sh

    bash

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

    或者

    bash

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

    执行上面的命令,它会:

    • 从 GitHub 上下载 sh 脚本并执行
    • 把文件解压到用户的 ~/.acme.sh目录下
    • 给命令行设置一个acme.sh的 alias 别名
    • 最后注册一个 cron 定时任务来自动更新证书。

    安装完成后要自行重启命令行,或者重新加载一下.bashrc文件source ~/.bashrc)。

    然后看一下有没有生效。

    bash

    $ acme.sh -h
    https://github.com/acmesh-official/acme.sh
    v2.8.6
    Usage: acme.sh  command ...[parameters]....
    Commands:
      --help, -h               Show this help message.
      --version, -v            Show version info.
      --install                Install acme.sh to your system.
      --uninstall              Uninstall acme.sh, and uninstall the cron job.
      --upgrade                Upgrade acme.sh to the latest code from https://github.com/acmesh-official/acme.sh.
      --issue                  Issue a cert.
      --signcsr                Issue a cert from an existing csr.
      --deploy                 Deploy the cert to your server.
      --install-cert           Install the issued cert to apache/nginx or any other server.
    # ......

     

    0x02 签发 SSL 证书

    签发 SSL 证书需要证明这个域名是属于你的,即域名所有权,一般有两种方式验证:http 和 dns 验证。

    通过 acme.sh 可以签发单域名、多域名、泛域名证书,还可以签发 ECC 证书。为了简单起见,这里以单域名证书为例,后面再拓展一下好了。

    下面任意一种方式只要安装成功了就行!

    注意:这一步只是生成了证书,并没有进行配置,因此访问网站当然上不了 https。

    2.1 HTTP 验证

    这种方式 acme.sh 会自动在你的网站根目录下放置一个文件,来验证你的域名所有权,验证之后就签发证书,最后会自动删除验证文件。

    前提是要绑定的域名已经绑定到了所在服务器上,且可以通过公网进行访问!

    2.1.1 Webroot mode

    假设服务器在运行着的,网站域名为 example.com,根目录为 /home/wwwroot/example.com。那么只需要执行下面这条语句就行。

    bash

    acme.sh  --issue  -d example.com  -w /home/wwwroot/example.com

    2.1.2 Apache / Nginx mode

    如果用的是 Apache 或者 Nginx 服务器,可以自动寻找配置文件来进行签发。

    bash

    acme.sh  --issue  -d example.com  --apache  # Apache
    acme.sh  --issue  -d example.com  --nginx   # Nginx

    如果找不到配置文件的话可以自行配置。

    bash

    acme.sh  --issue  -d example.com  --nginx /etc/nginx/nginx.conf  # 指定nginx的conf
    acme.sh  --issue  -d example.com  --nginx /etc/nginx/conf.d/example.com.conf  # 指定网站的conf

    2.1.3 Standalone mode

    这种方式下,acme.sh 会自己建立一个服务器来完成签发。主要适合的是没有建立服务器的情况,不过其实有服务器的话只要暂时关闭,不造成端口冲突就能使用。

    http 模式,80端口:

    bash

    acme.sh  --issue  -d example.com  --standalone

    如果用了反代之类的不是 80 端口,则可以手动指定。

    bash

    acme.sh  --issue  -d example.com  --standalone --httpport 88

    当然它还支持 tls 模式,不是 443 端口的话也可以自行指定。

    bash

    acme.sh  --issue  -d example.com  --alpn
    acme.sh  --issue  -d example.com  --alpn --tlsport 8443  # 自行指定tls端口

     

    2.2 DNS 验证

    这种方式下,不需要任何服务器,不需要任何公网 ip,只需要 dns 的解析记录即可完成验证。

    比如说服务器不能直接公网访问,以及某些 VPS 直接绑定域名没备案的话是上不去的,就需要采用这种方案了。(我的就是了

    当然,手里有域名只是想生成一个证书而已也可以这么用。

    2.2.1 DNS API mode

    这种方式贼强大,直接可以利用域名服务商提供的 API 就可以自动帮你添加 TXT 记录完成验证和证书签发。而且60天后还可以自动完成续期。(我就是用这种方式实现哒~

    比如说 CloudFlare 的,在这里获取你的API Key。可以用全局 API Key,将参数导入到命令行。

    bash

    export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"
    export CF_Account_ID="xxxxxxxxxxxxx"

    为了限制权限,可以新建一个区域的 API Key. 这里只需要 Zone.DNS 的编辑权限(restrict the API Token only for write access to Zone.DNS for a single domain)就行。

    bash

    export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"
    export CF_Account_ID="xxxxxxxxxxxxx"
    export CF_Zone_ID="xxxxxxxxxxxxx"

    Account_ID 和 Zone_ID 在域名的管理页面右下方可以得到。

    而后再签发证书。

    bash

    acme.sh --issue --dns dns_cf -d example.com 

    之后这些配置信息会保存到 ~/.acme.sh/account.conf 这个文件里,在证书续期或者其他利用 CF 进行验证的时候会自动调用。

    当然,国内一般用的是 DNSPod,也提供了 API,类似配置就好了。

    bash

    export DP_Id="1234"
    export DP_Key="sADDsdasdgdsf"
    acme.sh --issue --dns dns_dp -d example.com -d www.example.com

    (这个其实就是多域名签发了)

    更多例子参考官方 Wiki 好了→ How to use DNS API

    2.2.2 DNS manual mode

    适合域名服务商没有提供 API 的情况,需要自己在域名配置一个 TXT 记录,且不能自动续期,每次都需要重新配置。

    bash

    acme.sh  --issue  -d example.com  --dns  -d www.example.com

    更多请参考官方教程 DNS manual mode

    2.2.3 DNS alias mode

    如果域名服务商没有提供 API,或者是一个挺重要的域名,为了安全不希望或者不方便直接配置这个域名的解析记录,可以通过另一个没那么重要的域名(可能是专门用来签发证书的)间接进行配置。

    实际上还是需要有一个域名来验证所有权啦!

    更多参考官方教程 DNS alias mode 好了。

     

    2.3 多域名配置

    多个域名签发同一张证书。只需要在验证方式之后添加多个 -d <YourDomainHere> 参数就行。

    bash

    acme.sh --issue -d example.com -w /home/wwwroot/example.com -d www.example.com
    
    acme.sh  --issue  -d example.com  --standalone  -d www.example.com 
    
    acme.sh  --issue  -d example.com  --dns  -d www.example.com

    也可以多个域名指定不同的验证方式,例如

    bash

    acme.sh  --issue  \
    -d aa.com  -w /home/wwwroot/aa.com \
    -d bb.com  --dns dns_cf \
    -d cc.com  --apache \
    -d dd.com  -w /home/wwwroot/dd.com

     

    2.4 泛域名配置

    Wildcard certificates

    同理,只需要加个*就好。不过好像只适用于 DNS 验证的方式。

    bash

    acme.sh  --issue -d example.com  -d '*.example.com'  --dns dns_cf

     

    2.5 签发 ECC 证书

    默认签发的都是基于 RSA 密钥加密的证书,而 ECC (Elliptic Curve Cryptography, 椭圆曲线密码) 密钥的保密性比 RSA 更好,密钥长度更短,更能对抗量子解密等,目前现代的操作系统和浏览器都支持 ECC 证书了(Windows XP 及其之前的就算了)。

    Let's Encrypt 提供了 ECDSA 证书的签发,且 acme.sh 也支持。

    我看网上的教程基本没讲 ECC 证书的签发,这里就来整一下呗!

    其实只需要加上一个以 ec- 为前缀的 --keylength 参数(或 -k)就可以了。理论上上面的各种验证方式都适用。

    比如

    bash

    acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256  # 单域名
    acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256  # 多域名

    支持以下长度的证书,一般就用 ec-256 就行了。

    1. ec-256 (prime256v1, “ECDSA P-256”)
    2. ec-384 (secp384r1, “ECDSA P-384”)
    3. ec-521 (secp521r1, “ECDSA P-521”, which is not supported by Let’s Encrypt yet.)

     

    0x03 安装(copy)证书

    签发证书成功后,需要把证书安装或者复制到真正需要的地方,如 nginx / apache 的目录下。

    官方说必须用下面的命令来安装证书,不能直接用 ~/.acme.sh/目录下的证书文件,因为那只能内部使用,且未来目录结构可能会更改。

    我们只需要使用 --installcert 命令,指定目标位置,然后证书文件就会被 copy 到相应的位置了。

    其中域名是必须的,其他参数是可选的。

    有必要的话,可能需要对证书文件的所属权限进行一些设置。(我这边没有问题呢,就略了吧)

    3.1 Nginx

    bash

    acme.sh --installcert -d example.com \
    --key-file       /path/to/keyfile/in/nginx/key.pem  \
    --fullchain-file /path/to/fullchain/nginx/cert.pem \
    --reloadcmd     "service nginx force-reload"

    比如你可以在 nginx 的目录下新建一个 ssl 目录,然后把证书安装 / copy 过去。

    bash

    acme.sh --installcert -d example.com \
            --key-file   /etc/nginx/ssl/example.com.key \
            --fullchain-file /etc/nginx/ssl/example.com.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/.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。

    3.2 Apache

    bash

    acme.sh --install-cert -d example.com \
    --cert-file      /path/to/certfile/in/apache/cert.pem  \
    --key-file       /path/to/keyfile/in/apache/key.pem  \
    --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
    --reloadcmd     "service apache2 force-reload"

    在命令中的 reloadcmd 参数很重要! 这个用来指定证书更新(Renew)后执行的命令,从而使续期后的证书生效。

    默认 60 天就会续期一次,上面这些参数会记录下来并自动执行。(几好,贼方便

     

    0x04 生成 dhparam.pem 文件(可选)

    bash

    openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

    这一步是为了增强 SSL 的安全性。这里生成一个更强壮的 DHE 参数。

    前向安全性(Forward Secrecy)的概念很简单:客户端和服务器协商一个永不重用的密钥,并在会话结束时销毁它。服务器上的 RSA 私钥用于客户端和服务器之间的 Diffie-Hellman 密钥交换签名。从 Diffie-Hellman 握手中获取的预主密钥会用于之后的编码。因为预主密钥是特定于客户端和服务器之间建立的某个连接,并且只用在一个限定的时间内,所以称作短暂模式(Ephemeral)。

    使用了前向安全性,如果一个攻击者取得了一个服务器的私钥,他是不能解码之前的通讯信息的。这个私钥仅用于 Diffie Hellman 握手签名,并不会泄露预主密钥。Diffie Hellman 算法会确保预主密钥绝不会离开客户端和服务器,而且不能被中间人攻击所拦截。

    nginx 依赖于 OpenSSL 给 Diffie-Hellman (DH)的输入参数。不幸的是,这意味着 Diffie-Hellman Ephemeral(DHE)将使用 OpenSSL 的默认设置,包括一个用于密钥交换的1024位密钥。因为我们正在使用2048位证书,DHE 客户端就会使用一个要比非 DHE 客户端更弱的密钥交换。

    更多参考这里 Guide to Deploying Diffie-Hellman for TLS 吧。

     

    0x05 配置 Nginx

    没用过 Apache,这里只说 Nginx 好了。(其实也不怎么会用(小声bb

    修改网站的 conf 配置文件,加入 SSL 的相关配置。

    nginx

    server {
        server_name example.com;
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        # ...    
        # ssl 相关配置
        ssl_certificate /etc/nginx/ssl/example.com.fullchain.cer;
        ssl_certificate_key /etc/nginx/ssl/example.com.key;
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers '[ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305|ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]:ECDHE+AES128:RSA+AES128:ECDHE+AES256:RSA+AES256:ECDHE+3DES:RSA+3DES';
        ssl_prefer_server_ciphers on;
    
        # ...
    }

    ssl_dhparam /etc/nginx/ssl/dhparam.pem; 是在 0x04 步骤中生成的,可选。

    ssl_ciphers用于指定加密套件,这里采用的是 CloudFlare 家的,具体也不是很清楚 emmm。可以参考一下 Mozilla 的 Wiki:Security/Server Side TLS

    更多参数可以参考 nginx 的文档:Module ngx_http_ssl_module

    TLSv1.3(可选)

    现在很多网站都上 TLSv1.3 了,证书检测的网站对于 TLSv1、TLSv1.1 都认为不安全了,Firefox 自 74.0 版本开始也完全放弃对加密协议 TLS 1.0 和 TLS 1.1 的支持了。

    对于 TLSv1.3 的配置,需要安装最新版的 openssl(OpenSSL 1.1.1 built with TLSv1.3或更高),而后重新编译 nginx,是有点麻烦这里懒得弄了,后面需要再折腾吧。

    开启 HSTS(可选)

    当然,为了更加安全,可以选择开启 HSTS(HTTP Strict Transport Security,HTTP严格传输安全协议),强制浏览器通过 https 进行访问。需要在 location 下的设置中加入一个 header。

    nginx

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    接下来的一年(即31536000秒)中,浏览器看到 header 中包含 Strict-Transport-Security 的话就会自动切换到 https。

    但是在首次访问网站时如果被劫持了,浏览器还是可能会通过 HTTP 明文传递信息。为此,Chrome 维护了一个 HSTS preload list,内置在浏览器中,对于 Chrome, Firefox, Opera, Safari, IE 11 and Edge 等主流浏览器也适用。可以在这里提交你的域名到这个列表里。(不过提交之前要考虑好,全站上 https 噢

    如果 TLS 证书无效或不可信,用户不能忽略浏览器警告继续访问网站。这就是前几天访问 GitHub (Pages) 等网站被拦下来的原因了。


    上面的配置完成后检查一下配置是否正确,而后重启 nginx。

    bash

    nginx -t
    systemctl restart nginx

    之后就可以试一下能不能通过 https 来访问自己的网站啦!

    到这里 SSL 配置就告一段落了,下面是一些 acme.sh 的维护相关的了。

     

    0x06 更新证书

    证书的有效期为 90 天,acme.sh 会 60 天更新(Renew)一次。

    在安装 acme.sh 的时候就自动配置了一条 cron 任务了,会每天检查证书的情况。当然可以到 crontab 里看一下。

    bash

    # crontab -l
    43 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

    也可以试着用上面这条命令执行看一下相关的配置是否正确。

    强制更新可以这样。

    bash

    acme.sh --renew -d example.com --force  
    acme.sh --renew -d example.com --force --ecc  # 如果用的是ECC证书

     

    0x07 停止更新证书

    查看证书列表

    bash

    acme.sh --list

    停止 Renew

    bash

    acme.sh --remove -d example.com [--ecc]

    之后手动把目录下的证书移除就行。

     

    0x08 升级 acme.sh

    bash

    acme.sh --upgrade    # 手动升级
    acme.sh --upgrade --auto-upgrade    # 自动升级
    acme.sh --upgrade --auto-upgrade 0  # 停止自动升级

     

    0xFF 小结

    除了上面这些配置之外,acme.sh 还提供了通知提醒,可以调用其他 API 来推送提醒,具体参考官方Wiki:notify

    总之感觉这个工具还是很实用的,大大降低了 SSL 配置的门槛呢。

    草(一种植物),感觉我把官方的教程翻译了,然后又找了一些其他的资料整合起来了的亚子emmm。不过大部分还是自己手码的字啦!

    实际上我这次配置的是 ECC 密钥的泛域名证书,用的是 DNS API 的模式。其实几个月前就折腾过 SSL 证书的配置了,然而过了就忘了,当时先是用 HTTP 模式进行验证,发现行不通才换的 DNS 模式。这次干脆一起理一遍好了,过程中发现原来 HTTP 模式验证比我想的还要强大,只是需求(主要是需要泛域名证书)对不上罢了。

    怎么说好呢,绝对安全不大可能,都是想方设法尽可能相对安全一些呢。

    希望这一篇不会浪费您的宝贵时间呢,有用的话欢迎给我买点好吃的/buy me a coffee(饿了喵

    溜了溜了(

    References & Extensive Reading

    下面有的是官方文档,有的是博客之类的,由于时效性有些内容可能不适用了。注意一下就吼。

    参考文章

    展开全文
  • acmesh-official/acme.sh

    2020-08-20 20:07:36
    An ACME Shell script: acme.sh Build Status Join the chat at https://gitter.im/acme-sh/Lobby Docker stars Docker pulls shellcheck acme.sh is being sponsored by the following tool; please help to ...

    README.md
    An ACME Shell script: acme.sh Build Status
    Join the chat at https://gitter.im/acme-sh/Lobby Docker stars Docker pulls shellcheck

    acme.sh is being sponsored by the following tool; please help to support us by taking a look and signing up to a free trial

    An ACME protocol client written purely in Shell (Unix shell) language.
    Full ACME protocol implementation.
    Support ACME v1 and ACME v2
    Support ACME v2 wildcard certs
    Simple, powerful and very easy to use. You only need 3 minutes to learn it.
    Bash, dash and sh compatible.
    Purely written in Shell with no dependencies on python or the official Let’s Encrypt client.
    Just one script to issue, renew and install your certificates automatically.
    DOES NOT require root/sudoer access.
    Docker friendly
    IPv6 support
    Cron job notifications for renewal or error etc.
    It’s probably the easiest & smartest shell script to automatically issue & renew the free certificates from Let’s Encrypt.

    Wiki: https://github.com/acmesh-official/acme.sh/wiki

    For Docker Fans: acme.sh two_hearts Docker

    Twitter: @neilpangxa

    中文说明
    Who:
    FreeBSD.org
    ruby-china.org
    Proxmox
    pfsense
    webfaction
    Loadbalancer.org
    discourse.org
    Centminmod
    splynx
    archlinux
    opnsense.org
    CentOS Web Panel
    lnmp.org
    more…
    Tested OS
    NO Status Platform
    1 Ubuntu
    2 Debian
    3 CentOS
    4 Windows (cygwin with curl, openssl and crontab included)
    5 FreeBSD
    6 pfsense
    7 openSUSE
    8 Alpine Linux (with curl)
    9 Archlinux
    10 fedora
    11 Kali Linux
    12 Oracle Linux
    13 Proxmox: See Proxmox VE Wiki. Version 4.x, 5.0, 5.1, version 5.2 and up
    14 ----- Cloud Linux https://github.com/acmesh-official/acme.sh/issues/111
    15 OpenBSD
    16 Mageia
    17 ----- OpenWRT: Tested and working. See wiki page
    18 SunOS/Solaris
    19 Gentoo Linux
    20 Build Status Mac OSX
    21 ClearLinux
    For all build statuses, check our weekly build project:

    https://github.com/acmesh-official/acmetest

    Supported CA
    Letsencrypt.org CA(default)
    ZeroSSL.com CA
    BuyPass.com CA
    Pebble strict Mode
    Supported modes
    Webroot mode
    Standalone mode
    Standalone tls-alpn mode
    Apache mode
    Nginx mode
    DNS mode
    DNS alias mode
    Stateless mode

    1. How to install
    2. Install online
      Check this project: https://github.com/acmesh-official/get.acme.sh

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

    wget -O - https://get.acme.sh | sh
    2. Or, Install from git
    Clone this project and launch installation:

    git clone https://github.com/acmesh-official/acme.sh.git
    cd ./acme.sh
    ./acme.sh --install
    You don’t have to be root then, although it is recommended.

    Advanced Installation: https://github.com/acmesh-official/acme.sh/wiki/How-to-install

    The installer will perform 3 actions:

    Create and copy acme.sh to your home dir ($HOME): ~/.acme.sh/. All certs will be placed in this folder too.
    Create alias for: acme.sh=~/.acme.sh/acme.sh.
    Create daily cron job to check and renew the certs if needed.
    Cron entry example:

    0 0 * * * “/home/user/.acme.sh”/acme.sh --cron --home “/home/user/.acme.sh” > /dev/null
    After the installation, you must close the current terminal and reopen it to make the alias take effect.

    Ok, you are ready to issue certs now.

    Show help message:

    root@v1:~# acme.sh -h
    2. Just issue a cert
    Example 1: Single domain.

    acme.sh --issue -d example.com -w /home/wwwroot/example.com
    or:

    acme.sh --issue -d example.com -w /home/username/public_html
    or:

    acme.sh --issue -d example.com -w /var/www/html
    Example 2: Multiple domains in the same cert.

    acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
    The parameter /home/wwwroot/example.com or /home/username/public_html or /var/www/html is the web root folder where you host your website files. You MUST have write access to this folder.

    Second argument “example.com” is the main domain you want to issue the cert for. You must have at least one domain there.

    You must point and bind all the domains to the same webroot dir: /home/wwwroot/example.com.

    The certs will be placed in ~/.acme.sh/example.com/

    The certs will be renewed automatically every 60 days.

    More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert

    1. Install the cert to Apache/Nginx etc.
      After the cert is generated, you probably want to install/copy the cert to your Apache/Nginx or other servers. You MUST use this command to copy the certs to the target files, DO NOT use the certs files in ~/.acme.sh/ folder, they are for internal use only, the folder structure may change in the future.

    Apache example:

    acme.sh --install-cert -d example.com
    –cert-file /path/to/certfile/in/apache/cert.pem
    –key-file /path/to/keyfile/in/apache/key.pem
    –fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem
    –reloadcmd “service apache2 force-reload”
    Nginx example:

    acme.sh --install-cert -d example.com
    –key-file /path/to/keyfile/in/nginx/key.pem
    –fullchain-file /path/to/fullchain/nginx/cert.pem
    –reloadcmd “service nginx force-reload”
    Only the domain is required, all the other parameters are optional.

    The ownership and permission info of existing files are preserved. You can pre-create the files to define the ownership and permission.

    Install/copy the cert/key to the production Apache or Nginx path.

    The cert will be renewed every 60 days by default (which is configurable). Once the cert is renewed, the Apache/Nginx service will be reloaded automatically by the command: service apache2 force-reload or service nginx force-reload.

    Please take care: The reloadcmd is very important. The cert can be automatically renewed, but, without a correct ‘reloadcmd’ the cert may not be flushed to your server(like nginx or apache), then your website will not be able to show renewed cert in 60 days.

    1. Use Standalone server to issue cert
      (requires you to be root/sudoer or have permission to listen on port 80 (TCP))

    Port 80 (TCP) MUST be free to listen on, otherwise you will be prompted to free it and try again.

    acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com
    More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert

    1. Use Standalone ssl server to issue cert
      (requires you to be root/sudoer or have permission to listen on port 443 (TCP))

    Port 443 (TCP) MUST be free to listen on, otherwise you will be prompted to free it and try again.

    acme.sh --issue --alpn -d example.com -d www.example.com -d cp.example.com
    More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert

    1. Use Apache mode
      (requires you to be root/sudoer, since it is required to interact with Apache server)

    If you are running a web server, it is recommended to use the Webroot mode.

    Particularly, if you are running an Apache server, you can use Apache mode instead. This mode doesn’t write any files to your web root folder.

    Just set string “apache” as the second argument and it will force use of apache plugin automatically.

    acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com
    This apache mode is only to issue the cert, it will not change your apache config files. You will need to configure your website config files to use the cert by yourself. We don’t want to mess with your apache server, don’t worry.

    More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert

    1. Use Nginx mode
      (requires you to be root/sudoer, since it is required to interact with Nginx server)

    If you are running a web server, it is recommended to use the Webroot mode.

    Particularly, if you are running an nginx server, you can use nginx mode instead. This mode doesn’t write any files to your web root folder.

    Just set string “nginx” as the second argument.

    It will configure nginx server automatically to verify the domain and then restore the nginx config to the original version.

    So, the config is not changed.

    acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com
    This nginx mode is only to issue the cert, it will not change your nginx config files. You will need to configure your website config files to use the cert by yourself. We don’t want to mess with your nginx server, don’t worry.

    More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert

    1. Automatic DNS API integration
      If your DNS provider supports API access, we can use that API to automatically issue the certs.

    You don’t have to do anything manually!

    Currently acme.sh supports most of the dns providers:
    https://github.com/acmesh-official/acme.sh/wiki/dnsapi

    1. Use DNS manual mode:
      See: https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode first.

    If your dns provider doesn’t support any api access, you can add the txt record by hand.

    acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
    You should get an output like below:

    Add the following txt record:
    Domain:_acme-challenge.example.com
    Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c

    Add the following txt record:
    Domain:_acme-challenge.www.example.com
    Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Please add those txt records to the domains. Waiting for the dns to take effect.
    Then just rerun with renew argument:

    acme.sh --renew -d example.com
    Ok, it’s done.

    Take care, this is dns manual mode, it can not be renewed automatically. you will have to add a new txt record to your domain by your hand when you renew your cert.

    Please use dns api mode instead.

    1. Issue ECC certificates
      Let’s Encrypt can now issue ECDSA certificates.

    And we support them too!

    Just set the keylength parameter with a prefix ec-.

    For example:

    Single domain ECC certificate
    acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
    SAN multi domain ECC certificate
    acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
    Please look at the keylength parameter above.

    Valid values are:

    ec-256 (prime256v1, “ECDSA P-256”)
    ec-384 (secp384r1, “ECDSA P-384”)
    ec-521 (secp521r1, “ECDSA P-521”, which is not supported by Let’s Encrypt yet.)
    11. Issue Wildcard certificates
    It’s simple, just give a wildcard domain as the -d parameter.

    acme.sh --issue -d example.com -d ‘*.example.com’ --dns dns_cf
    12. How to renew the certs
    No, you don’t need to renew the certs manually. All the certs will be renewed automatically every 60 days.

    However, you can also force to renew a cert:

    acme.sh --renew -d example.com --force
    or, for ECC cert:

    acme.sh --renew -d example.com --force --ecc
    13. How to stop cert renewal
    To stop renewal of a cert, you can execute the following to remove the cert from the renewal list:

    acme.sh --remove -d example.com [–ecc]
    The cert/key file is not removed from the disk.

    You can remove the respective directory (e.g. ~/.acme.sh/example.com) by yourself.

    1. How to upgrade acme.sh
      acme.sh is in constant development, so it’s strongly recommended to use the latest code.

    You can update acme.sh to the latest code:

    acme.sh --upgrade
    You can also enable auto upgrade:

    acme.sh --upgrade --auto-upgrade
    Then acme.sh will be kept up to date automatically.

    Disable auto upgrade:

    acme.sh --upgrade --auto-upgrade 0
    15. Issue a cert from an existing CSR
    https://github.com/acmesh-official/acme.sh/wiki/Issue-a-cert-from-existing-CSR

    1. Send notifications in cronjob
      https://github.com/acmesh-official/acme.sh/wiki/notify

    2. Under the Hood
      Speak ACME language using shell, directly to “Let’s Encrypt”.

    TODO:

    1. Acknowledgments
      Acme-tiny: https://github.com/diafygi/acme-tiny
      ACME protocol: https://github.com/ietf-wg-acme/acme
      Contributors
      Code Contributors
      This project exists thanks to all the people who contribute. [Contribute].

    Financial Contributors
    Become a financial contributor and help us sustain our community. [Contribute]

    Individuals

    Organizations
    Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

    1. License & Others
      License is GPLv3

    Please Star and Fork me.

    Issues and pull requests are welcome.

    展开全文
  • 一、前言 本文旨在提供免费更新https证书的方案,原本使用的是certbot-auto,由于certbot-auto已被弃用,寻找了acme.sh来解决配置https的问题。 二、正文 1.安装acme ..../acme.sh --install..

    一、前言

    本文旨在提供免费更新https证书的方案,原本使用的是certbot-auto,由于certbot-auto已被弃用,寻找了acme.sh来解决配置https的问题。

    二、sh-acme

    1.安装acme

    1.1.下载acme

        github比较慢,可用github.com.cnpmjs.org代替

    git clone https://github.com.cnpmjs.org/acmesh-official/acme.sh

    1.2.配置安装

    ./acme.sh --install  --home ~/zhihao_myacme --config-home ~/zhihao_myacme/data --cert-home  ~/zhihao_mycerts --accountemail  "zhihao@objectmail.com" --accountkey  ~/zhihao_myaccount.key --accountconf ~/zhihao_myaccount.conf

    说明:

    --home 是要安装的自定义目录acme.sh。默认情况下,它安装到~/.acme.sh
    --config-home 是一个可写文件夹,acme.sh将在其中写入所有文件(包括cert / keys,configs)。默认情况下--home
    --cert-home 是自定义的目录,用于保存您颁发的证书。默认情况下,它保存在中--config-home。
    --accountemail是用于向Let’s Encrypt注册帐户的电子邮件,您将在此处收到续订通知电子邮件。默认为空。
    --accountkey 是保存您帐户私钥的文件。默认情况下,它保存在中--config-home。
    --useragent 是用于发送到“让我们加密”的用户代理标头值

    2.生成证书

    acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.,本文主要讲http+nginx方式


     2.1http 方式需要验证你的域名所有权,它会在你域名根目录下的/.well-known/acme-challenge目录下生成一个文件,再访问校验

    (1)配置nginx

    server {
        listen      80;
        server_name www.test.com;
     
        location /.well-known/acme-challenge/ {
            default_type "text/plain";
            root /www/certbot/www.test.com;
     
        }
     
        location / {
            return 301 https://$http_host$request_uri;
        }
    }

    (2)生成证书

    acme.sh  --issue  -d www.test.com  --webroot  /www/certbot/www.test.com/
    

    说明:

     -d 校验域名

    --webroot 校验域名生成校验文件目录,与nginx配置的/.well-known/acme-challenge/下目录一致

    (3)安装证书

    acme.sh --install-cert -d www.test.com \
    --key-file  /www/certbot/www.test.com/key.pem \
    --fullchain-file /www/certbot/www.test.com/cert.pem \
    --reloadcmd  "nginx -s reload"

    到这里证书就已经申请完毕,接下来就是配置nginx的httpps配置了

    3.配置nginx的https配置

    server {
    	#ssl 需要监听443端口 
    	listen 443 ssl;
    	# CA证书对应的域名
    	server_name www.test.com;
    	# 刚刚安装证书密匙绝对路径
    	ssl_certificate  /www/certbot/www.test.com/cert.pem; 
    	# 刚刚安装证书key绝对路径 
    	ssl_certificate_key  /www/certbot/www.test.com/key.pem;
    	# session超时
        ssl_session_timeout 5m;
        # 协议类型
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        # ssl算法列表 
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        #  是否 服务器决定使用哪种算法  on/off   TLSv1.1 的话需要开启
        ssl_prefer_server_ciphers on;
    
        location / {
            default_type "text/plain";
            return 200 '配置https成功';
        }
    }
    # 如果用户通过 http 访问 直接重写 跳转到 https 这个是一个很有必要的操作
    server {
    	listen       80;
        server_name www.test.com;
        location /.well-known/acme-challenge/ {
            default_type "text/plain";
            root /www/certbot/where.test.com/;
        }
    
        location / {
           return 301 https://$http_host$request_uri;
        }
    }
    

    重启nginx,直接访问http://www.test.com,会发现链接已跳转https://www.test.com且访问成功。

    4.证书更新

        目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.。

    其他命令:

    手动更新证书:

    acme.sh --renew -d www.blscy.cn --force 

    查看证书列表:

    acme.sh --list

    停止renew

    acme.sh --remove -d example.com

    三、go-acme(lego)

    ​​​​​​Installation :: Let’s Encrypt client and ACME library written in Go.

    lego -d qy.easywork365.com -d pc.easywork365.com -d wx.easywork365.com -d msg.easywork365.com \
    --path=/etc/lego --http --http.webroot=/data1/webroot/ew365/qy -m=ljm@sanchi.vip \
    -k rsa4096 run
    
    lego -d qy.easywork365.com -d pc.easywork365.com -d wx.easywork365.com -d msg.easywork365.com \
    --path=/etc/lego --http --http.webroot=/data1/webroot/ew365/qy -m=ljm@sanchi.vip \
    -k rsa4096 renew

    展开全文
  • HTTPS之acme.sh申请证书

    千次阅读 2019-12-25 09:30:47
    本文转载自:...1.关于let's encrypt和acme.sh的简介 1.1 let's encrypt Let's Encrypt是一个于2015年三季度推出的数字HTTPS之acme+sh申请证书.html' target='_self'>证书认证机构,旨...
    本文转载自:
    https://www.cnblogs.com/clsn/p/10040334.html  作者:clsn 转载请注明该声明。
    

    1.关于let's encrypt和acme.sh的简介

    1.1 let's encrypt

    图片.png | center | 349x86

    Let's Encrypt是一个于2015年三季度推出的数字HTTPS之acme+sh申请证书.html' target='_self'>证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。
    Let's Encrypt由互联网安全研究小组(缩写ISRG)提供服务。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。
    用以实现新的数字证书认证机构的协议被称为自动证书管理环境(ACME)。GitHub上有这一规范的草案,且提案的一个版本已作为一个Internet草案发布。
    Let's Encrypt宣称这一过程将十分简单、自动化并且免费

    1.2 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

      2.安装acme.sh

      2.1 执行安装

      https://github.com/Neilpang/acme.sh/wiki/dns-manual-mode
      安装很简单, 一个命令:
    curl  https://get.acme.sh | sh

    脚本会根据系统不通选择不同的下载方式:

    图片.png | center | 747x370

    [root@clsn.io /opt] 
    #wget -O -  https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1  sh
    --2018-11-13 15:31:42--  https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh
    正在解析主机 raw.githubusercontent.com... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
    正在连接 raw.githubusercontent.com|151.101.0.133|:443... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:168608 (165K) [text/plain]
    正在保存至: “STDOUT”
    
    100%[======================================================================>] 168,608     --.-K/s   in 0.07s
    
    2018-11-13 15:31:42 (2.38 MB/s) - 已写入标准输出 [168608/168608]
    
    [2018年 11月 13日 星期二 15:31:42 CST] Installing from online archive.
    [2018年 11月 13日 星期二 15:31:42 CST] Downloading https://github.com/Neilpang/acme.sh/archive/master.tar.gz
    [2018年 11月 13日 星期二 15:31:43 CST] Extracting master.tar.gz
    [2018年 11月 13日 星期二 15:31:43 CST] It is recommended to install socat first.
    [2018年 11月 13日 星期二 15:31:43 CST] We use socat for standalone server if you use standalone mode.
    [2018年 11月 13日 星期二 15:31:43 CST] If you don't use standalone mode, just ignore this warning.
    [2018年 11月 13日 星期二 15:31:43 CST] Installing to /root/.acme.sh
    [2018年 11月 13日 星期二 15:31:43 CST] Installed to /root/.acme.sh/acme.sh
    [2018年 11月 13日 星期二 15:31:43 CST] Installing alias to '/root/.bashrc'
    [2018年 11月 13日 星期二 15:31:43 CST] OK, Close and reopen your terminal to start using acme.sh
    [2018年 11月 13日 星期二 15:31:43 CST] Installing alias to '/root/.cshrc'
    [2018年 11月 13日 星期二 15:31:43 CST] Installing alias to '/root/.tcshrc'
    [2018年 11月 13日 星期二 15:31:43 CST] Installing cron job
    #未知信息,已禁用 :34 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
    [2018年 11月 13日 星期二 15:31:43 CST] Good, bash is found, so change the shebang to use bash as preferred.
    [2018年 11月 13日 星期二 15:31:44 CST] OK
    [2018年 11月 13日 星期二 15:31:44 CST] Install success!
    

    2.2 安装后的配置

    普通用户和 root 用户都可以安装使用。
    安装过程进行了以下几步:
    把 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 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

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

    更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install
    在该脚本的安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

    3.申请证书

    acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证。

    3.1 HTTP 方式

    http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

    acme.sh  --issue  -d clsn.io -d *.clsn.io  --webroot  /www/wwwroot/clsn.io/

    只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.
    如果你用的 apache服务器, acme.sh 还可以智能的从 apache的配置中自动完成验证, 你不需要指定网站根目录:

    acme.sh --issue  -d clsn.io   --clsn.io

    如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:

    acme.sh --issue  -d clsn.io  --nginx

    注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏。
    该类型的配置有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.
    如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

    acme.sh  --issue -d clsn.io   --standalone

    更高级的用法请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

    3.2 DNS方式

    这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证。
    这种方式的缺点是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

    3.2.1 颁发证书

    [root@clsn.io /opt] 
    #cd /root/.acme.sh/
    [root@clsn.io /root/.acme.sh]
    #acme.sh --issue -d *.clsn.io -d clsn.io --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
    [2018年 11月 13日 星期二 15:34:55 CST] Creating domain key
    [2018年 11月 13日 星期二 15:34:55 CST] The domain key is here: /www/server/panel/vhost/cert/*.clsn.io/*.clsn.io.key
    [2018年 11月 13日 星期二 15:34:55 CST] Multi domain='DNS:*.clsn.io,DNS:clsn.io'
    [2018年 11月 13日 星期二 15:34:55 CST] Getting domain auth token for each domain
    [2018年 11月 13日 星期二 15:34:56 CST] Getting webroot for domain='*.clsn.io'
    [2018年 11月 13日 星期二 15:34:57 CST] Getting webroot for domain='clsn.io'
    [2018年 11月 13日 星期二 15:34:57 CST] Add the following TXT record:
    [2018年 11月 13日 星期二 15:34:57 CST] Domain: '_acme-challenge.clsn.io'
    [2018年 11月 13日 星期二 15:34:57 CST] TXT value: '9rj0bhiGrO9UJ44XgV0APXuGBRL1vOk4XKdsnnxaIf4'
    [2018年 11月 13日 星期二 15:34:57 CST] Please be aware that you prepend _acme-challenge. before your domain
    [2018年 11月 13日 星期二 15:34:57 CST] so the resulting subdomain will be: _acme-challenge.clsn.io
    [2018年 11月 13日 星期二 15:34:57 CST] Add the following TXT record:
    [2018年 11月 13日 星期二 15:34:57 CST] Domain: '_acme-challenge.clsn.io'
    [2018年 11月 13日 星期二 15:34:57 CST] TXT value: 'yJ4Ca9yVg1Fsp4RhH5XZJohh0eE3dFXEKM2KGUFNHio'
    [2018年 11月 13日 星期二 15:34:57 CST] Please be aware that you prepend _acme-challenge. before your domain
    [2018年 11月 13日 星期二 15:34:57 CST] so the resulting subdomain will be: _acme-challenge.clsn.io
    [2018年 11月 13日 星期二 15:34:57 CST] Please add the TXT records to the domains, and re-run with --renew.
    [2018年 11月 13日 星期二 15:34:57 CST] Please add '--debug' or '--log' to check more details.
    [2018年 11月 13日 星期二 15:34:57 CST] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
    

    3.2.2 修改DNS

    在NS管理方修改主机记录

    图片.png | center | 747x102

    3.2.3 验证解析是否生效

    $dig -t txt  _acme-challenge.clsn.io @8.8.8.8
    
    ; <<>> DiG 9.9.7-P3 <<>> -t txt _acme-challenge.clsn.io @8.8.8.8
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35785
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION:
    ;_acme-challenge.clsn.io.   IN  TXT
    
    ;; ANSWER SECTION:
    _acme-challenge.clsn.io. 599    IN  TXT "yJ4Ca9yVg1Fsp4RhH5XZJohh0eE3dFXEKM2KGUFNHio"
    _acme-challenge.clsn.io. 599    IN  TXT "9rj0bhiGrO9UJ44XgV0APXuGBRL1vOk4XKdsnnxaIf4"
    
    ;; Query time: 2502 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Tue Nov 13 15:40:55 CST 2018
    ;; MSG SIZE  rcvd: 164
    

    3.2.4 生成证书

    获取Let’s Encrypt免费泛域名证书。等DNS解析生效后,运行以下命令重新生成证书:

    [root@clsn.io /root/.acme.sh]
    #acme.sh --renew  -d *.clsn.io -d clsn.io --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
    [2018年 11月 13日 星期二 15:39:26 CST] Renew: '*.clsn.io'
    [2018年 11月 13日 星期二 15:39:26 CST] Multi domain='DNS:*.clsn.io,DNS:clsn.io'
    [2018年 11月 13日 星期二 15:39:27 CST] Getting domain auth token for each domain
    [2018年 11月 13日 星期二 15:39:27 CST] Verifying:*.clsn.io
    [2018年 11月 13日 星期二 15:39:29 CST] Success
    [2018年 11月 13日 星期二 15:39:29 CST] Verifying:clsn.io
    [2018年 11月 13日 星期二 15:39:32 CST] Success
    [2018年 11月 13日 星期二 15:39:32 CST] Verify finished, start to sign.
    [2018年 11月 13日 星期二 15:39:33 CST] Cert success.
    -----BEGIN CERTIFICATE-----
    MIIFUzCCBDugAwIBAgISBFW6y9vj0CLdCtlbjd5uRZFoMA0GCSqGSIb3DQEBCwUA
    MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
    ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODExMTMwNjM5MzJaFw0x
    OTAyMTEwNjM5MzJaMBQxEjAQBgNVBAMMCSouY2xzbi5pbzCCASIwDQYJKoZIhvcN
    AQEBBQADggEPADCCAQoCggEBANsBQz9vlST55GYdf/F9awtMqnwa2S+4nftk75NJ
    s8zRLmj0LvtgZCn0fXgpNH4zAGRR3qzx7VGU80pDg539Kn8k3peoOFxRq5J3JCK2
    NhvVLws7HspIsgHXngf3AyawUg+QN69K50ZDNF6/brgnOiNbmSY5fF2F9zXkNCd2
    4Nsg8ptmYs3RL99ZM2CvjgLLgey3CPAuMWCse8afA4tHJ4pEZRk3dBTtWXy4q2wl
    Uba8K4LuDmqOkWmQ7x3ufrq+1pQUTVQeJbKVQeDHsWQgFJVYnuHrGdd8mbz08quB
    g4ruNCRnkHM1Fyxfu71IEnH1dutIeHv5OAvC3XMJUFE44kMCAwEAAaOCAmcwggJj
    MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
    DAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUP0ZkyUrkFWnJMVT/zGVVTfhJudgwHwYD
    VR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUHAQEEYzBhMC4G
    CCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3JnMC8G
    CCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5cHQub3JnLzAd
    BgNVHREEFjAUggkqLmNsc24uaW+CB2Nsc24uaW8wTAYDVR0gBEUwQzAIBgZngQwB
    AgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRz
    ZW5jcnlwdC5vcmcwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgDiaUuuJujpQAno
    hhu2O4PUPuf+dIj7pI8okwGd3fHb/gAAAWcMAtr/AAAEAwBHMEUCIDn0gs520um3
    dbTpgm3J/QhbjCwVG7Ln8cmONkhiA0S/AiEAqV2/kS63iMF4TGOVQ9s206OPnyx8
    1sLMm7NQfGrUNsYAdgApPFGWVMg5ZbqqUPxYB9S3b79Yeily3KTDDPTlRUf0eAAA
    AWcMAtsEAAAEAwBHMEUCIQDqMPOXRxylye3P2SBDP/DIeDlsa8QFcWM0lYKCmYQW
    zwIgGhTWGjpMOnw4fkoygDE3mHceg+k2vqUBPTwCfu+qRNIwDQYJKoZIhvcNAQEL
    BQADggEBADZWQ8ms7VG10pSQVGg98VHnRE9VfgYq+zCpoJdjVv3OZZ+3hZGkxlQU
    jbpQDPdx2x2KWrhPIlSylZpw1KHFjXq5pwZpkcVjkTO5tkB4+XRsUl0dENj5HGMN
    pwNRPNsiWMnvxiQgKnCpIPPVTOGsajJ5ByQA4+Vni3VNvEEAOurN024e0rfzxhYV
    oXBnb7tK01+HIzoOBsOl9FRbIzkmuogjCrbjU8dBudAKPNAPmFS6bwFnYeFWO2G7
    DhyNrlDFJodx8JjZ9qnzD53gCfutYzsftN3jwBBiGxRpLyWXXAQLqBN5QrkTwL+h
    PFn9Tul9nibZXRIQsyutHx7jFMtAyOY=
    -----END CERTIFICATE-----
    [2018年 11月 13日 星期二 15:39:33 CST] Your cert is in  clsn.io/clsn.io.cer
    [2018年 11月 13日 星期二 15:39:33 CST] Your cert key is in  /www/server/panel/vhost/cert/clsn.io/clsn.io.key
    [2018年 11月 13日 星期二 15:39:33 CST] The intermediate CA cert is in  /www/server/panel/vhost/cert/clsn.io/ca.cer
    [2018年 11月 13日 星期二 15:39:33 CST] And the full chain certs is there:  /www/server/panel/vhost/cert/clsn.io/fullchain.cer
    [2018年 11月 13日 星期二 15:39:33 CST] It seems that you are using dns manual mode. please take care: The dns manual mode can not renew automatically, you must issue it again manually. You'd better use the other modes instead.
    [2018年 11月 13日 星期二 15:39:33 CST] Call hook error.

    注意第二次这里用的是 --renew

    3.2.5 dns 方式API

    dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.
    acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.
    以 dnspod 为例, 你需要先登录到 dnspod 账号, 生成你的 api id 和 api key, 都是免费的. 然后:

    export DP_Id="76GJHG4SG1Q"
    export DP_Key="qaEDHSJiokjhfs"
    acme.sh   --issue   --dns dns_dp   -d clsn.io  -d www.clsn.io

    证书就会自动生成了. 这里给出的 api id 和 api key 会被自动记录下来, 将来你在使用 dnspod api 的时候, 就不需要再次指定了. 直接生成就好了:

    acme.sh  --issue   -d  clsn.io   --dns  dns_dp

    更详细的 api 用法:https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

    4.证书的使用

    4.1 安装证书

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

    注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件,
    例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件.
    这里面的文件都是内部使用, 而且目录结构可能会变化.正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

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

    4.2 Nginx/Tengine服务器安装SSL证书

    以Nginx标准配置为例,生成的证书文件推荐使用 fullchain.cer,私钥文件为是clsn.io.key。

    Nginx 的配置 ssl_certificate 使用 fullchain.cer ,而非 .cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。
    (1)通过上述中生成的证书路径为/www/server/panel/vhost/cert/clsn.io/;
    修改配置文件

        server {
            listen 443;
            server_name localhost;
            ssl on;
            root html;
            index index.html index.htm;
            ssl_certificate   /www/server/panel/vhost/cert/clsn.io/fullchain.cer;
            ssl_certificate_key  /www/server/panel/vhost/cert/clsn.io/clsn.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            location / {
                root html;
                index index.html index.htm;
            }
        }

    (2)重启nginx

    /etc/init.d/nginx  force-reload

    __注意:__这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload

    5.更新

    5.1 证书的更新

    目前证书在 60 天以后会通过定时任务自动更新, 你无需任何操作。
    今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.

    5.2 acme.sh 更新

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

    acme.sh --upgrade

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

    acme.sh  --upgrade  --auto-upgrade

    之后, acme.sh 就会自动保持更新了.
    你也可以随时关闭自动更新:

    acme.sh --upgrade  --auto-upgrade  0

    6.参考文献

    https://letsencrypt.org/
    https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

    展开全文
  • acme.sh实现了acme协议, 可以从 letsencrypt 生成免费的证书. 主要步骤: 安装acme.sh 生成证书 copy 证书到 nginx/apache 或者其他服务 更新证书 更新acme.sh 出错怎么办, 如何调试 下面详细介绍. 1. 安装...
  • 1.安装acme.sh 该文档基于ubuntu 20.04操作,基本大同小异,这里附上官方文档供对比参考 curl https://get.acme.sh | sh source ~/.bashrc 2.配置nginx server { listen 80; server_name www.e-pan.cn; # 域名 ...
  • 使用acme.sh申请Let's Encrypt免费的SSL证书说明:Let's Encrypt —— 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA),简单的说,就是为网站提供免费的 SSL/TLS ...
  • Docker部署acme.sh申请Let's encrypt泛域名证书一:手动安装acme.sh二:申请证书2.1 DNSAPI申请方式2.2 DNS手动校验方式2.3 HTTP校验方式申请2.4 无80端口申请证书2.5 证书续签三:Docker部署acme.sh申请证书3.1 ...
  • 本文介绍如何使用 Docker 镜像 acme.sh,实现名证书自动申请和续签功能。 acme.sh 可以从 letsencrypt 生成免费的证书,支持 Docker 部署,支持 http 和 DNS 两种域名验证方式,其中包括手动,自动 DNS 及 DNS alias...
  • 官方文档 安装acme.sh ...git clone https://github.com/acmesh-official/acme.sh.git cd ./acme.sh ./acme.sh --install 安装过程中会自动为你创建 crontab 定时任务, 每天 0:15 自动检测所有的...
  • acme.sh 使用记录

    2020-01-18 12:03:32
    官方安装和使用文档:...还有一点,acme.sh 检测的 nginx 配置文件必须位于 /etc/nginx/sites-enabled 下。 acme.sh --issue -d cdn.test.xyz --nginx DNS 方式生成证书是支持泛域...
  • 目录 1. 安装acme.sh 2. 生成证书 1. 安装acme.sh 安装很简单, 一个命令: ...并创建 一个 bash 的 alias, 方便你的使用:alias acme.sh=~/.acme.sh/acme.sh 2.自动为你创建 cronjob, 每天 0...
  • 刚开始的时候签发证书比较繁琐,需要自己手敲命令,但后来有位大佬创建了acme.sh这个项目,以下是该项目的GitHub地址: acme.sh 通过访问acme.sh一样可以打开该项目的GitHub页面噢。因为该项目是国人...
  • 阿里云+acme.sh通配符ssl证书

    千次阅读 2021-11-06 00:47:21
    前言 简介 Let’s Encrypt 是一个由非营利性组织互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。...Let’s Encrypt 使用 ACME 协议来验证您对给定域名的控制权并向您颁发证书。要获
  • 安装过程进行了以下几步: 把 acme.sh 安装到你的 home 目录下: ~/.acme.sh/ 并创建 一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh 2). 自动为你创建 cronjob, 每天 0:00 点自动检测所有的...
  • 前言 ...笔者以acme.sh为例,手把手教你配置https证书~ ...acme.sh是国人开发的基于ACME协议的shell脚本,有了它可以很方便的从Letsencrypt生成免费的证书 详细步骤 一: 安装acme.sh curlhttps://get.acme.sh|...
  • docker-letsencrypt-certgen:Docker映像,以自动方式使用certbot和acme.sh客户端从LetsEncrypt CA生成,更新,吊销RSA和ECDSA SSL证书
  • 1. 安装 acme.sh 这里注意做hosts映射,不然安装不成功。 按提示映射访问不了的域名就可以了,一般设置为 vim /etc/hosts 在最后添加如下内容,IP可能需要更换 185.199.108.133 https://raw.githubusercontent.com ...
  • acme.sh的nginx模式生成证书测试

    千次阅读 2018-12-22 19:15:32
    参考:https://github.com/Neilpang/acme.sh/wiki/说明 准备材料: 备案的域名一个:uscwifi.com.cn 带公网的服务器一台 优势: 1.简单,方便。一条命令就搞定。 2.会自动续期,每60天好像 缺点: 1.必须在...
  • acme.sh简单教程

    千次阅读 2021-10-29 23:38:54
    acme.sh用于生成免费的ssl证书,其完整实现了acme协议,并且由纯Shell脚本语言编写,没有过多的依赖项,安装和使用都非常方便。 1. 支持的CA > ZeroSSL.com CA(default):90天 > Letsencrypt.or...
  • 三、参考资料 Github/acmesh-official/acme.sh Let’s Encrypt Wildcard 免费泛域名SSL证书一键申请与SSL使用教程 使用 acme.sh 申请 Let’s Encrypt 泛域名SSL证书详细教程 How to install ACME.SH certificates ...
  • 安装acme.sh acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书. 安装acme.sh curl https://get.acme.sh | sh 创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~/.acme.sh/acme.sh 安装完成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,579
精华内容 1,031
关键字:

acme.sh