在被击中之前,我执行了以下步骤
1)我使用
获得了服务器的证书 s_client -connect hostname.org:443 -showcerts
证书看起来不错
-----BEGIN CERTIFICATE-----
MIIICTCCBvGgAwIBAgIQA8mdxgOCgSdtPdwJY/c3FzANBgkqhkiG9w0BAQsFADBk
MQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJ
and so on
-----END CERTIFICATE-----
2)我将其另存为myCert.pem文件。(不确定是否应将其另存为.cer文件)
3)我使用
提取了PEM格式的公钥,形成了上面保存的证书文件。openssl x509 -pubkey -noout -in myCert.pem > pubkey.pem
PEM格式的公钥也看起来不错
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwFQpwmpIDxhGeuKGxn1a
oWOytrvD5m6dQLv9EUEWkCZPNr48su3G2vGxWtUNNU5kA8lYxGo4kqo1R2J8nM6I
CXANY3tO6/j82AueiK93qTTFdJVDTjtYUd8CI9frzxQ+XyJvBeIj3l0tNLsND4HD
hSV+dteikKGiAwXOR0SA4pUyMCNuO1xqyK0YI2eZvQCOLpXd1DMyV7bmPUJINvwV
nT3iweeaBiX6HHXbSb/zHvAQZzOti939D/NTbLbJwSBYxnUR9uBR/JtcfZaoSjEa
1QHCIPgLJ2oQT/udCdb66IHEZfrjNHArQC3prXvuV25S043VlqssdVQnSz0bV+Tk
+CK3D2Ht42QKewVx6/uFzuf0btkMvhxvY6zLmM4UhRDFhMKbewsI9tAV7tKBdwtc
qYSuFvRLFdJWx1WsUsHhMWE34AVYUu/ocAOsiTBtsLfLR0OPNB05RZI7x6XJL3XV
PCnkIw4nfHf8fqyXfBkqkSBlNVL26t+bVW9E3ksl9eqh4VxZl6XGLOy0jBc8/96E
iRJaydsutraiqevdAwvRkebj2SR0pXLwigZFXm1hPSrtI7cuytsfqNE4DNwD+yQw
d/iMyiPgxG0Mv9fmmpx8VHNNkchhrtDRIvZx6C11eaZ0Ng7Y4JCFtnAfL3XbBCXB
Y8y052YLhGd+lE4/J76bAokCAwEAAQ==
-----END PUBLIC KEY-----
现在,我正在尝试将此PEM格式的公共密钥解码为der格式。我该怎么办?
答案 0 :(得分:0)
PEM编码的文件是标头,页脚和base64编码的内容(对于证书,密钥和填充物,是BER / DER编码的数据)。
当OpenSSL写入数据时,它使用DER的约束(据我所知),因此对于OpenSSL写入的数据,您只需要对内容进行base64解码即可。 openssl base64 -d
会做到这一点(忽略PEM标头/页脚)
openssl base64 -d -in pubkey.key -out pubkey.der
如果您担心PEM内容是合法的BER但不是合法的DER(例如,它使用了不确定长度的构造值),则可以要求OpenSSL对其进行读写。
openssl rsa -pubin -in pubkey.key -outform der -out pubkey.der
或者以编程方式
FILE* fp = fopen("pubkey.key", "r");
EVP_PKEY* pkey = PEM_read_PUBKEY(fp, NULL, NULL, NULL);
fclose(fp);
fp = fopen("pubkey.der", "wb");
i2d_PUBKEY_fp(fp, pkey);
fclose(fp);
EVP_PKEY_free(pkey);
(可选)具有错误检查功能。