繁体   English   中英

使用 c++ openssl 库创建 x509 链

[英]Create x509 chain with c++ openssl lib

我有 clientCA.key 和 clientCA.crt - 中间私钥和证书。 现在,我在命令行生成端点私钥和证书请求:

openssl req -new -nodes -newkey rsa:2048 -keyout clientEP.key -out clientEP.csr \ -subj "/C=CA/ST=AAA/L=BBB/O=CCC/OU=DDD/CN=EEE/emailAddress=m@m"

然后通过中间 CA 证书和密钥签名制作端点证书:

openssl x509 -req -CAkey clientCA.key -CA clientCA.crt -days 365 -in clientEP.csr -out clientEP.crt -set_serial 25 -extfile clientEP.cnf

生成 RSA 密钥和请求很容易: RSA_generate_key_ex(keys, 2048,e, NULL); X509_REQ_new();

但是我怎样才能获得由 clientCA.key 和 clientCA.crt 签名的请求,并将 clientEP.crt 与 C++ Openssl 库一起使用? 也许可以在没有请求的情况下从此文件生成端点证书?

Openssl 提供各种功能,您可以使用它们。 最好搜索更多或访问 openssl org。 并仔细阅读每个 function 的说明。

你可以像在 linux 上那样做(也许),

  1. 为最终实体证书创建 PrivateKey。
     EVP_PKEY *pkey = EVP_PKEY_new(void);

参见: https://www.openssl.org/docs/man1.1.0/man3/EVP_PKEY_new.html

  1. 创建一个 RSA 并将其设置为 PrivateKey
    RSA *rsa = RSA_generate_key(1024, 3, 0, 0);
    EVP_PKEY_set1_RSA(pkey, RSA *key);

另见https://www.openssl.org/docs/manmaster/man3/EVP_PKEY_set1_RSA.html

  1. 创建 X509
    X509 *cert = X509_new(void);
  1. 设置 pubkey(对应的 key 为之前制作的 privatekey)
    X509_set_pubkey(cert, pkey);
  1. 使用 cliendCA 的私钥对 clientEP 进行签名。
    X509_sign(cert, pkey, 0); // third param is a hashing option.
  1. 设置证书的特定配置文件。(我可能会错过一些特定步骤,但你可以做到)

当你更多地搜索它时,你可能会得到信息。 另外,openssl提供了写api如BIO_write或PEM_write_X509等。

我希望它会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM