Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能用PHP从X509证书中获取公钥吗?_Php_Openssl_X509certificate_Public Key Encryption - Fatal编程技术网

为什么可以';我不能用PHP从X509证书中获取公钥吗?

为什么可以';我不能用PHP从X509证书中获取公钥吗?,php,openssl,x509certificate,public-key-encryption,Php,Openssl,X509certificate,Public Key Encryption,以下PHP代码打印出此警告: 警告:openssl_csr_get_public_key():第49行的/home/swissbtc/www/bitcoins.ch/index.php中提供的资源不是有效的openssl X.509 csr资源 代码: $Configs = array( 'digest_alg' => 'sha1', 'x509_extensions' => 'v3_ca', 'req_extension

以下PHP代码打印出此警告:

警告:openssl_csr_get_public_key():第49行的/home/swissbtc/www/bitcoins.ch/index.php中提供的资源不是有效的openssl X.509 csr资源

代码:

$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);
注意:第一个$publicKey(第49行)为空,第二个$publicKey(第53行)获取布尔值“false”

我的代码有什么问题吗?

这对我很有用:

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

这取决于密钥文件的内容。如何生成/从何处获取?密钥和证书都是在上面的代码中生成的。似乎您正在使用CSR(证书签名请求)导出$publicKey。我想从“真实”x509证书中导出。我想得到csr的文本版本。这怎么可能?