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

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有一个垃圾指针.

知道什么是错的吗?

Han*_* Z. 7

如前所述,要获得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)

  • 不要忘记通过callint```RSA_free```释放````RSA*```! (2认同)