ko7ta / laravel5.8-lets-encrypt
一个用于使用Let's Encrypt轻松生成SSL证书的Laravel包
Requires
- php: ^7.2|^8.0
- ext-openssl: *
- acmephp/core: ^1.2|dev-master
- illuminate/console: ^5.5|^6.0|^7.0|^8.0|^9.0
- illuminate/filesystem: ^5.5|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ^5.5|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^8.0
README
一个用于使用Let's Encrypt轻松生成和续订SSL证书的Laravel包。如果你的Laravel应用程序管理多个域的SSL证书,这个包特别有用。如果你只需要为你的应用程序生成一个SSL证书,则不建议使用此包。
此包本质上是对Acme PHP的一个Laravel友好封装。
安装
你可以通过Composer安装此包
composer require ko7ta/laravel-lets-encrypt
发布配置文件和迁移
php artisan vendor:publish --provider="Daanra\LaravelLetsEncrypt\LetsEncryptServiceProvider" --tag="lets-encrypt"
运行迁移
php artisan migrate
注意
此包假定你已使用以下命令在你的存储目录中创建了一个符号链接:
php artisan storage:link
如果你不想这样做,你必须配置一个自定义路径生成器,请参阅下面的配置部分。
用法
为特定域名创建新的SSL证书非常简单
// Puts several jobs on the queue to handle the communication with the lets-encrypt server [$certificate, $pendingDispatch] = \Daanra\LaravelLetsEncrypt\Facades\LetsEncrypt::create('mydomain.com'); // You could, for example, chain some jobs to enable a new virtual host // in Apache and send a notification once the website is available [$certificate, $pendingDispatch] = \Daanra\LaravelLetsEncrypt\Facades\LetsEncrypt::create('mydomain.com', [ new CreateNewApacheVirtualHost('mydomain.com'), new ReloadApache(), new NotifyUserOfNewCertificate(request()->user()), ]); // You can also do it synchronously: \Daanra\LaravelLetsEncrypt\Facades\LetsEncrypt::createNow('mydomain.com');
你也可以通过使用Artisan命令达到相同的效果
php artisan lets-encrypt:create -d mydomain.com
证书存储在数据库中。你可以这样查询它们
// All certificates \Daanra\LaravelLetsEncrypt\Models\LetsEncryptCertificate::all(); // All expired certificates \Daanra\LaravelLetsEncrypt\Models\LetsEncryptCertificate::query()->expired()->get(); // All currently valid certificates \Daanra\LaravelLetsEncrypt\Models\LetsEncryptCertificate::query()->valid()->get(); // All certificates that should be renewed (because they're more than 60 days old) \Daanra\LaravelLetsEncrypt\Models\LetsEncryptCertificate::query()->requiresRenewal()->get(); // Find certificate by domain $certificate = LetsEncryptCertificate::where('domain', 'mydomain.com')->first(); // If you no longer need it, you can soft delete $certificate->delete(); // Or use a hard delete $certificate->forceDelete();
证书有效期为90天。在这些90天结束之前,你需要续订它们。为此,你可以在你的App\Console\Kernel
中添加以下内容
protected function schedule(Schedule $schedule) { $schedule->job(new \Daanra\LaravelLetsEncrypt\Jobs\RenewExpiringCertificates)->daily(); }
这将自动续订所有超过60天的证书,确保它们不会过期。
配置
默认情况下,此包将使用Let's Encrypt的测试服务器来颁发证书。你应该在您的生产服务器的.env
文件中设置
LETS_ENCRYPT_API_URL=https://acme-v02.api.letsencrypt.org/directory
。
默认情况下,此包将尝试使用HTTP-01挑战来验证证书。因此,一个文件将临时存储在你的应用程序的存储目录中的路径app/public/.well-known/acme-challenge/<CHALLENGE_TOKEN>
下。你可以通过在配置中的path_generator
下设置自定义的PathGenerator
类来自定义此行为。请注意,Let's Encrypt期望以下路径
/.well-known/acme-challenge/<CHALLENGE_TOKEN>
返回位于$pathGenerator->getPath($token)
处的文件的 内容。
测试
composer test
变更日志
请参阅CHANGELOG以了解最近有哪些变化。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全
如果你发现任何与安全相关的问题,请通过电子邮件kostenko.antony@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。