diff options
author | jsing <> | 2019-04-04 15:03:21 +0000 |
---|---|---|
committer | jsing <> | 2019-04-04 15:03:21 +0000 |
commit | ef18f5fcfa9cf3eeefcc89685bead61b8239028f (patch) | |
tree | 3b602635dbbb5b70f50030b6207d774c40c1b7b8 /src/lib/libssl/s3_lib.c | |
parent | 3b50812b7511c2b9b68aa78ee812e5eb6939a3d5 (diff) | |
download | openbsd-ef18f5fcfa9cf3eeefcc89685bead61b8239028f.tar.gz openbsd-ef18f5fcfa9cf3eeefcc89685bead61b8239028f.tar.bz2 openbsd-ef18f5fcfa9cf3eeefcc89685bead61b8239028f.zip |
Provide SSL chain/cert chain APIs.
These allow for chains to be managed on a per-certificate basis rather than
as a single "extra certificates" list. Note that "chain" in this context
does not actually include the leaf certificate however, unlike
SSL_CTX_use_certificate_chain_{file,mem}().
Thanks to sthen@ for running this through a bulk ports build.
ok beck@ tb@
Diffstat (limited to 'src/lib/libssl/s3_lib.c')
-rw-r--r-- | src/lib/libssl/s3_lib.c | 114 |
1 files changed, 113 insertions, 1 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 49f402d065..0357a70ca3 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.185 2019/03/25 17:21:18 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.186 2019/04/04 15:03:21 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1876,6 +1876,47 @@ _SSL_set_tlsext_status_ocsp_resp(SSL *s, unsigned char *resp, int resp_len) | |||
1876 | } | 1876 | } |
1877 | 1877 | ||
1878 | int | 1878 | int |
1879 | SSL_set0_chain(SSL *ssl, STACK_OF(X509) *chain) | ||
1880 | { | ||
1881 | return ssl_cert_set0_chain(ssl->cert, chain); | ||
1882 | } | ||
1883 | |||
1884 | int | ||
1885 | SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain) | ||
1886 | { | ||
1887 | return ssl_cert_set1_chain(ssl->cert, chain); | ||
1888 | } | ||
1889 | |||
1890 | int | ||
1891 | SSL_add0_chain_cert(SSL *ssl, X509 *x509) | ||
1892 | { | ||
1893 | return ssl_cert_add0_chain_cert(ssl->cert, x509); | ||
1894 | } | ||
1895 | |||
1896 | int | ||
1897 | SSL_add1_chain_cert(SSL *ssl, X509 *x509) | ||
1898 | { | ||
1899 | return ssl_cert_add1_chain_cert(ssl->cert, x509); | ||
1900 | } | ||
1901 | |||
1902 | int | ||
1903 | SSL_get0_chain_certs(const SSL *ssl, STACK_OF(X509) **out_chain) | ||
1904 | { | ||
1905 | *out_chain = NULL; | ||
1906 | |||
1907 | if (ssl->cert->key != NULL) | ||
1908 | *out_chain = ssl->cert->key->chain; | ||
1909 | |||
1910 | return 1; | ||
1911 | } | ||
1912 | |||
1913 | int | ||
1914 | SSL_clear_chain_certs(SSL *ssl) | ||
1915 | { | ||
1916 | return ssl_cert_set0_chain(ssl->cert, NULL); | ||
1917 | } | ||
1918 | |||
1919 | int | ||
1879 | SSL_set1_groups(SSL *s, const int *groups, size_t groups_len) | 1920 | SSL_set1_groups(SSL *s, const int *groups, size_t groups_len) |
1880 | { | 1921 | { |
1881 | return tls1_set_groups(&s->internal->tlsext_supportedgroups, | 1922 | return tls1_set_groups(&s->internal->tlsext_supportedgroups, |
@@ -1956,6 +1997,21 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
1956 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: | 1997 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: |
1957 | return _SSL_set_tlsext_status_ocsp_resp(s, parg, larg); | 1998 | return _SSL_set_tlsext_status_ocsp_resp(s, parg, larg); |
1958 | 1999 | ||
2000 | case SSL_CTRL_CHAIN: | ||
2001 | if (larg == 0) | ||
2002 | return SSL_set0_chain(s, (STACK_OF(X509) *)parg); | ||
2003 | else | ||
2004 | return SSL_set1_chain(s, (STACK_OF(X509) *)parg); | ||
2005 | |||
2006 | case SSL_CTRL_CHAIN_CERT: | ||
2007 | if (larg == 0) | ||
2008 | return SSL_add0_chain_cert(s, (X509 *)parg); | ||
2009 | else | ||
2010 | return SSL_add1_chain_cert(s, (X509 *)parg); | ||
2011 | |||
2012 | case SSL_CTRL_GET_CHAIN_CERTS: | ||
2013 | return SSL_get0_chain_certs(s, (STACK_OF(X509) **)parg); | ||
2014 | |||
1959 | case SSL_CTRL_SET_GROUPS: | 2015 | case SSL_CTRL_SET_GROUPS: |
1960 | return SSL_set1_groups(s, parg, larg); | 2016 | return SSL_set1_groups(s, parg, larg); |
1961 | 2017 | ||
@@ -2127,6 +2183,47 @@ _SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg) | |||
2127 | return 1; | 2183 | return 1; |
2128 | } | 2184 | } |
2129 | 2185 | ||
2186 | int | ||
2187 | SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) | ||
2188 | { | ||
2189 | return ssl_cert_set0_chain(ctx->internal->cert, chain); | ||
2190 | } | ||
2191 | |||
2192 | int | ||
2193 | SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) | ||
2194 | { | ||
2195 | return ssl_cert_set1_chain(ctx->internal->cert, chain); | ||
2196 | } | ||
2197 | |||
2198 | int | ||
2199 | SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509) | ||
2200 | { | ||
2201 | return ssl_cert_add0_chain_cert(ctx->internal->cert, x509); | ||
2202 | } | ||
2203 | |||
2204 | int | ||
2205 | SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509) | ||
2206 | { | ||
2207 | return ssl_cert_add1_chain_cert(ctx->internal->cert, x509); | ||
2208 | } | ||
2209 | |||
2210 | int | ||
2211 | SSL_CTX_get0_chain_certs(const SSL_CTX *ctx, STACK_OF(X509) **out_chain) | ||
2212 | { | ||
2213 | *out_chain = NULL; | ||
2214 | |||
2215 | if (ctx->internal->cert->key != NULL) | ||
2216 | *out_chain = ctx->internal->cert->key->chain; | ||
2217 | |||
2218 | return 1; | ||
2219 | } | ||
2220 | |||
2221 | int | ||
2222 | SSL_CTX_clear_chain_certs(SSL_CTX *ctx) | ||
2223 | { | ||
2224 | return ssl_cert_set0_chain(ctx->internal->cert, NULL); | ||
2225 | } | ||
2226 | |||
2130 | static int | 2227 | static int |
2131 | _SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *cert) | 2228 | _SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *cert) |
2132 | { | 2229 | { |
@@ -2208,6 +2305,21 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
2208 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 2305 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
2209 | return _SSL_CTX_set_tlsext_status_arg(ctx, parg); | 2306 | return _SSL_CTX_set_tlsext_status_arg(ctx, parg); |
2210 | 2307 | ||
2308 | case SSL_CTRL_CHAIN: | ||
2309 | if (larg == 0) | ||
2310 | return SSL_CTX_set0_chain(ctx, (STACK_OF(X509) *)parg); | ||
2311 | else | ||
2312 | return SSL_CTX_set1_chain(ctx, (STACK_OF(X509) *)parg); | ||
2313 | |||
2314 | case SSL_CTRL_CHAIN_CERT: | ||
2315 | if (larg == 0) | ||
2316 | return SSL_CTX_add0_chain_cert(ctx, (X509 *)parg); | ||
2317 | else | ||
2318 | return SSL_CTX_add1_chain_cert(ctx, (X509 *)parg); | ||
2319 | |||
2320 | case SSL_CTRL_GET_CHAIN_CERTS: | ||
2321 | return SSL_CTX_get0_chain_certs(ctx, (STACK_OF(X509) **)parg); | ||
2322 | |||
2211 | case SSL_CTRL_EXTRA_CHAIN_CERT: | 2323 | case SSL_CTRL_EXTRA_CHAIN_CERT: |
2212 | return _SSL_CTX_add_extra_chain_cert(ctx, parg); | 2324 | return _SSL_CTX_add_extra_chain_cert(ctx, parg); |
2213 | 2325 | ||