feat: add issuer_name tracking and display in CA management

This commit is contained in:
dyzulk
2026-01-07 09:35:29 +07:00
parent a5a700f42c
commit 4bcc470615
4 changed files with 34 additions and 28 deletions

View File

@@ -38,32 +38,7 @@ class RootCaApiController extends Controller
$days = (int) $request->input('days', 3650);
try {
$newData = $this->sslService->renewCaCertificate($certificate, $days);
// 1. Unset 'is_latest' from all versions of this CA type/name
CaCertificate::where('ca_type', $certificate->ca_type)
->where('common_name', $certificate->common_name)
->update(['is_latest' => false]);
// 2. Create NEW version record
$newCertificate = CaCertificate::create([
'ca_type' => $certificate->ca_type,
'common_name' => $certificate->common_name,
'organization' => $certificate->organization,
'key_content' => $certificate->key_content, // Keep same private key for renewal
'cert_content' => $newData['cert_content'],
'serial_number' => $newData['serial_number'],
'valid_from' => $newData['valid_from'],
'valid_to' => $newData['valid_to'],
'is_latest' => true,
]);
// 3. Automatically sync the new version to CDN (Both latest and archive locations)
$this->sslService->uploadPublicCertsOnly($newCertificate, 'both');
$this->sslService->uploadIndividualInstallersOnly($newCertificate, 'both');
// 4. Update bundles
$this->sslService->syncAllBundles();
$newCertificate = $this->sslService->executeRenewalFlow($certificate, $days);
return response()->json([
'status' => 'success',

View File

@@ -24,6 +24,7 @@ class CaCertificate extends Model
'valid_from',
'valid_to',
'is_latest',
'issuer_name',
'cert_path',
'der_path',
'bat_path',

View File

@@ -416,6 +416,7 @@ class OpenSslService
'serial_number' => $newSerialHex,
'valid_from' => date('Y-m-d H:i:s', $newInfo['validFrom_time_t']),
'valid_to' => date('Y-m-d H:i:s', $newInfo['validTo_time_t']),
'issuer_name' => $cert->ca_type === 'root' ? 'Self-Signed' : ($root ? $root->common_name : 'Unknown Root'),
];
} finally {
@@ -452,9 +453,9 @@ class OpenSslService
}
/**
* Internal helper to handle the DB + CDN flow for a single renewal.
* Handle the DB + CDN flow for a single renewal.
*/
private function executeRenewalFlow(CaCertificate $cert, int $days)
public function executeRenewalFlow(CaCertificate $cert, int $days)
{
$newData = $this->renewCaCertificate($cert, $days);
@@ -473,6 +474,7 @@ class OpenSslService
'serial_number' => $newData['serial_number'],
'valid_from' => $newData['valid_from'],
'valid_to' => $newData['valid_to'],
'issuer_name' => $newData['issuer_name'],
'is_latest' => true,
]);

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::connection('mysql_ca')->table('ca_certificates', function (Blueprint $table) {
$table->string('issuer_name')->nullable()->after('organization');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::connection('mysql_ca')->table('ca_certificates', function (Blueprint $table) {
$table->dropColumn('issuer_name');
});
}
};