Vystavovanie certifikátov
Vystavenie ide cez fasádu Certificates nad CertificatesManager. issueIfMissing() vráti aktívny záznam z registra pre doménu, alebo vystaví nový certifikát:
use RoundlyConsulting\Certificates\Facades\Certificates;
$certificate = Certificates::issueIfMissing('app.example.com');
$certificate->status; // RoundlyConsulting\Certificates\Enums\CertificateStatus::Issued
$certificate->expires_at; // CarbonImmutable|null
$certificate->expiresWithin(14); // bool
$certificate->daysUntilExpiry(); // int|nullVystavenie z DTO
issue() certifikát vždy vystaví. Prijíma IssueCertificateData — ten istý vstup, ktorý používa builder, príkaz certificates:issue aj HasCertificates:
use RoundlyConsulting\Certificates\DataTransferObjects\IssueCertificateData;
use RoundlyConsulting\Certificates\Facades\Certificates;
// Fully specified issuance, recorded in the registry.
$certificate = Certificates::issue(new IssueCertificateData(
domain: 'shop.example.com',
driver: 'acme',
validForDays: 90,
meta: ['plan' => 'pro'],
owner: $tenant,
));
// Shorthands.
Certificates::issue(IssueCertificateData::make('shop.example.com'));
Certificates::issue(IssueCertificateData::makeForDomains(['example.com', 'www.example.com']));Čo sa deje pri vystavení
- Domény sa prevedú na malé písmená a odstránia sa duplicity — pri názvoch hostiteľov nezáleží na veľkosti písmen — a každá prejde pravidlom ValidDomain. Neplatná vyhodí InvalidDomainException skôr, než sa čokoľvek zapíše.
- Ešte pred zápisom do záznamu sa vezme zámok vystavenia daného certifikátu. Ak ho drží iný proces, issue() vyhodí ProvisioningInProgressException a záznam zostane bez zmeny.
- Záznam registra pre (driver, name) sa vytvorí alebo aktualizuje so stavom requested, zoznamom domén, meta údajmi a vlastníkom a spustí sa CertificateRequested. Skôr vyčistený záznam sa obnoví ako nová registrácia.
- Poskytovateľ certifikát vystaví — pri viacerých doménach cez generateMany(), ak podporuje SAN, inak cez generate() — a načíta sa jeho report stavu.
- Poskytovateľ hlási vystavený certifikát: záznam prejde do stavu issued s nahlásenou expiráciou, vydavateľom, sériovým číslom a odtlačkom (validForDays, predvolene 90 dní, sa použije len vtedy, keď driver expiráciu neuvádza) a spustí sa CertificateIssued.
- Vystavenie ešte prebieha (cert-manager vystavuje asynchrónne): záznam zostane v stave requested, kým výsledok nezapíše certificates:sync.
- Poskytovateľ hlási failed, expired či revoked — alebo vyhodil výnimku: záznam prejde do stavu failed s vyplneným last_error, spustí sa CertificateFailed a výnimka sa pošle ďalej. V každom prípade sa zahodí cachovaný report stavu certifikátu.
Vystavenie bez registra
generate() je volanie nižšej úrovne. Ak tabuľka registra existuje, spustí issue() — a keď sa certifikát práve vystavuje, namiesto výnimky vráti false; bez tabuľky vystaví certifikát priamo cez poskytovateľa pod tým istým zámkom certifikátu:
// true once it ran; false while another process is provisioning
// this certificate (its per-certificate lock is held).
Certificates::generate('shop.example.com'); // boolČítanie
Certificates::get(); // Collection<int, RemoteCertificate> from the active driver
Certificates::exists('app.example.com'); // bool
Certificates::find('app.example.com'); // ?Models\Certificate (registry lookup)
Certificates::find('app.example.com', 'acme'); // ...limited to one driver
Certificates::status('app.example.com'); // ?CertificateStatus (registry enum)
Certificates::statusReport('app.example.com'); // ?CertificateStatusReport (live, cached)
Certificates::expiring(14, 'acme'); // Collection<int, Certificate> expiring within 14 days
Certificates::driver('null'); // resolve a specific provider instance
Certificates::certificateName('app.example.com'); // "generated-tls-app-example-com"
Certificates::certificateName('*.Example.com'); // "generated-tls-wildcard-example-com"Úplný zoznam metód nájdete na stránke Fasáda Certificates.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.