2013-06-28 2 views
0

Почему, когда я пытаюсь использовать пару сертификатов/ключей, сгенерированную из phpseclib, код сервера OpenSSL ошибочен? Сертификаты/ключи, созданные OpenSSL, работают нормально. Как это исправить?Почему phpseclib производит несовместимые сертификаты?

Сертификат/Генерация ключа, взятая прямо из phpseclib documentation:

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

ответ

0

Phpseclib требует вызвать $x509->setSerialNumber("0") в противном случае он будет производить недопустимый сертификат.

+0

Из того, что я понимаю в спецификациях X.509, это технический сертификат, но множество реализаций добавляют дополнительные ограничения выше и выше, чем говорят спецификации X.509. Например, если вы выполняете 'openssl x509 -in phpseclib.cer -noout -text', он будет анализировать сертификат, даже если сервер его не примет. – neubert

+0

@neubert не в этом случае, потому что phpseclib все еще имеет поле серийного номера, но имеет размер 0, который является незаконным в кодировании BER – chacham15

 Смежные вопросы

  • Нет связанных вопросов^_^