ko7ta/laravel5.8-lets-encrypt

一个用于使用Let's Encrypt轻松生成SSL证书的Laravel包

2.0.1 2021-06-18 04:53 UTC

This package is auto-updated.

Last update: 2024-09-18 11:48:11 UTC


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)。请参阅许可文件以获取更多信息。