Ssl:匹配私钥与证书|使用PHP &phpseclib


ssl: match private key with certificat | using php & phpseclib

情况:我有一个server-admin-panel,用户应该能够上传私钥/证书/ca-certificate (/CSR)用于SSL网站保护。

上传的数据看起来像这样:

私钥=

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

证书

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

问题:上传后,我需要检查,如果cert/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不是一个选项)

非常非常感谢!

像这样的东西能奏效吗?:

$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";
}