25 EVP_PKEY *pkey =
static_cast<EVP_PKEY *
>(
keyGenerator()->makeRawKeys());
27 ::X509 * x509 =
nullptr;
28 X509_NAME * name =
nullptr;
32 ASN1_INTEGER_set(X509_get_serialNumber(x509), 1);
33 X509_gmtime_adj(X509_get_notBefore(x509), 0);
34 X509_gmtime_adj(X509_get_notAfter(x509), certificateData.
endTime);
35 X509_set_pubkey(x509, pkey);
43 name = X509_NAME_new();
46 unsigned char *C =
reinterpret_cast<unsigned char *
>(certificateData.
country.toLatin1().data());
47 X509_NAME_add_entry_by_txt(name,
"C", MBSTRING_ASC, C, -1, -1, 0);
49 unsigned char *O =
reinterpret_cast<unsigned char *
>(certificateData.
organization.toLatin1().data());
50 X509_NAME_add_entry_by_txt(name,
"O", MBSTRING_ASC, O, -1, -1, 0);
52 unsigned char *CN =
reinterpret_cast<unsigned char *
>(certificateData.
commonName.toLatin1().data());
53 X509_NAME_add_entry_by_txt(name,
"CN", MBSTRING_ASC, CN, -1, -1, 0);
55 X509_set_subject_name(x509, name);
56 X509_set_issuer_name(x509, name);
58 X509_sign(x509, pkey, EVP_sha256());
61 if(result.
key.isNull()) {
64 qCritical(
"Failed to generate a random private key");
69 BIO * bp_public = BIO_new(BIO_s_mem());
70 q_check_ptr(bp_public);
71 if(PEM_write_bio_X509(bp_public, x509) != 1){
73 BIO_free_all(bp_public);
74 qCritical(
"PEM_write_bio_PrivateKey");
79 if(result.
crt.isNull()) {
81 BIO_free_all(bp_public);
82 qCritical(
"Failed to generate a random client certificate");
87 BIO_free_all(bp_public);