44
44
void CUtils::GenerateCert(FILE *pOut, bool bEncPrivKey) {
45
RSA *pRSA = RSA_generate_key(1024, 17, NULL, NULL);
46
PEM_write_RSAPrivateKey(pOut, pRSA, (bEncPrivKey ? EVP_des_ede3_cbc() : NULL), NULL, 0, NULL, NULL);
48
X509_REQ *pReq = X509_REQ_new();
49
EVP_PKEY *pKey = EVP_PKEY_new();
50
X509_NAME *pName = X509_NAME_new();
52
EVP_PKEY_assign(pKey, EVP_PKEY_RSA, (char *)pRSA);
53
X509_REQ_set_pubkey(pReq, pKey);
55
char *pLogName = getenv("LOGNAME");
56
char *pHostName = getenv("HOSTNAME");
63
pHostName = "unknown.com";
66
CString sEmailAddr = pLogName;
68
sEmailAddr += pHostName;
70
X509_NAME_add_entry_by_txt(pName, "C", MBSTRING_ASC, (unsigned char *)"SomeCountry", -1, -1, 0);
71
X509_NAME_add_entry_by_txt(pName, "ST", MBSTRING_ASC, (unsigned char *)"SomeState", -1, -1, 0);
72
X509_NAME_add_entry_by_txt(pName, "L", MBSTRING_ASC, (unsigned char *)"SomeCity", -1, -1, 0);
73
X509_NAME_add_entry_by_txt(pName, "O", MBSTRING_ASC, (unsigned char *)"SomeCompany", -1, -1, 0);
74
X509_NAME_add_entry_by_txt(pName, "OU", MBSTRING_ASC, (unsigned char *)pLogName, -1, -1, 0);
75
X509_NAME_add_entry_by_txt(pName, "CN", MBSTRING_ASC, (unsigned char *)pHostName, -1, -1, 0);
76
X509_NAME_add_entry_by_txt(pName, "emailAddress", MBSTRING_ASC, (unsigned char *)sEmailAddr.c_str(), -1, -1, 0);
77
X509_REQ_set_subject_name(pReq, pName);
78
X509_REQ_sign(pReq, pKey, EVP_md5());
80
X509 *pX509 = X509_REQ_to_X509(pReq, 365, pKey);
82
PEM_write_X509(pOut, pX509);
45
EVP_PKEY *pKey = NULL;
47
X509_NAME *pName = NULL;
48
int serial = 0, days = 365;
50
RSA *pRSA = RSA_generate_key(1024, 0x10001, NULL, NULL);
51
if( ( pKey = EVP_PKEY_new() ) ) {
52
if ( !EVP_PKEY_assign_RSA( pKey, pRSA ) ) {
53
EVP_PKEY_free( pKey );
57
PEM_write_RSAPrivateKey( pOut, pRSA, (bEncPrivKey ? EVP_des_ede3_cbc() : NULL), NULL, 0, NULL, NULL);
59
if( !( pCert = X509_new() ) ) {
60
EVP_PKEY_free( pKey );
64
X509_set_version( pCert, 2 );
65
ASN1_INTEGER_set( X509_get_serialNumber( pCert ), serial );
66
X509_gmtime_adj( X509_get_notBefore( pCert ), 0 );
67
X509_gmtime_adj( X509_get_notAfter( pCert ), (long)60*60*24*days );
68
X509_set_pubkey( pCert, pKey );
70
pName = X509_get_subject_name( pCert );
72
char *pLogName = getenv("LOGNAME");
73
char *pHostName = getenv("HOSTNAME");
80
pHostName = "unknown.com";
83
CString sEmailAddr = pLogName;
85
sEmailAddr += pHostName;
87
X509_NAME_add_entry_by_txt( pName, "C", MBSTRING_ASC, (unsigned char *)"US", -1, -1, 0);
88
X509_NAME_add_entry_by_txt( pName, "ST", MBSTRING_ASC, (unsigned char *)"SomeState", -1, -1, 0);
89
X509_NAME_add_entry_by_txt( pName, "L", MBSTRING_ASC, (unsigned char *)"SomeCity", -1, -1, 0);
90
X509_NAME_add_entry_by_txt( pName, "O", MBSTRING_ASC, (unsigned char *)"SomeCompany", -1, -1, 0);
91
X509_NAME_add_entry_by_txt( pName, "OU", MBSTRING_ASC, (unsigned char *)pLogName, -1, -1, 0);
92
X509_NAME_add_entry_by_txt( pName, "CN", MBSTRING_ASC, (unsigned char *)pHostName, -1, -1, 0);
93
X509_NAME_add_entry_by_txt( pName, "emailAddress", MBSTRING_ASC, (unsigned char *)sEmailAddr.c_str(), -1, -1, 0);
95
X509_set_subject_name( pCert, pName );
97
if ( !X509_sign( pCert, pKey, EVP_md5() ) ) {
99
EVP_PKEY_free( pKey );
103
PEM_write_X509( pOut, pCert );
105
EVP_PKEY_free( pKey );
89
108
#endif /* HAVE_LIBSSL */