Как создать сертификат X509 в PHP без закрытого ключа клиента? - PullRequest
1 голос
/ 05 октября 2011

У меня есть сервер, у которого есть собственный сертификат, и клиент, который пытается заставить сервер создать новый сертификат для него (и подписать его ofc).Клиент дал серверу свой открытый ключ, и сервер должен создать сертификат и подписать его.В PHP, как мне заставить сервер создать сертификат только с открытым ключом клиента?openssl_csr_new, кажется, хочет закрытый ключ.

Спасибо!

1 Ответ

3 голосов
/ 23 апреля 2012

вы можете сделать это с последним SVN phpseclib, чистым парсером PHP X.509 .например.

<?php
include('File/X509.php');
include('Crypt/RSA.php');

$privKey = new Crypt_RSA();
$privKey->loadKey('-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----');

$pubKey = new Crypt_RSA();
$pubKey->loadKey('-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----');
$pubKey->setPublicKey();

$subject = new File_X509();
$subject->setPublicKey($pubKey);
$subject->setDNProp('id-at-organizationName', 'whatever');

$issuer = new File_X509();
// load the DN from an existing X.509 cert
$issuer->loadX509('-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----');
$issuer->setPrivateKey($privKey);

$x509 = new File_X509();
$x509->setStartDate('-1 month');
$x509->setEndDate('+1 year');
$x509->setSerialNumber(1);

$result = $x509->sign($issuer, $subject);
echo $x509->saveX509($result);

Вам понадобится ваш личный ключ и открытый ключ субъекта.В этом примере я получаю DN выдачи из X.509, ранее подписанного вашим закрытым ключом, но вы можете вместо этого вызвать setDN ()?

...