Using the protocol defaults (tlsv1.3 and tlsv1.2) in latest relayd has
regressed to not supporting SNI?
While server side TLSv1.3 did not make it into 6.7 release, it was supposedly
added in -current. According to relayd.conf(5) manpage:
no tlsv1.3
Disable the TLSv1.3 protocol. The default is to enable
TLSv1.3.
A user on IRC reported that this SNI issue is also apparent when using tlsv1.3
in httpd.
Disabling TLSv1.3 by adding `tls no tlsv1.3` relayd.conf works around the
issue.
6.7-current OpenBSD localhost 6.7 GENERIC#216 amd64
My relayd.conf:
ext_v4 = "1.2.3.4"
http protocol "http" {
match request header set "X-Forwarded-For" value "$REMOTE_ADDR"
match request header set "X-Forwarded-By" value "$SERVER_ADDR:
$SERVER_PORT"
tcp { nodelay, socket buffer 65536, backlog 100 }
}
http protocol "https" {
match request header set "X-Forwarded-For" value "$REMOTE_ADDR"
match request header set "X-Forwarded-By" value "$SERVER_ADDR:
$SERVER_PORT"
tcp { nodelay, socket buffer 65536, backlog 100 }
tls keypair example1.com
tls keypair example2.com
http websockets
}
relay "v4_http_relay" {
listen on $ext_v4 port 80
protocol "http"
forward to 127.0.0.1 port 8081
}
relay "v4_https_relay" {
listen on $ext_v4 port 443 tls
protocol "https"
forward to 127.0.0.1 port 8080
}
Attempting to curl example2.com gets example1.com's cert. This behavior is
similar in httpd, according to aforementioned IRC conversation. (The first
occurance of `tls keypair` in relayd.conf determines which cert gets sent no
matter what)
localhost% curl -v https://example2.com
* Trying 1.2.3.4:443...
* Connected to example2.com (1.2.3.4) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using unknown / AEAD-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=example1.com
* start date: May 9 21:55:12 2020 GMT
* expire date: Aug 7 21:55:12 2020 GMT
* subjectAltName does not match example2.com
* SSL: no alternative certificate subject name matches target host name
'example2.com'
* Closing connection 0
curl: (60) SSL: no alternative certificate subject name matches target host
name 'example2.com'
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
localhost% curl -v https://example1.com
* Trying 1.2.3.4:443...
* Connected to example1.com (1.2.3.4) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using unknown / AEAD-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=example1.com
* start date: May 9 21:55:12 2020 GMT
* expire date: Aug 7 21:55:12 2020 GMT
* subjectAltName: host "example1.com" matched cert's "example1.com"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: example1.com
> User-Agent: curl/7.70.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 0
< Content-Type: text/html
< Date: Wed, 27 May 2020 12:56:31 GMT
< Last-Modified: Sun, 10 May 2020 20:14:27 GMT
<
* Connection #0 to host example1.com left intact