ssl: сопоставьте закрытый ключ с сертификатом | используя php и phpseclib

ситуация: у меня есть сервер-админ-панель, где пользователь должен иметь возможность загрузить приватный ключ/сертификат/ca-сертификат (/CSR) для SSL-защиты сайта.

Загружаемые данные будут выглядеть так:

закрытый ключ =

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA3u+SI24XGAqIHNLcmCfEFOpMVAOEZOw3DpZ7VexB6soLiu0a
[...]
M9YQw2MV/EhNXTh7PW85HJKAZyTxLJvWIXbEeY9XX+GkqJuQ1GhfgfE=
-----END RSA PRIVATE KEY-----

сертификат =

-----BEGIN CERTIFICATE-----
MIIDfjCCAmigAwIBAgIEU6fNGzALBgkqhkiG9w0BAQUwgYExCzAJBgNVBAYMAkRF
[...]
oosSAukE596+wwM0XXDFOT2T/D0lHvW1QVyFx0GzCRHWqQ==
-----END CERTIFICATE-----

проблема: после загрузки мне нужно проверить, соответствует ли сертификат / ca-cert закрытому ключу ( / CSR), чтобы убедиться, что все загруженные части принадлежат друг другу.


я думаю, что я застрял. С openssl я мог бы проверить, совпадают ли выходные данные следующей команды друг с другом. Но я не знаю, как это сделать с помощью phpseclib.

openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privateKey.key | openssl md5
openssl req -noout -modulus -in CSR.csr | openssl md5

(я хотел бы придерживаться phpseclib, поэтому openssl не вариант)

Огромное спасибо!


person Alex    schedule 23.06.2014    source источник


Ответы (1)


Что-то вроде этого делает трюк?:

$rsa = new Crypt_RSA();
$rsa->loadKey(...);
$pubkey1 = $rsa->getPublicKey();

$x509 = new File_X509();
$x509->loadX509(...);
$pubkey2 = $x509->getPublicKey();

$csr = new File_X509();
$csr->loadCSR(...);
$pubkey3 = $csr->getPublicKey();

if (($pubkey1 == $pubkey2) && ($pubkey2 == $pubkey3)) {
    echo "they're equal";
} else {
    echo "they're not equal";
}
person neubert    schedule 23.06.2014
comment
Вау, спасибо! Это работает, как и ожидалось. - Честно говоря, я не знаю, почему это, если (($pubkey1 == $pubkey2) ... работает. потому что $pubkey1 - это строка, а $pubkey2 - объект. - Я хотел бы знать, почему :). - Спасибо еще раз - person Alex; 24.06.2014
comment
Поскольку PHP является языком свободного преобразования, объект преобразуется в строку с помощью магической функции __toString, и сравнение выполняется по результату этого преобразования. - person neubert; 24.06.2014