使用 phpseclib 在生成的证书上添加扩展密钥用法扩展


Add extended keyusage extensions on generated certificatees with phpseclib

我可以使用以下代码使用 phpseclib 添加密钥用法:

$x509->setExtension('id-ce-keyUsage', array('digitalSignature', 'keyEncipherment'));

是否还可以设置扩展密钥用法?有这方面的文档吗?

$x509->setExtension('id-ce-extKeyUsage', array('id-kp-serverAuth', 'id-kp-clientAuth'));

完整示例:

<?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->setPublicKey($pubKey);
$issuer = new File_X509();
$issuer->setPrivateKey($privKey);
$issuer->setDN($subject->getDN());
$x509 = new File_X509();
$x509->loadX509($x509->saveX509($x509->sign($issuer, $subject)));
$x509->setExtension('id-ce-keyUsage', array('digitalSignature', 'keyEncipherment'));
$x509->setExtension('id-ce-extKeyUsage', array('id-kp-serverAuth', 'id-kp-clientAuth'));
$result = $x509->sign($issuer, $x509);
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";

我不能说我喜欢你必须重新签署证书才能获得这种效果,但无论如何。