Initial version.
This commit is contained in:
118
src/nxt_polarssl.c
Normal file
118
src/nxt_polarssl.c
Normal file
@@ -0,0 +1,118 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) NGINX, Inc.
|
||||
* Copyright (C) Igor Sysoev
|
||||
*/
|
||||
|
||||
#include <nxt_main.h>
|
||||
#include <polarssl/config.h>
|
||||
#include <polarssl/ssl.h>
|
||||
#include <polarssl/x509.h>
|
||||
#include <polarssl/error.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
ssl_context ssl;
|
||||
x509_cert certificate;
|
||||
rsa_context key;
|
||||
} nxt_polarssl_ctx_t;
|
||||
|
||||
|
||||
static nxt_int_t nxt_polarssl_server_init(nxt_ssltls_conf_t *conf);
|
||||
static void nxt_polarssl_conn_init(nxt_thread_t *thr, nxt_ssltls_conf_t *conf,
|
||||
nxt_event_conn_t *c);
|
||||
static void nxt_polarssl_log_error(nxt_uint_t level, nxt_log_t *log, int err,
|
||||
const char *fmt, ...);
|
||||
|
||||
|
||||
nxt_ssltls_lib_t nxt_polarssl_lib = {
|
||||
nxt_polarssl_server_init,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
||||
static nxt_int_t
|
||||
nxt_polarssl_server_init(nxt_ssltls_conf_t *conf)
|
||||
{
|
||||
int n;
|
||||
nxt_thread_t *thr;
|
||||
nxt_polarssl_ctx_t *ctx;
|
||||
|
||||
thr = nxt_thread();
|
||||
|
||||
/* TODO: mem_pool */
|
||||
|
||||
ctx = nxt_zalloc(sizeof(nxt_polarssl_ctx_t));
|
||||
if (ctx == NULL) {
|
||||
return NXT_ERROR;
|
||||
}
|
||||
|
||||
n = ssl_init(&ctx->ssl);
|
||||
if (n != 0) {
|
||||
nxt_polarssl_log_error(NXT_LOG_CRIT, thr->log, n, "ssl_init() failed");
|
||||
return NXT_ERROR;
|
||||
}
|
||||
|
||||
ssl_set_endpoint(&ctx->ssl, SSL_IS_SERVER );
|
||||
|
||||
conf->ctx = ctx;
|
||||
conf->conn_init = nxt_polarssl_conn_init;
|
||||
|
||||
n = x509parse_crtfile(&ctx->certificate, conf->certificate);
|
||||
if (n != 0) {
|
||||
nxt_polarssl_log_error(NXT_LOG_CRIT, thr->log, n,
|
||||
"x509parse_crt(\"%V\") failed",
|
||||
&conf->certificate);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
rsa_init(&ctx->key, RSA_PKCS_V15, 0);
|
||||
|
||||
n = x509parse_keyfile(&ctx->key, conf->certificate_key, NULL);
|
||||
if (n != 0) {
|
||||
nxt_polarssl_log_error(NXT_LOG_CRIT, thr->log, n,
|
||||
"x509parse_key(\"%V\") failed",
|
||||
&conf->certificate_key);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ssl_set_own_cert(&ctx->ssl, &ctx->certificate, &ctx->key);
|
||||
|
||||
/* TODO: ciphers */
|
||||
|
||||
/* TODO: ca_certificate */
|
||||
|
||||
return NXT_OK;
|
||||
|
||||
fail:
|
||||
|
||||
return NXT_ERROR;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
nxt_polarssl_conn_init(nxt_thread_t *thr, nxt_ssltls_conf_t *conf,
|
||||
nxt_event_conn_t *c)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
nxt_polarssl_log_error(nxt_uint_t level, nxt_log_t *log, int err,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
u_char *p, *end, msg[NXT_MAX_ERROR_STR];
|
||||
|
||||
end = msg + NXT_MAX_ERROR_STR;
|
||||
|
||||
va_start(args, fmt);
|
||||
p = nxt_vsprintf(msg, end, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
p = nxt_sprintf(p, end, " (%d: ", err);
|
||||
|
||||
error_strerror(err, (char *) msg, p - msg);
|
||||
|
||||
nxt_log_error(level, log, "%*s)", p - msg, msg);
|
||||
}
|
||||
Reference in New Issue
Block a user