C++语言基于openssl生成自签名证书
时间: 2023-10-03 16:02:23 浏览: 184
以下是基于 OpenSSL 库生成自签名证书的 C++ 代码示例:
```c++
#include <iostream>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/x509.h>
#include <openssl/x509v3.h>
int main() {
// 初始化 OpenSSL 库
OpenSSL_add_all_algorithms();
ERR_load_BIO_strings();
ERR_load_crypto_strings();
// 创建 RSA 密钥对
RSA *rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);
EVP_PKEY *pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
// 创建证书请求
X509_REQ *req = X509_REQ_new();
X509_REQ_set_version(req, 0L);
X509_REQ_set_pubkey(req, pkey);
// 设置证书请求的主题信息
X509_NAME *name = X509_NAME_new();
X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_ASC, (unsigned char*)"example.com", -1, -1, 0);
X509_REQ_set_subject_name(req, name);
// 签名证书请求,生成证书
X509 *cert = X509_new();
X509_set_version(cert, 2L);
ASN1_INTEGER_set(X509_get_serialNumber(cert), 1);
X509_gmtime_adj(X509_get_notBefore(cert), 0);
X509_gmtime_adj(X509_get_notAfter(cert), 31536000L);
X509_set_subject_name(cert, X509_REQ_get_subject_name(req));
X509_set_pubkey(cert, X509_REQ_get_pubkey(req));
X509_set_issuer_name(cert, X509_get_subject_name(cert));
X509_sign(cert, pkey, EVP_sha256());
// 将证书写入文件
BIO *bio_cert = BIO_new_file("example.crt", "w");
PEM_write_bio_X509(bio_cert, cert);
// 将私钥写入文件
BIO *bio_key = BIO_new_file("example.key", "w");
PEM_write_bio_PrivateKey(bio_key, pkey, NULL, NULL, 0, NULL, NULL);
// 释放资源
X509_REQ_free(req);
X509_free(cert);
EVP_PKEY_free(pkey);
X509_NAME_free(name);
BIO_free_all(bio_cert);
BIO_free_all(bio_key);
return 0;
}
```
这段代码将生成一个自签名的证书,并将其保存到 example.crt 文件中,同时将私钥保存到 example.key 文件中。你可以按照自己的需求修改代码中的证书主题、有效期等信息。
阅读全文