发布于:2023-06-13 17:36 阅读次数:757 作者:云码素材 分类:技术分享 关键词:SSL证书
使用ThinkPHP6中集成Acmephp实现SSL证书在线生成,并自动续签。
直接上代码
1,安装Acmephp
用Composer来安装Acmephp。在项目根目录下执行以下命令:
composer require acmephp/acmephp
2,创建证书目录
在config目录下创建一个acmephp.php配置文件,用于配置Acmephp。
return [ 'storage' => [ 'class' => AcmePhpSslStoreFilesystemStore::class, 'directory' => __DIR__.'/../public/certs', ], 'acme' => [ 'directory' => 'https://acme-v02.api.letsencrypt.org/directory', 'contact' => ['mailto:admin@example.com'], ], ];
在上面的配置中,我们指定了证书存储的目录为public/certs,以及ACME服务器的地址和联系方式。
4,创建SSL证书
用Acmephp的API来创建SSL证书。控制器:
<?php
namespace appcontroller;
use AcmePhpSslPrivateKey;
use AcmePhpSslCertificate;
use AcmePhpCoreAcmeClient;
use AcmePhpBundleAcmeDomainAuthorizationChallengeSolver;
use AcmePhpBundleAcmeDomainAuthorizationChallenge;
use AcmePhpBundleAcmeDomainDomainValidator;
use SymfonyComponentHttpFoundationRequest;
class CertController
{
public function create(Request $request)
{
$domain = $request->get('domain');
$email = $request->get('email');
$client = new AcmeClient($domain, $email);
$solver = new AuthorizationChallengeSolver();
$challenge = $client->requestAuthorization($domain);
$solver->solve($challenge, $domain);
$validator = new DomainValidator();
$validator->validate($domain);
$privateKey = new PrivateKey();
$certificate = new Certificate($client->getCertificateData());
$privateKey->saveToFile(__DIR__.'/../public/certs/'.$domain.'.key');
$certificate->saveToFile(__DIR__.'/../public/certs/'.$domain.'.crt');
return 'OK';
}
}
我们首先从请求参数中获取域名和电子邮件地址,然后创建一个AcmeClient对象来请求证书。接着,我们通过AuthorizationChallengeSolver来解决验证挑战,然后使用DomainValidator来验证域名。最后,我们将私钥和证书保存到public/certs目录下。
5,自动续签SSL证书
用Acmephp的API来自动续签SSL证书。
<?php
namespace appcontroller;
use AcmePhpSslPrivateKey;
use AcmePhpSslCertificate;
use AcmePhpCoreAcmeClient;
use AcmePhpBundleAcmeDomainAuthorizationChallengeSolver;
use AcmePhpBundleAcmeDomainAuthorizationChallenge;
use AcmePhpBundleAcmeDomainDomainValidator;
use SymfonyComponentHttpFoundationRequest;
class CertController
{
public function renew(Request $request)
{
$domain = $request->get('domain');
$email = $request->get('email');
$client = new AcmeClient($domain, $email);
$certificate = new Certificate(file_get_contents(__DIR__.'/../public/certs/'.$domain.'.crt'));
$privateKey = new PrivateKey(file_get_contents(__DIR__.'/../public/certs/'.$domain.'.key'));
$client->renewCertificate($certificate, $privateKey);
$certificate->saveToFile(__DIR__.'/../public/certs/'.$domain.'.crt');
$privateKey->saveToFile(__DIR__.'/../public/certs/'.$domain.'.key');
return 'OK';
}
}
思路:我们首先从请求参数中获取域名和电子邮件地址,然后创建一个AcmeClient对象来请求证书。接着,我们加载之前生成的证书和私钥文件,然后调用renewCertificate方法来自动续签证书。最后,我们将新的证书和私钥保存到public/certs目录下。
我要加群:资源共享的时代,不要再单打独斗!加小编微信号加入群:xnynews(备注:云码素材入群),qq群号:202498279,一起技术学习,资源分享!
免责声明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
热门标签
推荐模板

Light Year Admin后台模板 v4 iframe版本 基于Bootstrap 4.4.1
2024-10-20 22:57 浏览:567
热门文章
2022-05-10 08:48 浏览:31394
2Tik Tok 深田咏美抖音视频100+合集资源免费下载【绿色】
2022-10-31 08:42 浏览:30133
2022-03-27 09:29 浏览:16056
2022-09-11 15:02 浏览:13251
2020-04-13 15:31 浏览:12649
6免费使用chatgpt3种方式 chatgpt国内入口无需梯子
2023-04-23 17:52 浏览:11104
2022-09-08 10:28 浏览:10147
2022-04-13 14:31 浏览:9862
9三个开源的php论坛bbs源码 可自建 圈子 帖子社区网站!
2020-09-15 21:34 浏览:9747
2019-08-28 17:28 浏览:8988