我正在编写一些PHP代码,使用phpseclib,其中包括允许用户提交私钥。作为其中的一部分,我想检查一个密钥是否已签名(根据rfc的vs 4,也称为Proc-Type:4,加密https://tools.ietf.org/html/rfc1421#section-4.6.1.1.1)。现在可以从查看phpseclib中的Crypt / RSA.php代码看到,它使用正则表达式在密钥数据中搜索上面的代码。我知道我可以抓住钥匙,找到那个标题,但我不希望我的剧本在未来必须跟上rfc的步伐。我假设它运行的任何一个盒子都会有当前的openssl。
那我怎么问openssl,什么' Proc-Type'关键是?目前我可以问很多未签名密钥的东西。或者我可以给它一个密码并询问签名密钥的相同内容,但我可以通过查看密钥文件来判断它是否使用3DES进行加密,因此需要密码。我如何让openssl告诉我这个?
到目前为止,我所做的最好的是: -
echo "\n" | openssl rsa -check -in keyfile -passin stdin
生成: -
unable to load Private Key
139743854057216:error:28069065:UI routines:UI_set_result:result too small:../crypto/ui/ui_lib.c:778:You must type in 4 to 1023 characters
139743854057216:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:535:
139743854057216:error:0906A065:PEM routines:PEM_do_header:bad decrypt:../crypto/pem/pem_lib.c:445:
然而,如果我只是对损坏的密钥运行相同的检查,我会得到一组不同的错误(不在UI例程中)。
但我的问题是,openssl错误代码是否比RSA密钥rfcs更有可能改变?
不确定是谁建议您只需检查-----BEGIN
部分内是否有任何标头,如果没有,则该密钥无效。但是它导致只是检查密钥中Proc-Type
行的想法应该给我一个指示,即密钥可能被签名(没有标题,意味着它没有签名)。这应该是未来的证明测试。没有标题,意味着没有签名。如果它没有标题并且检查失败,则它无效。如果它有标题,我会假设它需要密码。