acme-tiny 开源项目教程

acme-tiny 开源项目教程

acme-tinyA tiny script to issue and renew TLS certs from Let's Encrypt项目地址:https://gitcode.com/gh_mirrors/ac/acme-tiny

项目介绍

acme-tiny 是一个轻量级的 Python 脚本,用于自动化获取和更新 Let's Encrypt 的 SSL/TLS 证书。该项目旨在提供一个简单、最小化的解决方案,避免使用复杂的 ACME 客户端,同时减少对系统资源的占用。acme-tiny 通过直接与 Let's Encrypt 的 ACME 服务器交互,实现了证书的自动更新,非常适合需要频繁更新证书的场景。

项目快速启动

安装和配置

  1. 克隆项目仓库

    git clone https://github.com/diafygi/acme-tiny.git
    cd acme-tiny
    
  2. 创建账户密钥

    openssl genrsa 4096 > account.key
    
  3. 创建域名证书请求

    openssl genrsa 4096 > domain.key
    openssl req -new -sha256 -key domain.key -subj "/CN=yourdomain.com" > domain.csr
    
  4. 配置验证目录: 在 Web 服务器的根目录下创建一个验证目录,例如:

    mkdir -p /var/www/challenges/
    

    并确保该目录可通过 Web 访问,例如在 Nginx 中添加:

    server {
        listen 80;
        server_name yourdomain.com;
    
        location /.well-known/acme-challenge/ {
            alias /var/www/challenges/;
        }
    }
    
  5. 获取证书

    python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /var/www/challenges/ > ./signed.crt
    

自动更新证书

创建一个脚本 renew_cert.sh 用于自动更新证书:

#!/bin/bash
python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /var/www/challenges/ > /path/to/signed.crt

设置定时任务:

crontab -e

添加以下行以每月更新证书:

0 0 1 * * /path/to/renew_cert.sh >> /path/to/renew_cert.log 2>&1

应用案例和最佳实践

应用案例

acme-tiny 适用于以下场景:

  • 小型网站:对于流量较小、资源有限的小型网站,acme-tiny 提供了一个轻量级的证书管理方案。
  • 自动化部署:在 CI/CD 流程中集成 acme-tiny,实现证书的自动获取和更新。

最佳实践

  • 安全存储密钥:确保账户密钥和域名密钥存储在安全的位置,避免泄露。
  • 定期更新证书:设置定时任务自动更新证书,确保证书始终有效。
  • 监控和日志:定期检查更新脚本的日志,确保更新过程无误。

典型生态项目

acme-tiny 可以与其他开源项目结合使用,形成完整的证书管理生态系统:

  • Nginx/Apache:作为 Web 服务器,与 acme-tiny 配合实现自动化的证书部署。
  • Certbot:另一个流行的 Let's Encrypt 客户端,提供更多功能和选项,可以与 acme-tiny 互补使用。
  • Docker:将 acme-tiny 集成到 Docker 容器中,实现容器化的证书管理。

通过这些生态项目的结合,可以构建一个高效、自动化的证书管理体系,确保网站的安全性和可靠性。

acme-tinyA tiny script to issue and renew TLS certs from Let's Encrypt项目地址:https://gitcode.com/gh_mirrors/ac/acme-tiny

好的,下面是一个使用 acme-client-php 库实现 ACME 协议自动签发证书的示例代码: ```php use AcmePhp\Core\AcmeClient; use AcmePhp\Core\Protocol\Challenge; use AcmePhp\Ssl\Certificate; use AcmePhp\Ssl\CertificateRequest; use AcmePhp\Ssl\PrivateKey; use AcmePhp\Ssl\Signer\CertificateRequestSigner; use AcmePhp\Ssl\Signer\DataSigner; use AcmePhp\Ssl\Signer\SignerFactory; use AcmePhp\Ssl\Generator\KeyPairGenerator; use AcmePhp\Ssl\Parser\KeyParser; use AcmePhp\Ssl\Parser\CertificateParser; use AcmePhp\Ssl\Parser\CertificateRequestParser; // ACME 服务端的 API 地址 $serverUrl = 'https://acme-v02.api.letsencrypt.org/directory'; // 要签发证书的域名列表 $domains = ['example.com', 'www.example.com']; // 创建一个用于存储证书和私钥的目录 $storagePath = '/path/to/storage'; if (!file_exists($storagePath)) { mkdir($storagePath, 0777, true); } // 创建一个私钥 $keyPairGenerator = new KeyPairGenerator(); $privateKey = $keyPairGenerator->generatePrivateKey(); // 创建 ACME 客户端 $acmeClient = new AcmeClient($serverUrl, $privateKey, $storagePath); // 获取 ACME 服务端提供的签发证书所需的验证数据 $authorizationChallenges = $acmeClient->requestAuthorizationChallenges($domains); // 在域名的 DNS 记录中添加验证数据 foreach ($authorizationChallenges as $authorizationChallenge) { if ($authorizationChallenge->getType() === Challenge::TYPE_DNS) { $dnsRecordName = '_acme-challenge.' . $authorizationChallenge->getDomain(); $dnsRecordValue = $authorizationChallenge->getPayload(); // TODO: 将 $dnsRecordName 和 $dnsRecordValue 写入 DNS 记录 } } // 等待 DNS 记录生效 sleep(30); // 向 ACME 服务端验证验证数据 $acmeClient->verifyAuthorizationChallenges($authorizationChallenges); // 生成证书请求文件 $certificateRequest = new CertificateRequest($domains, $privateKey); $certificateRequestSigner = new CertificateRequestSigner(new DataSigner(SignerFactory::create()), new KeyParser()); $certificateRequestPem = $certificateRequestSigner->sign($certificateRequest)->getPEM(); // 向 ACME 服务端申请证书 $certificatePem = $acmeClient->requestCertificate($certificateRequestPem); // 解析证书和私钥 $certificateParser = new CertificateParser(); $certificate = $certificateParser->parse($certificatePem); $privateKeyParser = new KeyParser(); $privateKey = $privateKeyParser->parse($privateKey->toPem()); // 将证书和私钥保存到文件中 $certificatePath = $storagePath . '/certificate.pem'; $privateKeyPath = $storagePath . '/private-key.pem'; file_put_contents($certificatePath, $certificate->toPem()); file_put_contents($privateKeyPath, $privateKey->toPem()); // 打印证书信息 print('Certificate:\n'); print($certificate->toPem()); print("\n"); // 打印私钥信息 print('Private key:\n'); print($privateKey->toPem()); print("\n"); ``` 注意,这只是一个示例代码,需要根据自己的实际情况进行修改。特别是 DNS 记录的操作需要根据自己的 DNS 服务商进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌桃莺Talia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值