OpenSSL TLS扩展支持配置(服务器名称指示)

4
我想配置 OpenSSL 客户端和服务器以支持 TLS 扩展,特别是服务器名称指示 (SNI)。
我已经在 Ubuntu Linux 上构建了最新的 OpenSSL 1.0.0e,没有给出任何额外的配置参数。
./config make make install
不确定在构建此版本时是否需要提供任何额外的配置参数。
现在,我已经设置了服务器并通过 OpenSSL 客户端连接到它,使用 OpenSSL 提供的标准命令行工具,即 s_client 和 s_server。
我的问题是:如何在 s_client 中指定要发送的主机名作为扩展名? OpenSSL 是否有提供在命令行中使用某些参数指定服务器名称的功能?
谢谢!
3个回答

11

这个问题已经搁置了一段时间,既然我很久之前就想出了解决方法,那么写下答案来结束这个问题是合理的。

命令行选项servername可用于指定SNI。

openssl s_client -connect myweb.address.com:443 -servername myweb.address.com

上述命令将触发TLS客户端,并在客户端hello的SNI扩展中提供给定的服务器名称。


你知道OpenSSL的哪个版本添加了“-servername”参数吗?它在OpenSSL 1.0.0h中似乎不存在。 - Sam Morris
我正在使用这个版本 OpenSSL 0.9.8o 01 Jun 2010 - PravinCG
我错了--OpenSSL 1.0.0h确实支持“-servername”,如果你查看“openssl s_client -h”的输出,就可以看到。只是在s_client手册页中没有记录。 - Sam Morris
在 OpenSSL 变更日志 中搜索 SSL_set_tlsext_host_name。它出现在“0.9.8n和1.0.0之间的更改(2010年3月29日)”下面。 - jww

3

要使用s_server,您可以使用以下命令:

openssl s_server -accept 443 -cert normal_cert.pem -key normal_key.ky -servername xyz.com -cert2 sni_cert.pem -key2 sni_key.ky

在此处,当客户端请求没有servername扩展的服务器时,服务器将回复normal_cert,如果有servername扩展是客户端hello,则服务器将回复sni_cert。

要使用带有SNI的s_client,您可以使用以下命令:

openssl s_client -servername xyz.com -connect ip:port


2

相关的命令行选项如下:

  • starttls prot: 在支持该选项的协议中,在开始 TLS 之前使用 STARTTLS 命令,其中 'prot' 定义要假定哪个协议。目前仅支持 "smtp"、"pop3"、"imap"、"ftp" 和 "xmpp"。
  • servername host: 设置 TLS 扩展服务器名称

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接