精华内容
下载资源
问答
  • acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书
  • 使用lets encrypt 生成免费的证书

    千次阅读 2019-03-17 15:55:12
    acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书. 主要步骤: 安装 acme.sh 生成证书 copy 证书到 nginx/apache 或者其他服务 更新证书 更新 acme.sh 出错怎么办, 如何调试 下面详细介绍. 安装 acme....

    说明
    Mr.L edited this page on 23 Oct 2018 · 21 revisions
    acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

    主要步骤:

    安装 acme.sh
    在这里插入图片描述
    生成证书
    copy 证书到 nginx/apache 或者其他服务
    更新证书
    更新 acme.sh
    出错怎么办, 如何调试
    下面详细介绍.

    1. 安装 acme.sh
      安装很简单, 一个命令:

    curl https://get.acme.sh | sh
    普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:

    把 acme.sh 安装到你的 home 目录下:
    ~/.acme.sh/

    并创建 一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

    2). 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

    更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install

    安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

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

    2. http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
      acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
      只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

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

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

    acme.sh --issue -d mydomain.com --nginx
    注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.

    如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

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

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

    acme.sh --issue --dns -d mydomain.com
    然后, acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可.

    等待解析完成之后, 重新生成证书:

    acme.sh --renew -d mydomain.com
    注意第二次这里用的是 --renew

    dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

    acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.

    以 dnspod 为例, 你需要先登录到 dnspod 账号, 生成你的 api id 和 api key, 都是免费的. 然后:

    export DP_Id=“1234”

    export DP_Key=“sADDsdasdgdsf”

    acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com

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

    acme.sh --issue -d mydomain2.com --dns dns_dp
    更详细的 api 用法: https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

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

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

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

    acme.sh --installcert -d .com
    –key-file /etc/nginx/ssl/.key
    –fullchain-file /etc/nginx/ssl/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 错误。

    –installcert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.

    详细参数请参考: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc

    值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.

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

    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. 出错怎么办:
    如果出错, 请添加 debug log:

    acme.sh --issue … --debug
    或者:

    acme.sh --issue … --debug 2
    请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh

    最后, 本文并非完全的使用说明, 还有很多高级的功能, 更高级的用法请参看其他 wiki 页面.

    https://github.com/Neilpang/acme.sh/wiki

    注意:文章来源于https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

    注:本人安装到/home/目录 ,故 alias acme.sh=/home/acme.sh/acme.sh
    在这里插入图片描述

    注意:生成的证书在IOS设备上存在被墙的问题,导致首次打开链接耗费时间7秒以上,正式环境建议使用阿里云免费证书

    展开全文
  • letsencrypt 生成 SSL 证书 事先配置好访问域名解析 在nginx 对应虚拟主机添加一个验证区域: 配置 nginx server { listen 80; ... location ~ /.well-known { root /data/web; # 目录存在即可 allow all; }...

    letsencrypt 生成 SSL 证书

    • 事先配置好访问域名解析
    • 在nginx 对应虚拟主机添加一个验证区域:


    配置 nginx

    server {
        listen 80;
        ...
        location ~ /.well-known {
            root /data/web; # 目录存在即可
            allow all;
        }
        ...
    }


    生成 SSL

    git clone https://.com/letsencrypt/letsencrypt
    cd letsencrypt
    ./letsencrypt-auto certonly
    • 选择使用: webroot 进行验证


    一劳永逸

    letsencrypt 证书有效期为3个月, 其生成证书路径在: /etc/letsencrypt/live/<domain>/ 下, 证书名称为 fullchain.pem, 私钥为 privatekey.pem

    可以做一个软连接:

    ln -sv /usr/local/openresty/nginx/conf/ssl/<pem_name> -> /etc/letsencrypt/live/kdax.hardlink.me/fullchain.pem
    ln -sv /usr/local/openresty/nginx/conf/ssl/<key_name> -> /etc/letsencrypt/live/kdax.hardlink.me/privkey.pem

    转载于:https://www.cnblogs.com/tiantiandas/p/letsencrypt_generate_ssl_certificate.html

    展开全文
  • 在工作中,nginx必不可少,另一个就是https配置,如何生成免费的ssl证书,并且在不重启nginx的情况下使用letsencrypt生成和更新证书呢?下边分两部分记录我的操作过程 使用token方式验证证书,好处是不需要单独...

    1:使用docker启动的nginx,如何使用letsencrypt整成ssl证书

    在工作中,nginx必不可少,另一个就是https配置,如何生成免费的ssl证书,并且在不重启nginx的情况下使用letsencrypt生成和更新证书呢?下边分两部分记录我的操作过程

    使用token方式验证证书,好处是不需要单独占用80端口,不需要停止nginx,但是相应的,需要再server中配置访问,才能进行验证

    文中使用的docker镜像:certbot/certbot

    文中有什么不对的地方,随时评论,我进行完善。

    2:使用docker letsencrypt生成证书,单独启动80端口验证的方式

    此方式会启动一个web服务,占用80端口,并且your_domain能在外网访问到这个服务,好处是不需要其他的支持,只要没有占用80端口即可

    docker run --rm -p 80:80 -p 443:443 -v /etc/letsencrypt/:/etc/letsencrypt/ certbot/certbot auth --standalone -m your_email --agree-tos -d your_domain
    

    your_email:通知邮箱
    your_domain:要生成ssl证书的域名,需要域名已经解析,并且外网能通过此域名访问到当前服务器的80端口
    –standalone 启动一个web服务,以供letsencrypt验证

    3:使用docker letsencrypt生成证书,使用token验证方式

    此方式验证域名,不需要单独启动web服务,会在本地生成一个token,保存在本地文件,需要通过占用80端口的服务进行映射,使letsencrypt服务器能正常访问到这个token文件,即可验证成功

    docker run --rm -it -v /etc/letsencrypt:/etc/letsencrypt certbot/certbot certonly --webroot --email your_email --agree-tos --no-eff-email --webroot-path=/etc/letsencrypt -d your_domain
    

    -v /etc/letsencrypt:/etc/letsencrypt:(本地路径:容器内路径)将容器内部的路径映射到本地路径,以供其他服务访问
    your_email:通知邮箱
    your_domain:要生成ssl证书的域名,需要域名已经解析,并且外网能通过此域名访问到当前服务器的80端口
    其他参数含义请自行百度

    对应nginx的docker-compose.yml配置

    version: '3'
    services:
      nginx:
        image: nginx
        container_name: nginx
        volumes:
          - /etc/letsencrypt:/etc/letsencrypt
          - ./conf.d:/etc/nginx/conf.d
          - ./html:/html:ro
        ports:
          - 80:80
          - 443:443
        environment:
          - TZ=Asia/Shanghai
    

    /etc/letsencrypt:/etc/letsencrypt:将letsencrypt生成的证书文件,映射到docker容器内部

    server配置

    server {
        listen       80;
        server_name  your_domain;
        # listen       443 ssl;
        # ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        # ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
        # 用于letsencrypt的证书认证。高优先级。所有需要ssl的server都需要添加次配置
        location ~ /.well-known/acme-challenge {
            allow all;
            root /etc/letsencrypt;
        }
    }
    

    your_domain:要生成ssl证书的域名,需要改成自己的域名
    首次生成证书,需要将ssl_certificate和ssl_certificate_key注释,因为没有这个文件,nginx无法启动
    存在证书文件后,后续即可正常访问和使用

    更新证书

    证书的有效期为90天,那么就意味着我们需要再90天内更新证书,证书更新时letsencrypt会验证当前证书是不是超过60天,如果没有,则不进行更新,如果超过了,则更新证书。
    也可以强制更新并重置正式的时间

    docker run --rm -v /etc/letsencrypt:/etc/letsencrypt certbot/certbot renew --webroot -w /etc/letsencrypt --force-renewal
    

    –force-renewal:强制更新证书,不添加为正常更新
    此方法使用token验证方式
    更新完成后,在/etc/letsencrypt/archive/your_domain/下看看是不是多了文件
    在这里插入图片描述

    最后别忘了更新一下nginx:docker kill --signal=HUP 容器名称

    展开全文
  • 这边主要介绍一些怎么生成免费证书。 前提条件: 需要支持DNS服务 基础的wget/curl 需要支持 具体步骤: 1. 下载并安装acme wget -O - https://get.acme.sh | sh 输出类似如下信息: --2020-11-06 21:41:48-- ...

    目前大量的网站都从http 升级为https, https和http的区别, 这边就不说明了, 有大量的文档介绍说明。 这边主要介绍一些怎么生成免费证书。

    前提条件:

    需要支持DNS服务
    基础的wget/curl 需要支持

    具体步骤:

    1. 下载并安装acme

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

    输出类似如下信息:

    --2020-11-06 21:41:48--  https://get.acme.sh/
    Resolving get.acme.sh (get.acme.sh)... 172.67.208.34, 104.31.89.68, 104.31.88.68, ...
    Connecting to get.acme.sh (get.acme.sh)|172.67.208.34|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/html]
    Saving to: ‘STDOUT’
    
        [ <=>                                                                                                                                                  ] 775         --.-K/s   in 0s
    
    2020-11-06 21:41:50 (15.2 MB/s) - written to stdout [775]
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  201k  100  201k    0     0  16453      0  0:00:12  0:00:12 --:--:-- 13555
    [Fri Nov  6 21:42:03 CST 2020] Installing from online archive.
    [Fri Nov  6 21:42:03 CST 2020] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
    [Fri Nov  6 21:42:11 CST 2020] Extracting master.tar.gz
    [Fri Nov  6 21:42:11 CST 2020] It is recommended to install socat first.
    [Fri Nov  6 21:42:11 CST 2020] We use socat for standalone server if you use standalone mode.
    [Fri Nov  6 21:42:11 CST 2020] If you don't use standalone mode, just ignore this warning.
    [Fri Nov  6 21:42:11 CST 2020] Installing to /home/admin/.acme.sh
    [Fri Nov  6 21:42:11 CST 2020] Installed to /home/admin/.acme.sh/acme.sh
    [Fri Nov  6 21:42:11 CST 2020] Installing alias to '/home/admin/.bashrc'
    [Fri Nov  6 21:42:11 CST 2020] OK, Close and reopen your terminal to start using acme.sh
    [Fri Nov  6 21:42:11 CST 2020] Installing cron job
    no crontab for admin
    no crontab for admin
    [Fri Nov  6 21:42:11 CST 2020] Good, bash is found, so change the shebang to use bash as preferred.
    [Fri Nov  6 21:42:11 CST 2020] OK
    [Fri Nov  6 21:42:11 CST 2020] Install success!
    

    上述命令会将acme 默认安装在执行用户的 .acme 目录里面,是一个隐藏目录

    2 进入 .acme 目录,并生成证书

    ### -d 后面跟随域名
    ### -w 跟随一个目录, 域名生成过程中会校验该目录
    ./acme.sh --issue   -d yuming  -w /data1/webroot
    

    最后会生成如下信息:

    [Fri Nov  6 21:46:01 CST 2020] Using CA: https://acme-v02.api.letsencrypt.org/directory
    [Fri Nov  6 21:46:01 CST 2020] Create account key ok.
    [Fri Nov  6 21:46:01 CST 2020] Registering account: https://acme-v02.api.letsencrypt.org/directory
    [Fri Nov  6 21:46:05 CST 2020] Registered
    [Fri Nov  6 21:46:05 CST 2020] ACCOUNT_THUMBPRINT='3SLqrUb6q1mms9A7MxArKa0oOXPRKH7MMOi1R9O_Gr8'
    [Fri Nov  6 21:46:05 CST 2020] Creating domain key
    [Fri Nov  6 21:46:05 CST 2020] The domain key is here: /home/admin/.acme.sh/yuming/yuming.key
    [Fri Nov  6 21:46:05 CST 2020] Single domain='yuming'
    [Fri Nov  6 21:46:05 CST 2020] Getting domain auth token for each domain
    [Fri Nov  6 21:46:11 CST 2020] Getting webroot for domain='yuming'
    [Fri Nov  6 21:46:11 CST 2020] Verifying: yuming
    [Fri Nov  6 21:46:16 CST 2020] Pending
    [Fri Nov  6 21:46:18 CST 2020] Pending
    [Fri Nov  6 21:46:21 CST 2020] Pending
    [Fri Nov  6 21:46:27 CST 2020] Success
    [Fri Nov  6 21:46:27 CST 2020] Verify finished, start to sign.
    [Fri Nov  6 21:46:27 CST 2020] Lets finalize the order.
    [Fri Nov  6 21:46:27 CST 2020] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/101506269/6069419918'
    [Fri Nov  6 21:46:29 CST 2020] Downloading cert.
    [Fri Nov  6 21:46:29 CST 2020] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/041fcfdb3118635894b970e6efa1301d4c82'
    [Fri Nov  6 21:46:30 CST 2020] Cert success.
    -----BEGIN CERTIFICATE-----
    MIIFWDCCBECgAwIBAgISBB/P2zEYY1iUuXDm76sEwxHUyCMA0GCSqGSIb3DQEBCwUA
    ........
    016wSiqoEz1sMsfaasHhiswizYaaNUeINxx9GZBPsmGuD4SFJw==
    -----END CERTIFICATE-----
    [Fri Nov  6 21:46:30 CST 2020] Your cert is in  /home/admin/.acme.sh/yuming/yuming.cer
    [Fri Nov  6 21:46:30 CST 2020] Your cert key is in  /home/admin/.acme.sh/yuming/yuming.key
    [Fri Nov  6 21:46:30 CST 2020] The intermediate CA cert is in  /home/admin/.acme.sh/yuming/ca.cer
    [Fri Nov  6 21:46:30 CST 2020] And the full chain certs is there:  /home/admin/.acme.sh/yuming/fullchain.cer
    

    当目前为止证书生成完成了。

    3 然后再nginx 文件中配置如下信息,这样nginx 就可以使用https 访问了

     		listen 443 ssl;
            ssl_certificate  /home/admin/.acme.sh/yuming/fullchain.cer;
            ssl_certificate_key   /home/admin/.acme.sh/yuming/yuming.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_protocols TLSv1.2;
            ssl_prefer_server_ciphers on;
            server_name  yuming;
    
    

    当然除了上述内容之外nginx 还需要配置如下信息, 用于证书检验和续约

     location ^~ /.well-known/acme-challenge/ {
                     default_type "text/plain";
                     root /data1/webroot/;
            }
    
    展开全文
  • 本篇,我们介绍基于 acme.sh从Letsencrypt生成免费的泛域名证书 环境 linux服务器,操作系统为 centos7.2 nginx 1.10.1 acme.sh v2.8.0 一、安装acme.sh # 安装依赖环境 yum -y install curl cron socat # 下载并...
  • 官网 https://letsencrypt.org/ 官网咱们打开了
  • 如果letsencrypt 生成证书或者更新证书时报如下错误: Failed authorization procedure. xxx.com (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the do...
  • ./letsencrypt.sh letsencrypt.conf Generate CSR...domain.csr 查看脚本,38行是刚才提示的信息 38 echo "Generate CSR...$DOMAIN_CSR" 39 40 OPENSSL_CONF="/etc/ssl/openssl.cnf" 41 42 if [ ! -f "$OPEN...
  • 前言上篇,我们科普了HTTPS的简单概念 本篇,我们介绍基于 acme.sh从Letsencrypt生成免费的泛域名证书环境linux服务器,操作系统为 centos7.2nginx 1.10.1acme.sh v2.8.0# 安装依赖环境yum -y install curl cron ...
  • 本文使用 HTTP 和 DNS 两种校验方式对 Docker 下 linuxserver/letsencrypt 项目进行了实践。生成SpringBoot可用证书,使用...全文基于 linuxserver/letsencrypt 文档及其他官方资料,根据作者实践进行详细解析和记录...
  • 2019独角兽企业重金招聘Python工程师标准>>> https://lzw.me/a/lets-encrypt-ssl.html 转载于:https://my.oschina.net/u/144290/blog/2993603
  • 一、安装 acme.shcurl https://get.acme.sh | sh重新载入 .bashrcsource ~/.bashrc二、生成证书acme.sh 支持两种 HTTP 和 DNS 验证方式验证域名所有权,DNS 验证方式有自动与手动方式,自动方式验证是使用域名解析商...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

letsencrypt生成