OpenSSL 3.0中替代旧函数从RSA密钥PEM创建EVP_PKEY的方法
OpenSSL 3.0+ 从PEM格式RSA密钥生成EVP_PKEY的替代方案
在将OpenSSL v1.1.1客户端代码移植到3.0及以上版本时,原代码依赖的PEM_read_bio_RSAPrivateKey/PEM_read_bio_RSAPublicKey和EVP_PKEY_assignRSA函数已被弃用,可通过以下统一接口实现相同功能:
OpenSSL 3.0引入了统一的密钥加载接口,无需手动处理RSA结构体,直接从PEM内容生成EVP_PKEY,同时兼容新的提供者架构。
加载PEM格式RSA私钥
#include <openssl/pem.h> #include <openssl/evp.h> EVP_PKEY* load_rsa_private_key(BIO *bio) { // 直接从BIO加载PEM私钥为EVP_PKEY EVP_PKEY *pkey = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL); // 可选:验证加载的密钥是否为RSA类型 if (pkey != NULL && EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA) { EVP_PKEY_free(pkey); return NULL; } return pkey; }
加载PEM格式RSA公钥
EVP_PKEY* load_rsa_public_key(BIO *bio) { // 直接从BIO加载PEM公钥为EVP_PKEY EVP_PKEY *pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL); // 可选:验证加载的密钥是否为RSA类型 if (pkey != NULL && EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA) { EVP_PKEY_free(pkey); return NULL; } return pkey; }
关键说明
PEM_read_bio_PrivateKey和PEM_read_bio_PUBKEY会自动识别PEM中的密钥类型,无需指定算法,符合OpenSSL 3.0的抽象密钥设计。- 生成的
EVP_PKEY可直接用于加密、签名、验签等所有EVP层操作,与旧版代码的使用逻辑完全兼容。 - 使用完毕后必须调用
EVP_PKEY_free()释放密钥资源,避免内存泄漏。
内容的提问来源于stack exchange,提问作者shonji
相关产品推荐
相关产品推荐

