简单的问题:每个可以使用 https 的程序(wget、curl 等)在 linux 上都能完美运行,但在 hpux 上却很糟糕。请参阅此示例,使用https://google.com
在Linux上
wget https://www.google.com/
--2018-12-04 16:47:27-- https://www.google.com/
Resolving www.google.com... 64.233.166.99, 64.233.166.106, 64.233.166.105, ...
Connecting to www.google.com|64.233.166.99|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'index.html'
index.html [ <=> ] 11.78K --.-KB/s in 0.01s
2018-12-04 16:47:27 (949 KB/s) - 'index.html' saved [12063]
我得到了文件
在 HP-UX 上
wget https://www.google.com/
--2018-12-04 16:48:46-- https://www.google.com/
Resolving www.google.com (www.google.com)... 64.233.166.99, 64.233.166.106, 64.233.166.105, ...
Connecting to www.google.com (www.google.com)|64.233.166.99|:443... connected.
ERROR: The certificate of 'www.google.com' is not trusted.
ERROR: The certificate of 'www.google.com' doesn't have a known issuer.
ERROR: The certificate of 'www.google.com' was signed using an insecure algorithm.
我什么也没得到。
我运行命令
c_rehash
和
/usr/local/bin/c_reash
但没有任何改变。
答案1
背景
在 Linux 上,默认情况下您可能拥有最新的受信任根证书集合,通常位于/etc/ssl/certs/
目录或/etc/pki/tls/certs/ca-bundle.crt
文件中,具体取决于所使用的 Linux 发行版。
在 HP-UX 上,等效目录可能是/opt/openssl/certs/
或/usr/local/etc/ssl/certs
,具体取决于您使用的是 HPe 提供的 OpenSSL 版本还是第三方版本。
我认为很多 Linux 发行版都会使用一组受信任的根证书,相当于 Mozilla Firefox 浏览器中的证书。
在 HP-UX 上,受信任根证书的集合很可能已过时,因为默认的受信任根证书集可能要小得多,并且操作系统不包含自动从某些中央 Internet 存储库提供更新的工具(因为 HP-UX 补丁访问需要支持协议)并且您可能还使用 HP 不提供的 OpenSSL 版本。
该c_rehash
命令不会自动为您更新证书:它仅有的扫描当前目录(或指定目录)中单个文件中的 SSL 证书,并创建/更新相应的符号链接,其名称类似于HHHHHHHH.D
其中HHHHHHHH
是证书的 8 位十六进制哈希值,D 是十进制数,通常为 0,但如果满足以下条件则递增有多个证书具有相同的哈希值。 OpenSSL 使用这些链接比扫描目录中的所有文件或扫描文件中的所有串联证书更快地找到正确的根证书ca-bundle.crt
。
如果您c_rehash
在不包含任何证书的目录中运行,它将不会执行任何操作。如果您在包含证书的目录中运行它,但该目录不是 OpenSSL 配置为扫描受信任证书的目录,那么它创建的链接将不会很有用。
修复
您需要检查您使用的 TLS/SSL 服务的证书来识别适当的根证书,然后找到一种方法来获取该根证书的公共部分(例如,通过从任何 Web 浏览器的证书存储中导出它) ,或者使用已经拥有一组良好根证书的 Web 浏览器从安全网页下载它)。例如Google的根证书可以在这里找到。
获得必要的根证书后,您需要找出您的应用程序正在使用哪个版本的 OpenSSL(例如ldd $(which wget) | grep ssl
)。常见的选择是 HP 提供的 OpenSSL,它通常位于/opt
以下版本:HP-UX 移植和存档中心/usr/local
除非是真正古老的版本,否则通常是在下面的。
然后将证书放在相应的目录中,并运行c_rehash
对于该特定目录。