Openssl如何找出X509证书中公钥的位大小

时间:2014-12-06 01:40:35

标签: c ssl openssl rsa x509

如果我有openssl提供给我的X509*,那么找出证书中RSA公钥位的最佳方法是什么?我无法解决这个问题。我非常确定如果我在SSL证书验证回调中,我可以使用

获取X509 ptr
X509 * cert = X509_STORE_CTX_get_current_cert(the_x509_store_ctx);

我猜测我会得到像这样的公钥

EVP_PKEY *public_key = X509_get_pubkey(cert);

然后我需要检查它是否是RSA,大概是?

if (public_key && (EVP_PKEY_RSA == public_key->type))

一旦我知道我收回了公钥并且它是RSA,我就是这样做的:

int key_length = BN_num_bits(public_key->pkey.rsa->n);

但我发现虽然这在openssl 0.9.8上非常好用,但在1.0.1h它在Windows上是段错误。 BIGNUM&​​#39; n'似乎没有效果 - 它中的数据ptr有一个垃圾指针。

知道什么是错的吗?

1 个答案:

答案 0 :(得分:7)

正如已经建议的那样,要获得RSA模数大小(以字节为单位)(不是#34;位大小" ...),请使用:

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);