Rozšírenie
Kontrakt poskytovateľa je verejný. Implementujte CertificateProvider — a k nemu ProvisionsMultipleDomains a ReportsCertificateStatus, ak váš backend zvláda SAN a živý stav:
use Illuminate\Support\Collection;
use RoundlyConsulting\Certificates\Contracts\CertificateProvider;
use RoundlyConsulting\Certificates\Contracts\ProvisionsMultipleDomains;
use RoundlyConsulting\Certificates\Contracts\ReportsCertificateStatus;
use RoundlyConsulting\Certificates\DataTransferObjects\CertificateStatusReport;
final class VaultCertificateProvider implements CertificateProvider, ProvisionsMultipleDomains, ReportsCertificateStatus
{
public function get(): Collection { /* Collection<int, RemoteCertificate> */ }
public function exists(string $name, string $domain): bool { /* ... */ }
public function generate(string $name, string $domain): void { /* provision one domain */ }
public function generateMany(string $name, array $domains): void { /* one SAN certificate */ }
public function status(string $name, string $domain): CertificateStatusReport { /* live status + expiry */ }
}Zaregistrujte ho cez fasádu — napríklad v metóde boot() service providera. Certificates::extend() pridá driver do CertificateProviderManager, správcu driverov za Certificates::driver(); potom ho zvoľte ako predvolený driver alebo pre konkrétne volanie:
use RoundlyConsulting\Certificates\Contracts\CertificateProvider;
use RoundlyConsulting\Certificates\Facades\Certificates;
Certificates::extend('vault', fn (): CertificateProvider => new VaultCertificateProvider());
// CERTIFICATES_DRIVER=vault, or per call:
Certificates::for('app.example.com')->using('vault')->issue();get() vracia value objekty RemoteCertificate (name, domain). status() je dôkazom vystavenia: report v stave failed, expired či revoked vystavenie alebo obnovu zmarí a pri vystavení report, ktorý ešte čaká, nechá záznam v stave requested. Hláste expiráciu, aby ju register mohol zapísať do expires_at — bez nej použije validForDays — a odtlačok, podľa ktorého sa skutočná obnova odlíši od nezmeneného certifikátu.
Úložiská certifikátov
CertificateStore uchováva PEM materiál — koncový certifikát, kľúč a reťazec — ako StoredCertificate. Balík dodáva FilesystemCertificateStore; implementáciou kontraktu vo vlastnom poskytovateľovi môžete materiál ukladať inde:
namespace RoundlyConsulting\Certificates\Contracts;
interface CertificateStore
{
public function put(string $name, StoredCertificate $material): void;
public function get(string $name): ?StoredCertificate;
public function exists(string $name): bool;
public function delete(string $name): void;
public function names(): array; // list<string>
}Kontajner viaže CertificateStore na FilesystemCertificateStore nad drivers.acme.store. Dodávané drivery acme a filesystem si vytvárajú vlastné úložisko zo svojich konfiguračných kľúčov, takže nové naviazanie kontraktu ich nepresmeruje.
Makrá
CertificatesManager aj CertificateBuilder sú makrovateľné — pridajte vlastné doménové metódy, napríklad v AppServiceProvider::boot(). Makro managera zavoláte aj na fasáde:
use RoundlyConsulting\Certificates\CertificatesManager;
CertificatesManager::macro('issueForTeam', function (Team $team, string $domain) {
/** @var CertificatesManager $this */
return $this->for($domain)->owner($team)->issue();
});
Certificates::issueForTeam($team, 'app.example.com');Ak chcete namiesto toho zmeniť samotný prípad použitia, naviažte v kontajneri vlastnú akciu — manager získava každú akciu pri každom volaní (pozri DI a akcie).
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.