如果我有一個0123ssopenssl提供了我,那麼找出RSA公鑰的位的最佳方法是什麼?證書?我無法弄清楚這一點。我敢肯定,如果我在SSL證書驗證回調的時候,我可以得到X509 PTR與Openssl如何找出在X509證書中公鑰的位大小是多少
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上segfaults。 BIGNUM'n'似乎不是有效的 - 其中的數據ptr有一個垃圾指針。
任何想法有什麼不對?
只是一個想法:你可以使用'EVP_PKEY_get1_RSA'然後'RSA_size' ?您可能還想檢查是否需要'RSA_free'。你也可以嘗試使用OpensSL郵件列表 - 可能是一個bug ... – 2014-12-06 11:28:42
也許一個失敗代碼的副本會很好....你說你假裝做什麼,但不是你實際上在做什麼。 – 2014-12-08 09:52:58
@owlstead:看起來這是做這件事的正確方法。作爲回答發佈,我會相應地標記它。 – 2014-12-09 00:07:14