Можно ли преобразовать открытый ключ rsa в открытый ключ x509?

У меня есть следующий открытый ключ:

-----BEGIN RSA PUBLIC KEY-----
... key ...
-----END RSA PUBLIC KEY-----

PHP не может работать с этим открытым ключом. Я обнаружил, что он должен быть в формате x509, чтобы его можно было использовать в php. Можно ли преобразовать этот ключ в формат x509? Как я понимаю, результат должен выглядеть так:

-----BEGIN PUBLIC KEY-----
... changed? key ...
-----END PUBLIC KEY-----

UPD: Именно нужно было сгенерировать сертификат x509, а не только публичный ключ.


person avasin    schedule 12.12.2013    source источник


Ответы (1)


phpseclib, чистая библиотека PHP RSA, прекрасно работает с ключами RSA этого формата.

Тем не менее, что касается openssl, вы правы — открытые ключи RSA должны быть инкапсулированы в сертификаты X.509 для работы с большинством функций openssl_*.

Из документации по совместимости phpseclib:

// openssl_get_publickey() only creates public key resources from X.509
// certificates hence our creating one
$dn = array();  // use defaults
$res_privkey = openssl_pkey_get_private($privkey);
$res_csr = openssl_csr_new($dn, $res_privkey);
$res_cert = openssl_csr_sign($res_csr, null, $res_privkey, 365);
openssl_x509_export($res_cert, $str_cert);
$res_pubkey = openssl_get_publickey($str_cert);

Тем не менее, результат должен выглядеть не так, как вы опубликовали, а примерно так:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
person neubert    schedule 12.12.2013
comment
ты прав. мне нужно сгенерировать сертификат x509, используя закрытый ключ, чтобы использовать его с функциями php openssl_*. - person avasin; 13.12.2013