为什么phpseclib会产生不兼容的证书?

为什么phpseclib会产生不兼容的证书?,php,c++,c,openssl,phpseclib,Php,C++,C,Openssl,Phpseclib,为什么当我尝试使用从phpseclib生成的证书/密钥对时,OpenSSL服务器代码会出错?从OpenSSL生成的证书/密钥工作正常。我该如何解决这个问题 直接从以下位置生成证书/密钥: Phpseclib要求您调用$x509->setSerialNumber(“0”),否则它将生成无效的证书。据我对X.509规范的理解,这是一个技术上有效的证书,但许多实现都会在X.509规范的基础上增加额外的约束。例如,如果您在phpseclib.cer-noout-text中执行了openssl x509

为什么当我尝试使用从phpseclib生成的证书/密钥对时,OpenSSL服务器代码会出错?从OpenSSL生成的证书/密钥工作正常。我该如何解决这个问题

直接从以下位置生成证书/密钥:



Phpseclib要求您调用
$x509->setSerialNumber(“0”)
,否则它将生成无效的证书。

据我对X.509规范的理解,这是一个技术上有效的证书,但许多实现都会在X.509规范的基础上增加额外的约束。例如,如果您在phpseclib.cer-noout-text中执行了
openssl x509,则即使服务器不接受证书,它也会解析证书。@neubert在这种情况下不是这样,因为phpseclib仍然有一个序列号字段,但其大小为0,这在BER编码中是非法的
<?php
include('File/X509.php');
include('Crypt/RSA.php');

// create private key / x.509 cert for stunnel / website
$privKey = new Crypt_RSA();
extract($privKey->createKey());
$privKey->loadKey($privatekey);

$pubKey = new Crypt_RSA();
$pubKey->loadKey($publickey);
$pubKey->setPublicKey();

$subject = new File_X509();
$subject->setDNProp('id-at-organizationName', 'phpseclib demo cert');
//$subject->removeDNProp('id-at-organizationName');
$subject->setPublicKey($pubKey);

$issuer = new File_X509();
$issuer->setPrivateKey($privKey);
$issuer->setDN($subject->getDN());

$x509 = new File_X509();
//$x509->setStartDate('-1 month'); // default: now
//$x509->setEndDate('+1 year'); // default: +1 year

$result = $x509->sign($issuer, $subject);
echo "the stunnel.pem contents are as follows:\r\n\r\n";
echo $privKey->getPrivateKey();
echo "\r\n";
echo $x509->saveX509($result);
echo "\r\n";
?>