使用 macports 中的 OpenSSL,而不是 OSX 中的 OpenSSL

使用 macports 中的 OpenSSL,而不是 OSX 中的 OpenSSL

我正在使用带有 Openssl 0.9.8zg 的 OSX 10.9.5 的服务器应用程序 3,由于此版本不允许 TLS 1.2,因此我决定升级到 OpenSSL 1.0.2j。

由于此 OpenSSL 是默认提供的,我无法简单地升级它,因此我使用 macports 安装了较新版本,看看是否可以使用它来代替其他版本。

安装完成后,我注意到我只能以非 root 用户身份(通过命令行)使用较新的版本,如果我以 root 用户身份登录,我将继续使用较旧的版本。

因此我在“paths”文件中添加了 macports 的位置,然后我就可以在 root 中使用 openssl 了。

但现在我不确定我的服务器应用程序(又名系统)是否使用了正确的 OpenSSL。

目前我还没有更改任何证书,我使用的是旧版本中的默认证书。我以前从未使用过 openssl,我仍在尝试了解它的工作原理。

如果我尝试以 root 或非 root 用户身份使用 openssl,则在我的服务器中我会收到以下错误输出:

remote:~ root# openssl s_client -connect remote.X.pt:443 -tls1_2
CONNECTED(00000003)
140735302370144:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 7 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1480421165
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

看起来 TLS 1.2 是受支持的,但如果我尝试使用 SSLlabs 等外部服务,则会收到以下信息:

Protocols
TLS 1.2 No
TLS 1.1 No
TLS 1.0 Yes
SSL 3   No
SSL 2   No

所以我的问题是,我的系统是否继续使用旧版本的库,或者证书中是否有任何内容表明该服务器仅允许 TLS 1.0?如果它继续使用旧版本的库,我该如何指向新版本的库?

更新1:

只需在 phpinfo 中确认我仍在使用旧版本。所以我的问题是如何在 macports 中用新版本替换 openssl?

答案1

Server.app 附带了预编译的二进制文件,可链接到 Apple 的 OpenSSL /usr/lib。虽然您可以设置$PATH更改哪个程式你在命令行上执行,$PATH不会影响通过软件链接。

这引出了以下几点想法:

  • 您必须针对 MacPorts OpenSSL 重新编译 Server.app。由于您没有 Server.app 的确切源代码,因此这不是一个选择。
  • 您可以针对 MacPorts 的 OpenSSL 编译自己的服务器。MacPorts 附带了大多数开源网络服务器,但您必须自行配置它们。
  • 如果两个库是二进制兼容的,您可以设置一个特殊的环境变量来告诉 macOS 加载器忽略它期望库所在的绝对路径,并首先搜索其他路径。不幸的是,在 OpenSSL 0.9.8 与 1.0.0 的情况下,库不是二进制兼容的(/usr/lib/libssl.0.9.8.dylibvs. /opt/local/lib/libssl.1.0.0.dylib),所以这不是这里的选项。

因此,遗憾的是,我找不到让 Server.app 3 使用 TLS 1.2 的方法。

相关内容