我正在使用 wget 来检查多个盒子是否可以访问其他服务器。问题是有时服务器会尝试自签名,并且发生这种情况时脚本会挂起。它只是停在线路上
To connect to www.google.com insecurely, use '--no-check-certificate'.
我不一定想做 --no-check-certificate 因为我需要的只是这一行:
Connecting to https://www.google.com|xx.xxx.xxx.xxx... connected
我知道无检查证书不一定是一个安全的选择。
有没有办法让 wget 在遇到具有自签名证书的服务器时停止、超时或以其他方式取消?
编辑:我忘了提及我使用的是 SunOS 10 和 WGET 1.12。我正在使用的 wget 行的一个示例是
variable[i]=$(wget -O- --no-http-keep-alive https://www.google.com | grep connected)
答案1
您想要什么安全财产?
带有经过验证的证书的 HTTPS 可提供加密保证,确保服务器是预期的服务器。如果您需要这种级别的保证,那么自签名证书将不起作用,除非它们是预先共享的。如果您有预共享证书,请wget
使用该--ca-certificate
选项将其传递给。
如果没有 HTTPS,类似的请求wget http://www.example.com
会受到两种攻击:
- 对 DNS 的攻击,导致返回属于攻击者的错误 IP 地址
www.example.com
。 - 对 IP 路由的攻击,允许攻击者以 的 IP 地址接收和发送数据包
www.example.com
。
如果您在本地网络上发出这些请求,这些威胁通常不是问题。如果您不关心这些威胁,或者因为您有足够的物理安全性,或者因为您的监控软件被愚弄也没关系,那么您就不需要 HTTPS。如果服务器只响应 HTTPS,--no-check-certificate
如果您不关心这些威胁,则可以使用。
如果您只想测试 Web 服务器是否响应,wget
那就有点矫枉过正了。您可以使用curl --head
发出HEAD
请求而不是GET
, 以节省一些流量。您可以使用openssl s_client -connect www.example.com:443 </dev/null
它来启动 HTTPS 连接并立即断开连接,而无需在 TLS 连接内发送任何数据。