Создать цепочку x509 с помощью c ++ openssl lib - PullRequest
1 голос
/ 28 апреля 2020

У меня есть 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? Может быть, можно генерировать сертификат Endpoint из этих файлов без запроса?

1 Ответ

0 голосов
/ 28 апреля 2020

Openssl предоставляет различные функции, и вы можете использовать их. Лучше искать больше или посетить openssl org. И внимательно прочитайте описание каждой функции.

Вы можете сделать то же, что и на linux (возможно),

  1. Создать PrivateKey для сертификата конечной сущности.
     EVP_PKEY *pkey = EVP_PKEY_new(void);

См .: https://www.openssl.org/docs/man1.1.0/man3/EVP_PKEY_new.html

Создайте 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

Создать X509
    X509 *cert = X509_new(void);
Установить pubkey (соответствующий ключ для сережки, сделанной приватным ключом)
    X509_set_pubkey(cert, pkey);
Сделайте подпись для clientEP, используя закрытый ключ cliendCA.
    X509_sign(cert, pkey, 0); // third param is a hashing option.
Установить указанный c профиль сертификата. (Я могу пропустить некоторые конкретные c шагов, но вы можете это сделать)

Вы можете получить информацию, когда будете больше гуглить. Кроме того, openssl предоставляет API для записи, такие как BIO_write или PEM_write_X509 и т. Д.

Надеюсь, это будет полезно.

...