Ted*_*ton 4 c ssl openssl rsa x509
如果我有一个X509*openssl提供给我的,那么在证书中找出RSA公钥的位数的最佳方法是什么?我无法弄清楚这一点.我很确定如果我在SSL证书验证回调中,我可以使用X509 ptr
X509 * cert = X509_STORE_CTX_get_current_cert(the_x509_store_ctx);
Run Code Online (Sandbox Code Playgroud)
我猜测我得到这样的公钥
EVP_PKEY *public_key = X509_get_pubkey(cert);
Run Code Online (Sandbox Code Playgroud)
然后我需要检查它是否是RSA,大概是?
if (public_key && (EVP_PKEY_RSA == public_key->type))
Run Code Online (Sandbox Code Playgroud)
一旦我知道我拿回公钥并且它是RSA,我想这样做:
int key_length = BN_num_bits(public_key->pkey.rsa->n);
Run Code Online (Sandbox Code Playgroud)
但我发现虽然这在openssl 0.9.8上非常好用,但在1.0.1h它在Windows上是段错误.BIGNUM'n'似乎没有效果 - 它中的数据ptr有一个垃圾指针.
知道什么是错的吗?
如前所述,要获得RSA模数大小(以字节为单位)(不是"位大小"......),请使用:
EVP_PKEY * public_key = X509_get_pubkey(cert);
RSA *rsa_key = EVP_PKEY_get1_RSA(public_key);
int key_length = RSA_size(rsa_key);
...
RSA_free(rsa_key);
Run Code Online (Sandbox Code Playgroud)