PHP 5.6+ 用户
这是PHP 5.6 OpenSSL Changes 页面上记录的一个新特性。
在撰写本文时,PHP5.6 处于 Beta1 中,因此它并不过分有用。未来的人——你很幸运!
未来就在我们身上。PHP 5.6 是一个东西,应该鼓励使用它。请注意,它弃用了一些相当广泛使用的东西,如 mysql_* 函数,因此在升级时应小心。
其他所有人
@toubsen 在他的回答中是正确的 - 这不是直接可能的。详细说明他建议的解决方法......当解决供应商的 API 服务器未正确协商 TLSv1.2 到其支持的 TLSv1.0 的问题时,发送一小部分密码似乎允许协商正确完成。流上下文代码是:
$context = stream_context_create(
[
'ssl' => [
'ciphers' => 'DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:KRB5-DES-CBC3-MD5:KRB5-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DES-CBC3-MD5:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC2-CBC-MD5:KRB5-RC4-MD5:KRB5-RC4-SHA:RC4-SHA:RC4-MD5:RC4-MD5:KRB5-DES-CBC-MD5:KRB5-DES-CBC-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:DES-CBC-MD5:EXP-KRB5-RC2-CBC-MD5:EXP-KRB5-DES-CBC-MD5:EXP-KRB5-RC2-CBC-SHA:EXP-KRB5-DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:EXP-KRB5-RC4-MD5:EXP-KRB5-RC4-SHA:EXP-RC4-MD5:EXP-RC4-MD5',
],
]
);
SOAP 用户
PHP 的 SOAP 客户端不使用 curl,它似乎也不使用使用stream_context_set_default
. 因此,创建的上下文需要在第二个参数中传递给 SOAPClient 构造函数,如下所示:
$soap_client = new SOAPClient('http://webservices.site.com/wsdlfile.wsdl', array('stream_context' => $context));
为什么是那些密码?
在服务器上运行该命令openssl ciphers
会为您提供上述格式的受支持密码列表。运行openssl ciphers -v
会告诉您那些特定于 TLSv1.2 的内容。上面的列表是根据 OpenSSL 报告的所有非 TLSv1.2 密码编译而成的。
openssl ciphers -v | grep -v 'TLSv1.2' | cut -d ' ' -f 1 | tr "\n" ':'