1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

client: tls cert in mem

This commit is contained in:
Andy Green 2019-10-01 13:45:27 -07:00
parent 41b7716a52
commit eda6707a84
2 changed files with 43 additions and 14 deletions

View file

@ -418,7 +418,6 @@ lws_tls_client_create_vhost_context(struct lws_vhost *vh,
const char *private_key_filepath)
{
struct lws_tls_client_reuse *tcr;
const unsigned char *ca_mem_ptr;
X509_STORE *x509_store;
unsigned long error;
SSL_METHOD *method;
@ -625,23 +624,43 @@ lws_tls_client_create_vhost_context(struct lws_vhost *vh,
else
lwsl_info("loaded ssl_ca_filepath\n");
} else {
ca_mem_ptr = (const unsigned char*)ca_mem;
client_CA = d2i_X509(NULL, &ca_mem_ptr, ca_mem_len);
x509_store = X509_STORE_new();
if (!client_CA || !X509_STORE_add_cert(x509_store, client_CA)) {
X509_STORE_free(x509_store);
lwsl_err("Unable to load SSL Client certs from "
"ssl_ca_mem -- client ssl isn't going to "
"work\n");
lws_filepos_t amount = 0;
uint8_t *up1;
const uint8_t *up;
if (lws_tls_alloc_pem_to_der_file(vh->context, NULL, ca_mem,
ca_mem_len, &up1,
&amount)) {
lwsl_err("%s: Unable to decode x.509 mem\n", __func__);
lwsl_hexdump_notice(ca_mem, ca_mem_len);
return 1;
}
up = up1;
client_CA = d2i_X509(NULL, &up, amount);
if (!client_CA) {
lwsl_err("%s: d2i_X509 failed\n", __func__);
lwsl_hexdump_notice(up1, amount);
lws_tls_err_describe_clear();
} else {
/* it doesn't increment x509_store ref counter */
SSL_CTX_set_cert_store(vh->tls.ssl_client_ctx,
x509_store);
lwsl_info("loaded ssl_ca_mem\n");
x509_store = X509_STORE_new();
if (!X509_STORE_add_cert(x509_store, client_CA)) {
X509_STORE_free(x509_store);
lwsl_err("Unable to load SSL Client certs from "
"ssl_ca_mem -- client ssl isn't going to "
"work\n");
lws_tls_err_describe_clear();
} else {
/* it doesn't increment x509_store ref counter */
SSL_CTX_set_cert_store(vh->tls.ssl_client_ctx,
x509_store);
lwsl_info("loaded ssl_ca_mem\n");
}
}
if (client_CA)
X509_free(client_CA);
lws_free(up1);
// lws_tls_client_vhost_extra_cert_mem(vh, ca_mem, ca_mem_len);
}

View file

@ -206,6 +206,7 @@ int main(int argc, const char **argv)
struct lws_context *context;
struct args args;
int n = 0;
// uint8_t memcert[4096];
args.argc = argc;
args.argv = argv;
@ -239,7 +240,16 @@ int main(int argc, const char **argv)
*/
info.client_ssl_ca_filepath = "./warmcat.com.cer";
#endif
#if 0
n = open("./warmcat.com.cer", O_RDONLY);
if (n >= 0) {
info.client_ssl_ca_mem_len = read(n, memcert, sizeof(memcert));
info.client_ssl_ca_mem = memcert;
close(n);
n = 0;
memcert[info.client_ssl_ca_mem_len++] = '\0';
}
#endif
context = lws_create_context(&info);
if (!context) {
lwsl_err("lws init failed\n");