2011-12-01 5 views
3

디지털 인증서를 만들고 PHP에서 .p12 파일로 내보내는 방법은 무엇입니까?디지털 인증서를 만들고 PHP에서 .p12 파일로 내보내는 방법은 무엇입니까?

.p12 파일에 개인 키가 포함되기를 원합니다. 또한 키 쌍이 이미 발급되었는지 (데이터베이스에 로그인했는지) 확인하려고합니다.

'openssl_pkcs12_export_to_file'이라는 함수를 찾았지만 시작할 위치를 알 수 없습니다. X509 인증서와 개인 키가 먼저 필요합니다.

답변

3
<?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" => "[email protected]" 
); 

$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(); 
3

만들기 자체 서명 인증서 :

<?php 
$dn = array(
    "countryName" => "UK", 
    "stateOrProvinceName" => "Somerset", 
    "localityName" => "Glastonbury", 
    "organizationName" => "The Brain Room Limited", 
    "organizationalUnitName" => "PHP Documentation Team", 
    "commonName" => "Wez Furlong", 
    "emailAddress" => "[email protected]" 
); 

$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"; 
} 
?>