Как создать цифровой сертификат и экспортировать в файл .p12 в PHP?

Как создать цифровой сертификат и экспортировать в файл .p12 в PHP?

Я хочу, чтобы файл .p12 содержал закрытый ключ. А также хотите проверить, уже ли выпущена пара ключей (зарегистрирована в базе данных).

Я нашел функцию под названием «openssl_pkcs12_export_to_file», но не знаю, с чего начать. Кажется, мне сначала нужен сертификат X509 и закрытый ключ.

    <?php error_reporting(-1); function dump($Var) { echo "<hr/><pre>"; var_dump($Var); echo "</pre><hr/>"; } function check_errors() { echo "<hr/><pre>"; $Count = 0; while (($e=openssl_error_string())!==false) { echo $e."<br>"; $Count++; } if ($Count==0) echo "No error"; echo "</pre><hr/>"; } $Configs = array( "config" => "e:/progetti/php/openssl/openssl.cfg", "digest_alg" => "sha1", "x509_extensions" => "v3_ca", "req_extensions" => "v3_req", "private_key_bits" => 1024, "private_key_type" => OPENSSL_KEYTYPE_RSA, "encrypt_key" => true, "encrypt_key_cipher" => OPENSSL_CIPHER_3DES ); $Info = array( "countryName" => "VN", "stateOrProvinceName" => "Hanoi", "localityName" => "Long Bien", "organizationName" => "Test Company", "organizationalUnitName" => "Test Department", "commonName" => "Tester", "emailAddress" => "test@gmail.com" ); $Private_Key = null; $Unsigned_Cert = openssl_csr_new($Info,$Private_Key,$Configs); check_errors(); dump($Private_Key); dump($Unsigned_Cert); $Signed_Cert = openssl_csr_sign($Unsigned_Cert,null,$Private_Key,365,$Configs); check_errors(); dump($Signed_Cert); openssl_pkcs12_export_to_file($Signed_Cert,"test.p12",$Private_Key,"123456"); check_errors(); 

    Создание самоподписанного сертификата:

     <?php $dn = array( "countryName" => "UK", "stateOrProvinceName" => "Somerset", "localityName" => "Glastonbury", "organizationName" => "The Brain Room Limited", "organizationalUnitName" => "PHP Documentation Team", "commonName" => "Wez Furlong", "emailAddress" => "wez@example.com" ); $privkey = openssl_pkey_new(); $csr = openssl_csr_new($dn, $privkey); $sscert = openssl_csr_sign($csr, null, $privkey, 365); openssl_csr_export($csr, $csrout) and var_dump($csrout); openssl_x509_export($sscert, $certout) and var_dump($certout); openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout); // Show any errors that occurred here while (($e = openssl_error_string()) !== false) { echo $e . "\n"; } ?>