NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Certificates for Laravel

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|null

Vystavenie 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 kryptomien

Odoslaní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.