You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

共享服务器上如何获取指定网站SSL证书的公钥?

解决多站点SSL证书下openssl s_client返回错误证书的问题

这是因为你的服务器依赖**SNI(Server Name Indication)**来区分同一IP/端口下的多个HTTPS站点——简单说就是,当多个域名共享同一个IP和端口时,服务器需要客户端在SSL握手阶段明确告诉它要访问的域名,才能返回对应的SSL证书。默认情况下openssl s_client不会发送这个SNI标识,所以服务器只能返回它的默认证书(通常是最后安装的那一个)。

正确的命令用法

你只需要在命令中添加-servername参数,指定目标域名即可:

openssl s_client -connect your-target-domain.com:443 -servername your-target-domain.com

这里的-servername就是告诉服务器你要访问的具体域名,服务器会根据这个参数匹配对应的SSL证书返回给你。

直接提取公钥的快捷命令

如果你的目标只是获取证书的公钥,不用看一堆握手日志,可以把输出管道到openssl x509工具直接提取:

openssl s_client -connect your-target-domain.com:443 -servername your-target-domain.com | openssl x509 -pubkey -noout

执行后会直接输出该域名证书的公钥内容,非常高效。

非标准HTTPS端口的情况

如果你的网站用的不是默认的443端口,只需要替换命令中的端口号就行:

openssl s_client -connect your-target-domain.com:8443 -servername your-target-domain.com

旧版OpenSSL的兼容提示

如果你的OpenSSL版本低于1.0.0,可能不支持-servername参数。这种情况下建议升级OpenSSL到较新版本,或者用curl来验证(curl默认支持SNI):

curl -v --resolve your-target-domain.com:443:your-server-ip https://your-target-domain.com

在curl的输出中,你可以找到对应域名的证书信息。

内容的提问来源于stack exchange,提问作者SeyoS

火山引擎 最新活动