你可以使用ACME协议(Let’s Encrypt使用的协议)的PHP客户端,例如acmephp。以下是一个基本的示例脚本,用于申请Let’s Encrypt证书:
<?php
require 'vendor/autoload.php';
use AcmePhp\Ssl\Generator\KeyPairGenerator;
use AcmePhp\Ssl\Parser\KeyParser;
use AcmePhp\Ssl\Signer\DataSigner;
use AcmePhp\Core\Http\Base64SafeEncoder;
use AcmePhp\Core\Http\SecureHttpClient;
use AcmePhp\Core\AcmeClient;
use AcmePhp\Core\Challenge\Http\HttpDataExtractor;
use AcmePhp\Core\Challenge\Http\HttpChallengeHandler;
use AcmePhp\Core\Challenge\Http\HttpChallengeVerifier;
// 生成密钥对
$keyPairGenerator = new KeyPairGenerator();
$keyPair = $keyPairGenerator->generateKeyPair();
// 创建安全的HTTP客户端
$secureHttpClient = new SecureHttpClient(
$keyPair,
new KeyParser(),
new DataSigner(),
new Base64SafeEncoder()
);
// 创建ACME客户端
$acmeClient = new AcmeClient($secureHttpClient);
// 注册账户
$acmeClient->registerAccount('[email protected]');
// 请求证书
$domains = ['your-domain.com', 'www.your-domain.com'];
$order = $acmeClient->requestOrder($domains);
// 处理HTTP挑战
$httpChallengeHandler = new HttpChallengeHandler();
$httpDataExtractor = new HttpDataExtractor();
foreach ($order->getAuthorizationsChallenges() as $authorizationChallenges) {
$domain = $authorizationChallenges->getLocation()->getDomain();
$challenge = $authorizationChallenges->getHttpChallenge();
$httpChallengeHandler->handle($challenge, $httpDataExtractor->getCheckPath($challenge));
$acmeClient->challenge($challenge);
$httpChallengeHandler->cleanUp($domain, $httpDataExtractor->getFilePath($challenge));
}
// 生成域名密钥对
$domainKeyPair = $keyPairGenerator->generateKeyPair();
// 请求证书签名
$certificate = $acmeClient->requestCertificate($order, $domainKeyPair);
// 保存证书和私钥
file_put_contents('/etc/letsencrypt/live/your-domain.com/cert.pem', $certificate->getPEM());
file_put_contents('/etc/letsencrypt/live/your-domain.com/private.pem', $domainKeyPair->getPrivateKey()->getPEM());
>
这个脚本首先生成一个密钥对,然后使用这个密钥对注册一个新的ACME账户。然后,它请求一个新的证书订单,处理HTTP挑战,最后请求证书签名。
请注意,这只是一个基本的示例,你可能需要根据你的具体需求进行修改。例如,你可能需要处理DNS挑战而不是HTTP挑战,或者你可能需要在不同的位置存储证书和私钥。
此外,你需要使用composer安装acmephp:
composer require acmephp/core
在运行此脚本之前,请确保你已经正确配置了你的web服务器,以便Let’s Encrypt的服务器可以访问到用于HTTP挑战的文件。你还需要确保你有权限写入证书和私钥的目录。
最后,这个脚本没有处理证书的续期。你可能需要设置一个cron job或其他类型的定时任务,定期运行类似的脚本来续期你的证书。
希望这个信息对你有所帮助!如果你有任何问题或需要进一步的帮助,随时向我提问。😊