2012-03-07 3 views
2

다음 PHP 코드를 인쇄 :PHP에서 공개 키를 X509 인증서에서 가져올 수없는 이유는 무엇입니까? 이 경고 밖으로

경고 : openssl_csr_get_public_key() : 공급 자원이 /home/swissbtc/www/bitcoins.ch/index.php에 유효한 OpenSSL을 X.509 CSR 자원 아닙니다 줄에 49

코드 :

$Configs = array(  
     'digest_alg' => 'sha1', 
     'x509_extensions' => 'v3_ca', 
     'req_extensions' => 'v3_req', 
     'private_key_bits' => 2048, 
     'private_key_type' => OPENSSL_KEYTYPE_RSA, 
     'encrypt_key' => true, 
     'encrypt_key_cipher' => OPENSSL_CIPHER_3DES 
); 

//generate cert 
$dn  = array('commonName' => 'test'); 
$privkey = openssl_pkey_new($Configs); 
$csr  = openssl_csr_new($dn, $privkey, $Configs); 
$cert  = openssl_csr_sign($csr, null, $privkey, 365, $Configs); 

//try to get public key 
$publicKey = openssl_csr_get_public_key($cert); //line 49 

//try again to get the public key 
openssl_x509_export($cert, $certout); 
$publicKey = openssl_csr_get_public_key($certout); 

참고 : 첫 번째 $의 공개 키 (라인 49) EM입니다 pty이고 두 번째 $ publicKey (53 행)는 부울 값 "false"를 가져옵니다.

내 코드에 어떤 문제가 있습니까?

+0

그것은 당신의 키 파일의 내용에 따라 달라집니다. 어떻게 그것을 생성합니까/어디에서 가져 옵니까? – Raptor

+1

키와 인증서는 위의 코드에서 모두 생성됩니다. – Roland

답변

2

이 나를 위해 작동합니다

$Configs = array(  
    'digest_alg' => 'sha1', 
    'x509_extensions' => 'v3_ca', 
    'req_extensions' => 'v3_req', 
    'private_key_bits' => 2048, 
    'private_key_type' => OPENSSL_KEYTYPE_RSA, 
    'encrypt_key' => true, 
    'encrypt_key_cipher' => OPENSSL_CIPHER_3DES 
); 

//generate cert 
$dn  = array('commonName' => 'test'); 
$privkey = openssl_pkey_new($Configs); 
$csr  = openssl_csr_new($dn, $privkey, $Configs); 
$cert  = openssl_csr_sign($csr, null, $privkey, 365, $Configs); 
$publicKey = openssl_pkey_get_public($cert); 

var_dump($publicKey); 
+0

CSR (Certificate Signing Request)을 사용하여 $ publicKey를 내보내는 것 같습니다. "실제"x509 인증서에서 내보내기를 수행하려고합니다. – Roland

+1

답변을 – Martin

+0

업데이트했습니다. 완벽한 작품입니다! – Roland