~vcs-imports-ii/znc/master

« back to all changes in this revision

Viewing changes to Utils.cpp

  • Committer: imaginos
  • Date: 2005-10-09 06:57:29 UTC
  • Revision ID: git-v1:0955474bec315f2772e33a8380f62b9e83c23ff5
rewrite GenerateCert to work with browsers, some code reorganization with a different approach


git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@545 726aef4b-f618-498e-8847-2d620e286838

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
 
43
43
#ifdef HAVE_LIBSSL
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);
47
 
 
48
 
        X509_REQ *pReq = X509_REQ_new();
49
 
        EVP_PKEY *pKey = EVP_PKEY_new();
50
 
        X509_NAME *pName = X509_NAME_new();
51
 
 
52
 
        EVP_PKEY_assign(pKey, EVP_PKEY_RSA, (char *)pRSA);
53
 
        X509_REQ_set_pubkey(pReq, pKey);
54
 
 
55
 
        char *pLogName = getenv("LOGNAME");
56
 
        char *pHostName = getenv("HOSTNAME");
57
 
 
58
 
        if (!pLogName) {
59
 
                pLogName = "Unknown";
60
 
        }
61
 
 
62
 
        if (!pHostName) {
63
 
                pHostName = "unknown.com";
64
 
        }
65
 
 
66
 
        CString sEmailAddr = pLogName;
67
 
        sEmailAddr += "@";
68
 
        sEmailAddr += pHostName;
69
 
 
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());
79
 
 
80
 
        X509 *pX509 = X509_REQ_to_X509(pReq, 365, pKey);
81
 
        if (pX509) {
82
 
                PEM_write_X509(pOut, pX509);
83
 
                X509_free(pX509);
84
 
        }
85
 
 
86
 
        X509_REQ_free(pReq);
87
 
        EVP_PKEY_free(pKey);
 
45
        EVP_PKEY *pKey = NULL;
 
46
        X509 *pCert = NULL;
 
47
        X509_NAME *pName = NULL;
 
48
        int serial = 0, days = 365;
 
49
 
 
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 );
 
54
                        return;
 
55
                }
 
56
 
 
57
                PEM_write_RSAPrivateKey( pOut, pRSA, (bEncPrivKey ? EVP_des_ede3_cbc() : NULL), NULL, 0, NULL, NULL);
 
58
 
 
59
                if( !( pCert = X509_new() ) ) {
 
60
                    EVP_PKEY_free( pKey );
 
61
                        return;
 
62
                }
 
63
 
 
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 );
 
69
                
 
70
                pName = X509_get_subject_name( pCert );
 
71
 
 
72
                char *pLogName = getenv("LOGNAME");
 
73
                char *pHostName = getenv("HOSTNAME");
 
74
 
 
75
                if (!pLogName) {
 
76
                        pLogName = "Unknown";
 
77
                }
 
78
 
 
79
                if (!pHostName) {
 
80
                        pHostName = "unknown.com";
 
81
                }
 
82
 
 
83
                CString sEmailAddr = pLogName;
 
84
                sEmailAddr += "@";
 
85
                sEmailAddr += pHostName;
 
86
 
 
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);
 
94
 
 
95
                X509_set_subject_name( pCert, pName );
 
96
 
 
97
                if ( !X509_sign( pCert, pKey, EVP_md5() ) ) {
 
98
                    X509_free( pCert );
 
99
                    EVP_PKEY_free( pKey );
 
100
                        return;
 
101
                }
 
102
 
 
103
                PEM_write_X509( pOut, pCert );
 
104
                X509_free( pCert );
 
105
                EVP_PKEY_free( pKey );
 
106
        }
88
107
};
89
108
#endif /* HAVE_LIBSSL */
90
109