↑↓ 选择 · ↵ 打开 · 共索引 362 篇

    给 Phabricator 增加 Lets Encrypt 证书

    给 Phabricator 增加 Lets Encrypt 证书

    ARCHIVE 这篇写于 2018 年,距今 7 年多了。里面的版本、链接和做法可能都已经过时,看的时候留个心眼。

    安装步骤

    参考其他文档

    错误处理

    配置 letsencrypt 之后,报错:

    2018/11/13 03:27:34 [emerg] 1#1: BIO_new_file("/etc/letsencrypt/ xxx/cert.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/xxx/cert.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
    nginx: [emerg] BIO_new_file("/etc/letsencrypt/xxx/cert.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/xxx/cert.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
    

    原因是因为是你的 pem 需要进行转换,当然你也可以使用下面这种方式来生成就可直接使用了。

    $ sudo apt-get install software-properties-common
    ...
    
    OK
    
    $ sudo apt-get update
    
    $ sudo certbot --nginx
    
    Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/xxx/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/xxx/privkey.pem
       Your cert will expire on 2019-02-11. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot again
       with the "certonly" option. To non-interactively renew *all* of
       your certificates, run "certbot renew"
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
    

    如果还是不能通过 https 访问,可以参考此解决方案:https://github.com/bitnami/bitnami-docker-phabricator/issues/57

    但是我试验是不行的,但是它的解决思路可以借鉴。

    $ docker exec -it phabricator bash
    $ config set phabricator.base-uri https://$SITE_URL
    $ config set security.require-https 'true'
    $ cat > /opt/bitnami/phabricator/support/preamble.php <<EOF
    <?php
    
    \$_SERVER['HTTPS'] = true;
    EOF
    

    这里有一个坑的地方,就是需要对 $ 进行转义。

    然后重启 phabricator 即可:

    $ docker-compose restart phabricator
    

    另外,acme.sh 项目看起来挺不错的,可以参考。

    acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

    主要步骤:

    • 安装 acme.sh
    • 生成证书
    • copy 证书到 nginx/apache 或者其他服务
    • 更新证书
    • 更新 acme.sh
    • 出错怎么办, 如何调试

    如果你是通过 certbot new 创建的,怎么实现自动更新呢?

    1. 停掉机器的所有 nginx 服务;(否则 certbot renew 会有 nginx restart 错误)
    2. certbot renew;(会将最新的 pem 证书生成到:/etc/letsencrypt/live/p.xxx.com/fullchain.pem)
    3. 拷贝证书:
      • cp /etc/letsencrypt/live/p.xxx.com/privkey.pem /data/phabricator/nginx/ssl/privkey.pem
      • cp /etc/letsencrypt/live/p.xxx.com/fullchain.pem /data/phabricator/nginx/ssl/fullchain.pem
    4. docker-compose restart -f /..../docker-compose.yml 或者 docker start 先前的容器名
    5. 配置 crontab 自动更新任务;(注意 crontab 读取环境变量的问题,可以查看参考资料)

    dns 模式(感谢 Kios)

    dns01 模式 是 Let’s Encrypt 提供的一种验证域名的方式,可以使用 CertBot 去验证 具体就是 使用 CertBot 启用 dns01 然后他会提供给你一个 域名解析中 的一个 TXT Record 然后你把这个放到你的域名解析上,最后记得现在你的服务器上 dig 一下 txt 记录看一下是否递归成功,最终完成 certbot 的提示 enter 就可以获取到新的证书或者更新证书了。

    执行这条命令会提示你加一条 TXT 记录:

    $ ./certbot-auto -d www.example.com --manual --prefered-challenges dns certonly
    

    查询DNS是否递归完成:

    dig -t txt _acme-challenge.www.example.com
    

    我未进行验证,有需要的自己去试验吧。

    参考资料

    1. https://github.com/bitnami/bitnami-docker-phabricator/issues/57
    2. Let’s Encrypt证书自动更新
      • 这里面详细讲解了配置 crontab 所遇到的问题。

    茶歇驿站

    一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。