summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2015-02-07 06:19:26 +0000
committerjsing <>2015-02-07 06:19:26 +0000
commit1a38ececbc4737bfb7996d4c0f879c9872e9930b (patch)
tree4574673a0c17d6f4e774e9685f9dde91409dc24b
parent4d71037d26a6de59efacc048b6d8eaef040cf31f (diff)
downloadopenbsd-1a38ececbc4737bfb7996d4c0f879c9872e9930b.tar.gz
openbsd-1a38ececbc4737bfb7996d4c0f879c9872e9930b.tar.bz2
openbsd-1a38ececbc4737bfb7996d4c0f879c9872e9930b.zip
Add tls_config_set_dheparams() to allow specification of the parameters to
use for DHE. This enables the use of DHE cipher suites. Rename tls_config_set_ecdhcurve() to tls_config_set_ecdhecurve() since it is only used to specify the curve for ephemeral ECDH. Discussed with reyk@
-rw-r--r--src/lib/libtls/Makefile5
-rw-r--r--src/lib/libtls/shlib_version4
-rw-r--r--src/lib/libtls/tls.h5
-rw-r--r--src/lib/libtls/tls_config.c30
-rw-r--r--src/lib/libtls/tls_init.311
-rw-r--r--src/lib/libtls/tls_internal.h5
-rw-r--r--src/lib/libtls/tls_server.c15
7 files changed, 53 insertions, 22 deletions
diff --git a/src/lib/libtls/Makefile b/src/lib/libtls/Makefile
index e9559f9f95..bf7de202ff 100644
--- a/src/lib/libtls/Makefile
+++ b/src/lib/libtls/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.2 2015/01/22 09:29:04 reyk Exp $ 1# $OpenBSD: Makefile,v 1.3 2015/02/07 06:19:26 jsing Exp $
2 2
3CFLAGS+= -Wall -Werror -Wimplicit 3CFLAGS+= -Wall -Werror -Wimplicit
4CFLAGS+= -DLIBRESSL_INTERNAL 4CFLAGS+= -DLIBRESSL_INTERNAL
@@ -26,7 +26,8 @@ MLINKS+=tls_init.3 tls_config_set_ca_mem.3
26MLINKS+=tls_init.3 tls_config_set_cert_file.3 26MLINKS+=tls_init.3 tls_config_set_cert_file.3
27MLINKS+=tls_init.3 tls_config_set_cert_mem.3 27MLINKS+=tls_init.3 tls_config_set_cert_mem.3
28MLINKS+=tls_init.3 tls_config_set_ciphers.3 28MLINKS+=tls_init.3 tls_config_set_ciphers.3
29MLINKS+=tls_init.3 tls_config_set_ecdhcurve.3 29MLINKS+=tls_init.3 tls_config_set_ecdhecurve.3
30MLINKS+=tls_init.3 tls_config_set_dheparams.3
30MLINKS+=tls_init.3 tls_config_set_key_file.3 31MLINKS+=tls_init.3 tls_config_set_key_file.3
31MLINKS+=tls_init.3 tls_config_set_key_mem.3 32MLINKS+=tls_init.3 tls_config_set_key_mem.3
32MLINKS+=tls_init.3 tls_config_set_protocols.3 33MLINKS+=tls_init.3 tls_config_set_protocols.3
diff --git a/src/lib/libtls/shlib_version b/src/lib/libtls/shlib_version
index 893819d18f..b52599a164 100644
--- a/src/lib/libtls/shlib_version
+++ b/src/lib/libtls/shlib_version
@@ -1,2 +1,2 @@
1major=1 1major=2
2minor=1 2minor=0
diff --git a/src/lib/libtls/tls.h b/src/lib/libtls/tls.h
index 8dcf125765..20e5b46901 100644
--- a/src/lib/libtls/tls.h
+++ b/src/lib/libtls/tls.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls.h,v 1.3 2015/01/22 09:16:24 reyk Exp $ */ 1/* $OpenBSD: tls.h,v 1.4 2015/02/07 06:19:26 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -48,7 +48,8 @@ int tls_config_set_cert_file(struct tls_config *config, const char *cert_file);
48int tls_config_set_cert_mem(struct tls_config *config, const uint8_t *cert, 48int tls_config_set_cert_mem(struct tls_config *config, const uint8_t *cert,
49 size_t len); 49 size_t len);
50int tls_config_set_ciphers(struct tls_config *config, const char *ciphers); 50int tls_config_set_ciphers(struct tls_config *config, const char *ciphers);
51int tls_config_set_ecdhcurve(struct tls_config *config, const char *name); 51int tls_config_set_dheparams(struct tls_config *config, const char *params);
52int tls_config_set_ecdhecurve(struct tls_config *config, const char *name);
52int tls_config_set_key_file(struct tls_config *config, const char *key_file); 53int tls_config_set_key_file(struct tls_config *config, const char *key_file);
53int tls_config_set_key_mem(struct tls_config *config, const uint8_t *key, 54int tls_config_set_key_mem(struct tls_config *config, const uint8_t *key,
54 size_t len); 55 size_t len);
diff --git a/src/lib/libtls/tls_config.c b/src/lib/libtls/tls_config.c
index 16120c5e4e..7697fa6ee8 100644
--- a/src/lib/libtls/tls_config.c
+++ b/src/lib/libtls/tls_config.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_config.c,v 1.2 2015/01/22 09:16:24 reyk Exp $ */ 1/* $OpenBSD: tls_config.c,v 1.3 2015/02/07 06:19:26 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -71,7 +71,8 @@ tls_config_new(void)
71 tls_config_free(config); 71 tls_config_free(config);
72 return (NULL); 72 return (NULL);
73 } 73 }
74 tls_config_set_ecdhcurve(config, "auto"); 74 tls_config_set_dheparams(config, "none");
75 tls_config_set_ecdhecurve(config, "auto");
75 tls_config_set_protocols(config, TLS_PROTOCOLS_DEFAULT); 76 tls_config_set_protocols(config, TLS_PROTOCOLS_DEFAULT);
76 tls_config_set_verify_depth(config, 6); 77 tls_config_set_verify_depth(config, 6);
77 78
@@ -145,18 +146,37 @@ tls_config_set_ciphers(struct tls_config *config, const char *ciphers)
145} 146}
146 147
147int 148int
148tls_config_set_ecdhcurve(struct tls_config *config, const char *name) 149tls_config_set_dheparams(struct tls_config *config, const char *params)
150{
151 int keylen;
152
153 if (params == NULL || strcasecmp(params, "none") == 0)
154 keylen = 0;
155 else if (strcasecmp(params, "auto") == 0)
156 keylen = -1;
157 else if (strcmp(params, "legacy"))
158 keylen = 1024;
159 else
160 return (-1);
161
162 config->dheparams = keylen;
163
164 return (0);
165}
166
167int
168tls_config_set_ecdhecurve(struct tls_config *config, const char *name)
149{ 169{
150 int nid; 170 int nid;
151 171
152 if (name == NULL) 172 if (name == NULL || strcasecmp(name, "none") == 0)
153 nid = NID_undef; 173 nid = NID_undef;
154 else if (strcasecmp(name, "auto") == 0) 174 else if (strcasecmp(name, "auto") == 0)
155 nid = -1; 175 nid = -1;
156 else if ((nid = OBJ_txt2nid(name)) == NID_undef) 176 else if ((nid = OBJ_txt2nid(name)) == NID_undef)
157 return (-1); 177 return (-1);
158 178
159 config->ecdhcurve = nid; 179 config->ecdhecurve = nid;
160 180
161 return (0); 181 return (0);
162} 182}
diff --git a/src/lib/libtls/tls_init.3 b/src/lib/libtls/tls_init.3
index baff553172..48974cb326 100644
--- a/src/lib/libtls/tls_init.3
+++ b/src/lib/libtls/tls_init.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: tls_init.3,v 1.8 2015/01/22 11:08:54 jmc Exp $ 1.\" $OpenBSD: tls_init.3,v 1.9 2015/02/07 06:19:26 jsing Exp $
2.\" 2.\"
3.\" Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> 3.\" Copyright (c) 2014 Ted Unangst <tedu@openbsd.org>
4.\" 4.\"
@@ -14,7 +14,7 @@
14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16.\" 16.\"
17.Dd $Mdocdate: January 22 2015 $ 17.Dd $Mdocdate: February 7 2015 $
18.Dt TLS 3 18.Dt TLS 3
19.Os 19.Os
20.Sh NAME 20.Sh NAME
@@ -28,7 +28,8 @@
28.Nm tls_config_set_cert_file , 28.Nm tls_config_set_cert_file ,
29.Nm tls_config_set_cert_mem , 29.Nm tls_config_set_cert_mem ,
30.Nm tls_config_set_ciphers , 30.Nm tls_config_set_ciphers ,
31.Nm tls_config_set_ecdhcurve , 31.Nm tls_config_set_dheparams ,
32.Nm tls_config_set_ecdhecurve ,
32.Nm tls_config_set_key_file , 33.Nm tls_config_set_key_file ,
33.Nm tls_config_set_key_mem , 34.Nm tls_config_set_key_mem ,
34.Nm tls_config_set_protocols , 35.Nm tls_config_set_protocols ,
@@ -72,7 +73,9 @@
72.Ft "int" 73.Ft "int"
73.Fn tls_config_set_ciphers "struct tls_config *config" "const char *ciphers" 74.Fn tls_config_set_ciphers "struct tls_config *config" "const char *ciphers"
74.Ft "int" 75.Ft "int"
75.Fn tls_config_set_ecdhcurve "struct tls_config *config" "const char *name" 76.Fn tls_config_set_dheparams "struct tls_config *config" "const char *params"
77.Ft "int"
78.Fn tls_config_set_ecdhecurve "struct tls_config *config" "const char *name"
76.Ft "int" 79.Ft "int"
77.Fn tls_config_set_key_file "struct tls_config *config" "const char *key_file" 80.Fn tls_config_set_key_file "struct tls_config *config" "const char *key_file"
78.Ft "int" 81.Ft "int"
diff --git a/src/lib/libtls/tls_internal.h b/src/lib/libtls/tls_internal.h
index 9a1a180e0b..18fcf539c3 100644
--- a/src/lib/libtls/tls_internal.h
+++ b/src/lib/libtls/tls_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_internal.h,v 1.7 2015/01/22 09:16:24 reyk Exp $ */ 1/* $OpenBSD: tls_internal.h,v 1.8 2015/02/07 06:19:26 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> 3 * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org>
4 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 4 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
@@ -34,7 +34,8 @@ struct tls_config {
34 char *cert_mem; 34 char *cert_mem;
35 size_t cert_len; 35 size_t cert_len;
36 const char *ciphers; 36 const char *ciphers;
37 int ecdhcurve; 37 int dheparams;
38 int ecdhecurve;
38 const char *key_file; 39 const char *key_file;
39 char *key_mem; 40 char *key_mem;
40 size_t key_len; 41 size_t key_len;
diff --git a/src/lib/libtls/tls_server.c b/src/lib/libtls/tls_server.c
index ac44f260ac..8d71d2790f 100644
--- a/src/lib/libtls/tls_server.c
+++ b/src/lib/libtls/tls_server.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_server.c,v 1.3 2015/01/30 14:25:37 bluhm Exp $ */ 1/* $OpenBSD: tls_server.c,v 1.4 2015/02/07 06:19:26 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -63,12 +63,17 @@ tls_configure_server(struct tls *ctx)
63 if (tls_configure_keypair(ctx) != 0) 63 if (tls_configure_keypair(ctx) != 0)
64 goto err; 64 goto err;
65 65
66 if (ctx->config->ecdhcurve == -1) { 66 if (ctx->config->dheparams == -1)
67 SSL_CTX_set_dh_auto(ctx->ssl_ctx, 1);
68 else if (ctx->config->dheparams == 1024)
69 SSL_CTX_set_dh_auto(ctx->ssl_ctx, 2);
70
71 if (ctx->config->ecdhecurve == -1) {
67 SSL_CTX_set_ecdh_auto(ctx->ssl_ctx, 1); 72 SSL_CTX_set_ecdh_auto(ctx->ssl_ctx, 1);
68 } else if (ctx->config->ecdhcurve != NID_undef) { 73 } else if (ctx->config->ecdhecurve != NID_undef) {
69 if ((ecdh_key = EC_KEY_new_by_curve_name( 74 if ((ecdh_key = EC_KEY_new_by_curve_name(
70 ctx->config->ecdhcurve)) == NULL) { 75 ctx->config->ecdhecurve)) == NULL) {
71 tls_set_error(ctx, "failed to set ECDH curve"); 76 tls_set_error(ctx, "failed to set ECDHE curve");
72 goto err; 77 goto err;
73 } 78 }
74 SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_SINGLE_ECDH_USE); 79 SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_SINGLE_ECDH_USE);