1*5c389b79Sbeck.\" $OpenBSD: tls_config_set_protocols.3,v 1.12 2023/07/02 06:37:27 beck Exp $ 2e690d60fSschwarze.\" 3e690d60fSschwarze.\" Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> 44801fc0bSschwarze.\" Copyright (c) 2015, 2016 Joel Sing <jsing@openbsd.org> 54801fc0bSschwarze.\" Copyright (c) 2015 Bob Beck <beck@openbsd.org> 6e690d60fSschwarze.\" 7e690d60fSschwarze.\" Permission to use, copy, modify, and distribute this software for any 8e690d60fSschwarze.\" purpose with or without fee is hereby granted, provided that the above 9e690d60fSschwarze.\" copyright notice and this permission notice appear in all copies. 10e690d60fSschwarze.\" 11e690d60fSschwarze.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12e690d60fSschwarze.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13e690d60fSschwarze.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14e690d60fSschwarze.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15e690d60fSschwarze.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16e690d60fSschwarze.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17e690d60fSschwarze.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18e690d60fSschwarze.\" 19*5c389b79Sbeck.Dd $Mdocdate: July 2 2023 $ 20e690d60fSschwarze.Dt TLS_CONFIG_SET_PROTOCOLS 3 21e690d60fSschwarze.Os 22e690d60fSschwarze.Sh NAME 23e690d60fSschwarze.Nm tls_config_set_protocols , 24e690d60fSschwarze.Nm tls_config_parse_protocols , 25e690d60fSschwarze.Nm tls_config_set_alpn , 26e690d60fSschwarze.Nm tls_config_set_ciphers , 27e690d60fSschwarze.Nm tls_config_set_dheparams , 284896de1eSjsing.Nm tls_config_set_ecdhecurves , 29e690d60fSschwarze.Nm tls_config_prefer_ciphers_client , 30e690d60fSschwarze.Nm tls_config_prefer_ciphers_server 31e690d60fSschwarze.Nd TLS protocol and cipher selection 32e690d60fSschwarze.Sh SYNOPSIS 33e690d60fSschwarze.In tls.h 34e690d60fSschwarze.Ft int 35e690d60fSschwarze.Fo tls_config_set_protocols 36e690d60fSschwarze.Fa "struct tls_config *config" 37e690d60fSschwarze.Fa "uint32_t protocols" 38e690d60fSschwarze.Fc 39e690d60fSschwarze.Ft int 40e690d60fSschwarze.Fo tls_config_parse_protocols 41e690d60fSschwarze.Fa "uint32_t *protocols" 42e690d60fSschwarze.Fa "const char *protostr" 43e690d60fSschwarze.Fc 44e690d60fSschwarze.Ft int 45e690d60fSschwarze.Fo tls_config_set_alpn 46e690d60fSschwarze.Fa "struct tls_config *config" 47e690d60fSschwarze.Fa "const char *alpn" 48e690d60fSschwarze.Fc 49e690d60fSschwarze.Ft int 50e690d60fSschwarze.Fo tls_config_set_ciphers 51e690d60fSschwarze.Fa "struct tls_config *config" 52e690d60fSschwarze.Fa "const char *ciphers" 53e690d60fSschwarze.Fc 54e690d60fSschwarze.Ft int 55e690d60fSschwarze.Fo tls_config_set_dheparams 56e690d60fSschwarze.Fa "struct tls_config *config" 57e690d60fSschwarze.Fa "const char *params" 58e690d60fSschwarze.Fc 59e690d60fSschwarze.Ft int 604896de1eSjsing.Fo tls_config_set_ecdhecurves 61e690d60fSschwarze.Fa "struct tls_config *config" 624896de1eSjsing.Fa "const char *curves" 63e690d60fSschwarze.Fc 64e690d60fSschwarze.Ft void 65e690d60fSschwarze.Fn tls_config_prefer_ciphers_client "struct tls_config *config" 66e690d60fSschwarze.Ft void 67e690d60fSschwarze.Fn tls_config_prefer_ciphers_server "struct tls_config *config" 68e690d60fSschwarze.Sh DESCRIPTION 69e690d60fSschwarzeThese functions modify a configuration by setting parameters. 70e690d60fSschwarzeThe configuration options apply to both clients and servers, unless noted 71e690d60fSschwarzeotherwise. 72e690d60fSschwarze.Pp 73e690d60fSschwarze.Fn tls_config_set_protocols 74e690d60fSschwarzespecifies which versions of the TLS protocol may be used. 75e690d60fSschwarzePossible values are the bitwise OR of: 76e690d60fSschwarze.Pp 7714dc8396Sschwarze.Bl -item -offset indent -compact 7814dc8396Sschwarze.It 7914dc8396Sschwarze.Dv TLS_PROTOCOL_TLSv1_2 8014dc8396Sschwarze.It 8114dc8396Sschwarze.Dv TLS_PROTOCOL_TLSv1_3 82e690d60fSschwarze.El 83e690d60fSschwarze.Pp 84e690d60fSschwarzeAdditionally, the values 85e690d60fSschwarze.Dv TLS_PROTOCOL_TLSv1 86*5c389b79Sbeck(TLSv1.2, TLSv1.3), 87e690d60fSschwarze.Dv TLS_PROTOCOLS_ALL 88e690d60fSschwarze(all supported protocols) and 89e690d60fSschwarze.Dv TLS_PROTOCOLS_DEFAULT 906f8363eeSbeck(TLSv1.2 and TLSv1.3) may be used. 91e690d60fSschwarze.Pp 92e690d60fSschwarzeThe 93e690d60fSschwarze.Fn tls_config_parse_protocols 94e690d60fSschwarzeutility function parses a protocol string and returns the corresponding 95e690d60fSschwarzevalue via the 96e690d60fSschwarze.Ar protocols 97e690d60fSschwarzeargument. 98e690d60fSschwarzeThis value can then be passed to the 99e690d60fSschwarze.Fn tls_config_set_protocols 100e690d60fSschwarzefunction. 101e690d60fSschwarzeThe protocol string is a comma or colon separated list of keywords. 102fcde59b2SknValid keywords are: 103fcde59b2Skn.Pp 104fcde59b2Skn.Bl -tag -width "tlsv1.3" -offset indent -compact 105fcde59b2Skn.It Dv tlsv1.2 106fcde59b2Skn.It Dv tlsv1.3 10714dc8396Sschwarze.It Dv all 10814dc8396Sschwarze.Pq all supported protocols 10914dc8396Sschwarze.It Dv default 11014dc8396Sschwarze.Pq an alias for Dv secure 11114dc8396Sschwarze.It Dv legacy 11214dc8396Sschwarze.Pq an alias for Dv all 11314dc8396Sschwarze.It Dv secure 11414dc8396Sschwarze.Pq currently TLSv1.2 and TLSv1.3 115fcde59b2Skn.El 116fcde59b2Skn.Pp 117e690d60fSschwarzeIf a value has a negative prefix (in the form of a leading exclamation mark) 118e690d60fSschwarzethen it is removed from the list of available protocols, rather than being 119e690d60fSschwarzeadded to it. 120e690d60fSschwarze.Pp 121e690d60fSschwarze.Fn tls_config_set_alpn 122e690d60fSschwarzesets the ALPN protocols that are supported. 123e690d60fSschwarzeThe alpn string is a comma separated list of protocols, in order of preference. 124e690d60fSschwarze.Pp 125e690d60fSschwarze.Fn tls_config_set_ciphers 126e690d60fSschwarzesets the list of ciphers that may be used. 127e690d60fSschwarzeLists of ciphers are specified by name, and the 128e690d60fSschwarzepermitted names are: 129e690d60fSschwarze.Pp 13014dc8396Sschwarze.Bl -item -offset indent -compact 13114dc8396Sschwarze.It 13214dc8396Sschwarze.Dv secure Pq or alias Dv default 13314dc8396Sschwarze.It 13414dc8396Sschwarze.Dv compat 13514dc8396Sschwarze.It 13614dc8396Sschwarze.Dv legacy 13714dc8396Sschwarze.It 13814dc8396Sschwarze.Dv insecure Pq or alias Dv all 139e690d60fSschwarze.El 140e690d60fSschwarze.Pp 141e690d60fSschwarzeAlternatively, libssl cipher strings can be specified. 142e690d60fSschwarzeSee the CIPHERS section of 143e690d60fSschwarze.Xr openssl 1 144e690d60fSschwarzefor further information. 145e8bac763Sjsing.Pp 146e8bac763Sjsing.Fn tls_config_set_dheparams 147e8bac763Sjsingspecifies the parameters that will be used during Diffie-Hellman Ephemeral 148e8bac763Sjsing(DHE) key exchange. 1494a699ee4SknPossible values are: 1504a699ee4Skn.Pp 15114dc8396Sschwarze.Bl -item -offset indent -compact 15214dc8396Sschwarze.It 15314dc8396Sschwarze.Dv none 15414dc8396Sschwarze.It 15514dc8396Sschwarze.Dv auto 15614dc8396Sschwarze.It 15714dc8396Sschwarze.Dv legacy 1584a699ee4Skn.El 1594a699ee4Skn.Pp 1604a699ee4SknIn 1614a699ee4Skn.Dv auto 1624a699ee4Sknmode, the key size for the ephemeral key is automatically selected 163e8bac763Sjsingbased on the size of the private key being used for signing. 1644a699ee4SknIn 1654a699ee4Skn.Dv legacy 1664a699ee4Sknmode, 1024 bit ephemeral keys are used. 1674a699ee4SknThe default value is 1684a699ee4Skn.Dv none , 1694a699ee4Sknwhich disables DHE key exchange. 1704896de1eSjsing.Pp 1714896de1eSjsing.Fn tls_config_set_ecdhecurves 172e8bac763Sjsingspecifies the names of the elliptic curves that may be used during Elliptic 173e8bac763SjsingCurve Diffie-Hellman Ephemeral (ECDHE) key exchange. 1744896de1eSjsingThis is a comma separated list, given in order of preference. 1754896de1eSjsingThe special value of "default" will use the default curves (currently X25519, 176a0786738SjmcP-256 and P-384). 177a0786738SjmcThis function replaces 1784896de1eSjsing.Fn tls_config_set_ecdhecurve , 1794896de1eSjsingwhich is deprecated. 180e690d60fSschwarze.Pp 181e690d60fSschwarze.Fn tls_config_prefer_ciphers_client 182e690d60fSschwarzeprefers ciphers in the client's cipher list when selecting a cipher suite 183e690d60fSschwarze(server only). 184e690d60fSschwarzeThis is considered to be less secure than preferring the server's list. 185e690d60fSschwarze.Pp 186e690d60fSschwarze.Fn tls_config_prefer_ciphers_server 187e690d60fSschwarzeprefers ciphers in the server's cipher list when selecting a cipher suite 188e690d60fSschwarze(server only). 189e690d60fSschwarzeThis is considered to be more secure than preferring the client's list and is 190e690d60fSschwarzethe default. 191e690d60fSschwarze.Sh RETURN VALUES 192e690d60fSschwarzeThese functions return 0 on success or -1 on error. 193e690d60fSschwarze.Sh SEE ALSO 194e690d60fSschwarze.Xr tls_config_ocsp_require_stapling 3 , 195e690d60fSschwarze.Xr tls_config_set_session_id 3 , 196e690d60fSschwarze.Xr tls_config_verify 3 , 197e690d60fSschwarze.Xr tls_init 3 , 198e690d60fSschwarze.Xr tls_load_file 3 1998b02f64eSschwarze.Sh HISTORY 2008b02f64eSschwarze.Fn tls_config_set_ciphers 2018b02f64eSschwarzeappeared in 2028b02f64eSschwarze.Ox 5.6 2038b02f64eSschwarzeand got its final name in 2048b02f64eSschwarze.Ox 5.7 . 2058b02f64eSschwarze.Pp 2068b02f64eSschwarze.Fn tls_config_set_protocols , 2078b02f64eSschwarze.Fn tls_config_parse_protocols , 2088b02f64eSschwarze.Fn tls_config_set_dheparams , 2098b02f64eSschwarzeand 2108b02f64eSschwarze.Fn tls_config_set_ecdhecurve 2118b02f64eSschwarzeappeared in 2128b02f64eSschwarze.Ox 5.7 , 2138b02f64eSschwarze.Fn tls_config_prefer_ciphers_client 2148b02f64eSschwarzeand 2158b02f64eSschwarze.Fn tls_config_prefer_ciphers_server 2168b02f64eSschwarzein 2178b02f64eSschwarze.Ox 5.9 , 2188b02f64eSschwarzeand 2198b02f64eSschwarze.Fn tls_config_set_alpn 2208b02f64eSschwarzein 2218b02f64eSschwarze.Ox 6.1 . 2228b02f64eSschwarze.Sh AUTHORS 2238b02f64eSschwarze.An Joel Sing Aq Mt jsing@openbsd.org 2248b02f64eSschwarzewith contributions from 2258b02f64eSschwarze.An Ted Unangst Aq Mt tedu@openbsd.org 2268b02f64eSschwarze.Pq Fn tls_config_set_ciphers 2278b02f64eSschwarzeand 2288b02f64eSschwarze.An Reyk Floeter Aq Mt reyk@openbsd.org 2298b02f64eSschwarze.Pq Fn tls_config_set_ecdhecurve 230