From 3da1637b5ec4f24787d473fa3031bed44958136e Mon Sep 17 00:00:00 2001
From: Ingela Anderton Andin
Date: Fri, 6 Oct 2017 17:24:16 +0200
Subject: ssl: Extend hostname check to fallback to checking IP-address
If no SNI is available and the hostname is an IP-address also check
for IP-address match. This check is not as good as a DNS hostname check
and certificates using IP-address are not recommended.
---
lib/ssl/doc/src/ssl.xml | 52 ++++++++++++++++++++++++++++++++++---------------
1 file changed, 36 insertions(+), 16 deletions(-)
(limited to 'lib/ssl/doc')
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index ca2dcbb761..e80fd59a7f 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -589,22 +589,19 @@ fun(srp, Username :: string(), UserState :: term()) ->
{server_name_indication, HostName :: hostname()}
Specify the hostname to be used in TLS Server Name Indication extension.
- Is usefull when upgrading a TCP socket to a TLS socket or if the hostname can not be
- derived from the Host argument to ssl:connect/3.
- Will also cause the client to preform host name verification of the peer certificate
- public_key:pkix_verify_hostname(PeerCert, [{dns_id, HostName}])
-
during the x509-path validation. If the check fails the error {bad_cert, hostname_check_failiure} will be
- propagated to the path validation fun verify_fun
-
-
- {server_name_indication, disable}
- -
-
When starting a TLS connection without upgrade, the Server Name
- Indication extension is sent if possible that is can be derived from the Host argument
- to ssl:connect/3.
- This option can be used to disable that behavior.
- Note that this also disables the default host name verification check of the peer certificate.
+ If not specified it will default to the Host argument of connect/[3,4]
+ unless it is of type inet:ipaddress().
+
+ The HostName will also be used in the hostname verification of the peer certificate using
+ public_key:pkix_verify_hostname/2.
+
+ {server_name_indication, disable}
+ -
+
Prevents the Server Name Indication extension from being sent and
+ disables the hostname verification check
+ public_key:pkix_verify_hostname/2
+
{fallback, boolean()}
-
Send special cipher suite TLS_FALLBACK_SCSV to avoid undesired TLS version downgrade.
@@ -881,6 +878,12 @@ fun(srp, Username :: string(), UserState :: term()) ->
Upgrades a gen_tcp, or equivalent,
connected socket to an SSL socket, that is, performs the
client-side ssl handshake.
+
+ If the option verify is set to verify_peer
+ the option server_name_indication shall also be specified,
+ if it is not no Server Name Indication extension will be sent,
+ and public_key:pkix_verify_hostname/2
+ will be called with the IP-address of the connection as ReferenceID, which is proably not what you want.
@@ -897,7 +900,24 @@ fun(srp, Username :: string(), UserState :: term()) ->
SslSocket = sslsocket()
Reason = term()
- Opens an SSL connection to Host, Port.
+ Opens an SSL connection to Host, Port.
+
+ When the option verify is set to verify_peer the check
+ public_key:pkix_verify_hostname/2
+ will be performed in addition to the usual x509-path validation checks. If the check fails the error {bad_cert, hostname_check_failed} will
+ be propagated to the path validation fun verify_fun, where it is possible to do customized
+ checks by using the full possibilitis of the public_key:pkix_verify_hostname/2 API.
+
+ When the option server_name_indication is provided, its value (the DNS name) will be used as ReferenceID
+ to public_key:pkix_verify_hostname/2.
+ When no server_name_indication option is given, the Host argument will be used as
+ Server Name Indication extension. The Host argument will also be used for the
+ public_key:pkix_verify_hostname/2 check and if the Host
+ argument is an inet:ip_address() the ReferenceID used for the check will be {ip, Host} otherwise
+ dns_id will be assumed with a fallback to ip if that fails.
+ According to good practices certificates should not use IP-addresses as "server names". It would
+ be very surprising if this happen outside a closed network.
+
--
cgit v1.2.3