diff --git a/lib/Handler/CertificateEngine/OpenSslHandler.php b/lib/Handler/CertificateEngine/OpenSslHandler.php index 82c4da1f3d..da9d631ffa 100644 --- a/lib/Handler/CertificateEngine/OpenSslHandler.php +++ b/lib/Handler/CertificateEngine/OpenSslHandler.php @@ -48,7 +48,10 @@ public function generateRootCert( $csr = openssl_csr_new($this->getCsrNames(), $privateKey, ['digest_alg' => 'sha256']); $options = $this->getRootCertOptions(); - $x509 = openssl_csr_sign($csr, null, $privateKey, $days = 365 * 5, $options); + + $serialNumber = random_int(1000000, 2147483647); + + $x509 = openssl_csr_sign($csr, null, $privateKey, $days = 365 * 5, $options, $serialNumber); openssl_csr_export($csr, $csrout); openssl_x509_export($x509, $certout); @@ -94,12 +97,13 @@ public function generateCertificate(): string { throw new LibresignException('OpenSSL error: ' . $message); } + $serialNumber = random_int(1000000, 2147483647); + $x509 = openssl_csr_sign($csr, $rootCertificate, $rootPrivateKey, $this->expirity(), [ 'config' => $this->getFilenameToLeafCert(), - // This will set "basicConstraints" to CA:FALSE, the default is CA:TRUE - // The signer certificate is not a Certificate Authority 'x509_extensions' => 'v3_req', - ]); + ], $serialNumber); + return parent::exportToPkcs12( $x509, $privateKey, diff --git a/lib/ResponseDefinitions.php b/lib/ResponseDefinitions.php index 4dcd803e34..314cfd9d86 100644 --- a/lib/ResponseDefinitions.php +++ b/lib/ResponseDefinitions.php @@ -68,6 +68,8 @@ * subject: string, * issuer: string, * extensions: string, + * serialNumber: string, + * serialNumberHex: string, * validate: array{ * from: string, * to: string, diff --git a/openapi-full.json b/openapi-full.json index 3571f1f6d2..d1f6fc416e 100644 --- a/openapi-full.json +++ b/openapi-full.json @@ -106,6 +106,8 @@ "subject", "issuer", "extensions", + "serialNumber", + "serialNumberHex", "validate" ], "properties": { @@ -121,6 +123,12 @@ "extensions": { "type": "string" }, + "serialNumber": { + "type": "string" + }, + "serialNumberHex": { + "type": "string" + }, "validate": { "type": "object", "required": [ diff --git a/openapi.json b/openapi.json index 86a6151698..f5a59bdf49 100644 --- a/openapi.json +++ b/openapi.json @@ -106,6 +106,8 @@ "subject", "issuer", "extensions", + "serialNumber", + "serialNumberHex", "validate" ], "properties": { @@ -121,6 +123,12 @@ "extensions": { "type": "string" }, + "serialNumber": { + "type": "string" + }, + "serialNumberHex": { + "type": "string" + }, "validate": { "type": "object", "required": [ diff --git a/src/types/openapi/openapi-full.ts b/src/types/openapi/openapi-full.ts index b0a437570f..45adf0b189 100644 --- a/src/types/openapi/openapi-full.ts +++ b/src/types/openapi/openapi-full.ts @@ -1293,6 +1293,8 @@ export type components = { subject: string; issuer: string; extensions: string; + serialNumber: string; + serialNumberHex: string; validate: { from: string; to: string; diff --git a/src/types/openapi/openapi.ts b/src/types/openapi/openapi.ts index dc3ba6feab..d72505e73c 100644 --- a/src/types/openapi/openapi.ts +++ b/src/types/openapi/openapi.ts @@ -980,6 +980,8 @@ export type components = { subject: string; issuer: string; extensions: string; + serialNumber: string; + serialNumberHex: string; validate: { from: string; to: string; diff --git a/src/views/ReadCertificate/CertificateContent.vue b/src/views/ReadCertificate/CertificateContent.vue index f9884d4fa3..45eae2524c 100644 --- a/src/views/ReadCertificate/CertificateContent.vue +++ b/src/views/ReadCertificate/CertificateContent.vue @@ -67,6 +67,10 @@ {{ t('libresign', 'Serial number') }} {{ certificate.serialNumber }} +