|
|
|
@ -62,6 +62,7 @@ typedef struct {
|
|
|
|
|
unsigned short ssl_use_sslv2;
|
|
|
|
|
unsigned short ssl_use_sslv3;
|
|
|
|
|
buffer *ssl_pemfile;
|
|
|
|
|
buffer *ssl_privkey;
|
|
|
|
|
buffer *ssl_ca_file;
|
|
|
|
|
buffer *ssl_ca_crl_file;
|
|
|
|
|
buffer *ssl_ca_dn_file;
|
|
|
|
@ -134,6 +135,7 @@ FREE_FUNC(mod_openssl_free)
|
|
|
|
|
if (NULL == s) continue;
|
|
|
|
|
copy = s->ssl_enabled && buffer_string_is_empty(s->ssl_pemfile);
|
|
|
|
|
buffer_free(s->ssl_pemfile);
|
|
|
|
|
buffer_free(s->ssl_privkey);
|
|
|
|
|
buffer_free(s->ssl_ca_file);
|
|
|
|
|
buffer_free(s->ssl_ca_crl_file);
|
|
|
|
|
buffer_free(s->ssl_ca_dn_file);
|
|
|
|
@ -514,14 +516,16 @@ network_openssl_load_pemfile (server *srv, plugin_config *s, size_t ndx)
|
|
|
|
|
|
|
|
|
|
s->ssl_pemfile_x509 = x509_load_pem_file(srv, s->ssl_pemfile->ptr);
|
|
|
|
|
if (NULL == s->ssl_pemfile_x509) return -1;
|
|
|
|
|
s->ssl_pemfile_pkey = evp_pkey_load_pem_file(srv, s->ssl_pemfile->ptr);
|
|
|
|
|
s->ssl_pemfile_pkey = !buffer_string_is_empty(s->ssl_privkey)
|
|
|
|
|
? evp_pkey_load_pem_file(srv, s->ssl_privkey->ptr)
|
|
|
|
|
: evp_pkey_load_pem_file(srv, s->ssl_pemfile->ptr);
|
|
|
|
|
if (NULL == s->ssl_pemfile_pkey) return -1;
|
|
|
|
|
|
|
|
|
|
if (!X509_check_private_key(s->ssl_pemfile_x509, s->ssl_pemfile_pkey)) {
|
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "sssb", "SSL:",
|
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "sssbb", "SSL:",
|
|
|
|
|
"Private key does not match the certificate public key,"
|
|
|
|
|
" reason:", ERR_error_string(ERR_get_error(), NULL),
|
|
|
|
|
s->ssl_pemfile);
|
|
|
|
|
s->ssl_pemfile, s->ssl_privkey);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1126,18 +1130,18 @@ network_init_ssl (server *srv, void *p_d)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (1 != SSL_CTX_use_PrivateKey(s->ssl_ctx, s->ssl_pemfile_pkey)) {
|
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "ssb", "SSL:",
|
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "ssbb", "SSL:",
|
|
|
|
|
ERR_error_string(ERR_get_error(), NULL),
|
|
|
|
|
s->ssl_pemfile);
|
|
|
|
|
s->ssl_pemfile, s->ssl_privkey);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (SSL_CTX_check_private_key(s->ssl_ctx) != 1) {
|
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "sssb", "SSL:",
|
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "sssbb", "SSL:",
|
|
|
|
|
"Private key does not match the certificate public "
|
|
|
|
|
"key, reason:",
|
|
|
|
|
ERR_error_string(ERR_get_error(), NULL),
|
|
|
|
|
s->ssl_pemfile);
|
|
|
|
|
s->ssl_pemfile, s->ssl_privkey);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
SSL_CTX_set_default_read_ahead(s->ssl_ctx, s->ssl_read_ahead);
|
|
|
|
@ -1197,6 +1201,7 @@ SETDEFAULTS_FUNC(mod_openssl_set_defaults)
|
|
|
|
|
{ "ssl.ca-dn-file", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 19 */
|
|
|
|
|
{ "ssl.openssl.ssl-conf-cmd", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 20 */
|
|
|
|
|
{ "ssl.acme-tls-1", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 21 */
|
|
|
|
|
{ "ssl.privkey", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 22 */
|
|
|
|
|
{ NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -1210,6 +1215,7 @@ SETDEFAULTS_FUNC(mod_openssl_set_defaults)
|
|
|
|
|
|
|
|
|
|
s->ssl_enabled = 0;
|
|
|
|
|
s->ssl_pemfile = buffer_init();
|
|
|
|
|
s->ssl_privkey = buffer_init();
|
|
|
|
|
s->ssl_ca_file = buffer_init();
|
|
|
|
|
s->ssl_ca_crl_file = buffer_init();
|
|
|
|
|
s->ssl_ca_dn_file = buffer_init();
|
|
|
|
@ -1258,6 +1264,7 @@ SETDEFAULTS_FUNC(mod_openssl_set_defaults)
|
|
|
|
|
cv[19].destination = s->ssl_ca_dn_file;
|
|
|
|
|
cv[20].destination = s->ssl_conf_cmd;
|
|
|
|
|
cv[21].destination = s->ssl_acme_tls_1;
|
|
|
|
|
cv[22].destination = s->ssl_privkey;
|
|
|
|
|
|
|
|
|
|
p->config_storage[i] = s;
|
|
|
|
|
|
|
|
|
@ -1310,6 +1317,7 @@ mod_openssl_patch_connection (server *srv, connection *con, handler_ctx *hctx)
|
|
|
|
|
|
|
|
|
|
/*PATCH(ssl_enabled);*//*(not patched)*/
|
|
|
|
|
/*PATCH(ssl_pemfile);*//*(not patched)*/
|
|
|
|
|
/*PATCH(ssl_privkey);*//*(not patched)*/
|
|
|
|
|
PATCH(ssl_pemfile_x509);
|
|
|
|
|
PATCH(ssl_pemfile_pkey);
|
|
|
|
|
PATCH(ssl_ca_file);
|
|
|
|
@ -1350,6 +1358,7 @@ mod_openssl_patch_connection (server *srv, connection *con, handler_ctx *hctx)
|
|
|
|
|
|
|
|
|
|
if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.pemfile"))) {
|
|
|
|
|
/*PATCH(ssl_pemfile);*//*(not patched)*/
|
|
|
|
|
/*PATCH(ssl_privkey);*//*(not patched)*/
|
|
|
|
|
PATCH(ssl_pemfile_x509);
|
|
|
|
|
PATCH(ssl_pemfile_pkey);
|
|
|
|
|
} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.ca-file"))) {
|
|
|
|
|