diff options
author | jsing <> | 2015-02-07 06:19:26 +0000 |
---|---|---|
committer | jsing <> | 2015-02-07 06:19:26 +0000 |
commit | 1a38ececbc4737bfb7996d4c0f879c9872e9930b (patch) | |
tree | 4574673a0c17d6f4e774e9685f9dde91409dc24b | |
parent | 4d71037d26a6de59efacc048b6d8eaef040cf31f (diff) | |
download | openbsd-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/Makefile | 5 | ||||
-rw-r--r-- | src/lib/libtls/shlib_version | 4 | ||||
-rw-r--r-- | src/lib/libtls/tls.h | 5 | ||||
-rw-r--r-- | src/lib/libtls/tls_config.c | 30 | ||||
-rw-r--r-- | src/lib/libtls/tls_init.3 | 11 | ||||
-rw-r--r-- | src/lib/libtls/tls_internal.h | 5 | ||||
-rw-r--r-- | src/lib/libtls/tls_server.c | 15 |
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 | ||
3 | CFLAGS+= -Wall -Werror -Wimplicit | 3 | CFLAGS+= -Wall -Werror -Wimplicit |
4 | CFLAGS+= -DLIBRESSL_INTERNAL | 4 | CFLAGS+= -DLIBRESSL_INTERNAL |
@@ -26,7 +26,8 @@ MLINKS+=tls_init.3 tls_config_set_ca_mem.3 | |||
26 | MLINKS+=tls_init.3 tls_config_set_cert_file.3 | 26 | MLINKS+=tls_init.3 tls_config_set_cert_file.3 |
27 | MLINKS+=tls_init.3 tls_config_set_cert_mem.3 | 27 | MLINKS+=tls_init.3 tls_config_set_cert_mem.3 |
28 | MLINKS+=tls_init.3 tls_config_set_ciphers.3 | 28 | MLINKS+=tls_init.3 tls_config_set_ciphers.3 |
29 | MLINKS+=tls_init.3 tls_config_set_ecdhcurve.3 | 29 | MLINKS+=tls_init.3 tls_config_set_ecdhecurve.3 |
30 | MLINKS+=tls_init.3 tls_config_set_dheparams.3 | ||
30 | MLINKS+=tls_init.3 tls_config_set_key_file.3 | 31 | MLINKS+=tls_init.3 tls_config_set_key_file.3 |
31 | MLINKS+=tls_init.3 tls_config_set_key_mem.3 | 32 | MLINKS+=tls_init.3 tls_config_set_key_mem.3 |
32 | MLINKS+=tls_init.3 tls_config_set_protocols.3 | 33 | MLINKS+=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 @@ | |||
1 | major=1 | 1 | major=2 |
2 | minor=1 | 2 | minor=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); | |||
48 | int tls_config_set_cert_mem(struct tls_config *config, const uint8_t *cert, | 48 | int tls_config_set_cert_mem(struct tls_config *config, const uint8_t *cert, |
49 | size_t len); | 49 | size_t len); |
50 | int tls_config_set_ciphers(struct tls_config *config, const char *ciphers); | 50 | int tls_config_set_ciphers(struct tls_config *config, const char *ciphers); |
51 | int tls_config_set_ecdhcurve(struct tls_config *config, const char *name); | 51 | int tls_config_set_dheparams(struct tls_config *config, const char *params); |
52 | int tls_config_set_ecdhecurve(struct tls_config *config, const char *name); | ||
52 | int tls_config_set_key_file(struct tls_config *config, const char *key_file); | 53 | int tls_config_set_key_file(struct tls_config *config, const char *key_file); |
53 | int tls_config_set_key_mem(struct tls_config *config, const uint8_t *key, | 54 | int 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 | ||
147 | int | 148 | int |
148 | tls_config_set_ecdhcurve(struct tls_config *config, const char *name) | 149 | tls_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 | |||
167 | int | ||
168 | tls_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); |