试图让PHP流与Thawte TLS RSA CA G1一起工作-内部错误



我试图让PHP接受Chrome接受的证书。

我创建了以下最小复制示例:

echo OPENSSL_VERSION_TEXT;
require 'vendor/autoload.php';
$fetch = new ParagonIECertaintyRemoteFetch('/tmp/');
$latestBundle = $fetch->getLatestBundle();
$context = stream_context_create(
[
'ssl' => array(
'cafile' => $latestBundle->getFilePath(),
'SNI_enabled' => true,
)
]
);
$url = 'https://example.com:8080/x/y';
echo file_get_contents($url  . '?wsdl', false, $context);

我正在使用https://github.com/paragonie/certainty以获取最新的CA证书。

我得到以下错误

OpenSSL 1.0.2g  1 Mar 2016
PHP Warning:  file_get_contents(): 
SSL operation failed with code 1. OpenSSL Error messages:
error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert 
internal error in /tmp/test/test.php on line 20
PHP Warning:  file_get_contents(): Failed to enable crypto in 
/tmp/test/test.php on line 20
PHP Warning:  file_get_contents(https://example.com:8080/x/y? 
wsdl): failed to open stream: operation failed in 
/tmp/test/test.php on line 20

这里出了什么问题?

不幸的是,我无法共享URL(无论如何,它在防火墙后面)。

使用curl访问它——不安全的工作——但我真的想正确地验证CA证书

编辑SSLyze输出这个:

扫描结果例如。网址:8080->------------------------------------------------------*TLSV1_1密码套件:正向保密正常-支持RC4正常-不支持首选:TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256位接受日期:TLS_RSA_WITH_AES_256_CBC_SHA 256位TLS_DH_an_WITH_AES_256_CBC_SHA ANONYMOUSTLS_DHE_RSA_WITH_AES_256_CBC_SHA 256位未定义-发生意外错误:TLS_DHE_DSS_WITH_AES_256_CBC_SHA OpenSSLError-错误:14094438:SSL例程:ssl3_read_bytes:tlsv1警报内部错误*TLSV1密码套件:正向保密正常-支持RC4正常-不支持首选:TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256位接受日期:TLS_RSA_WITH_AES_256_CBC_SHA 256位TLS_DH_an_WITH_AES_256_CBC_SHA ANONYMOUSTLS_DHE_RSA_WITH_AES_256_CBC_SHA 256位未定义-发生意外错误:TLS_DHE_DSS_WITH_AES_256_CBC_SHA OpenSSLError-错误:14094438:SSL例程:ssl3_read_bytes:tlsv1警报内部错误*放气压缩:OK-压缩已禁用*证书信息:所容纳之物SHA1指纹:c2b3ce5b0905caa2ec5998aacf074f99cffb0207通用名称:example.com颁发者:Thawte TLS RSA CA G1序列号:103619960923896954455241465643169842847不在此之前:2018-12-05 00:00:00不在:2020-12-04 12:00:00签名算法:sha256公钥算法:RSA密钥大小:2048指数:65537(0x10001)DNS使用者替代名称:['example.com']相信主机名验证:OK-证书与example.com匹配Android CA存储(9.0.0_r3):失败-证书不受信任:无法获取本地颁发者证书iOS CA存储(11):失败-证书不受信任:无法获取本地颁发者证书Java CA存储(jre-10.0.2):失败-证书不受信任:无法获取本地颁发者证书macOS CA存储(High Sierra):失败-证书不受信任:无法获取本地颁发者证书Mozilla CA Store(2018-08-23):失败-证书不受信任:无法获取本地颁发者证书Windows CA应用商店(2018-08-04):失败-证书不受信任:无法获取本地颁发者证书赛门铁克2018弃用:OK-不是赛门铁科颁发的证书接收链:example.com已验证链:错误-无法建立已验证链(证书不受信任?)接收的链包含锚:错误-无法建立经过验证的链(证书不受信任?)收到的连锁订单:OK-订单有效已验证链包含SHA1:错误-无法建立已验证链(证书不受信任?)扩展OCSP必须装订:不支持-找不到扩展证书透明度:合格-包括3个SCTOCSP装订不支持-服务器未发回OCSP响应*OpenSSL CCS注入:OK-不易受到OpenSSL CCS注入的攻击*SSLV3密码套件:服务器拒绝了所有密码套件。*SSLV2密码套件:服务器拒绝了所有密码套件。*恢复支持:使用会话ID:OK-支持(5次成功,0次失败,0次错误,总共5次尝试)。使用TLS票证:不支持-未分配TLS票证。*降级攻击:TLS_FALLBACK_SCSV:VULNERABLE-不支持信令密码套件*TLSV1_3密码套件:服务器拒绝了所有密码套件。*OpenSSL心脏出血:OK-不易受到心脏出血的影响*TLSV1_2密码套件:正向保密正常-支持RC4正常-不支持首选:TLS_RSA_WITH_AES_256_CBC_SHA 256位接受日期:TLS_RSA_WITH_AES_256_CBC_SHA 256位TLS_DH_an_WITH_AES_256_CBC_SHA ANONYMOUSTLS_DHE_RSA_WITH_AES_256_CBC_SHA 256位未定义-发生意外错误:TLS_DHE_DSS_WITH_AES_256_CBC_SHA OpenSSLError-错误:14094438:SSL例程:ssl3_read_bytes:tlsv1警报内部错误*会话重新协商:客户端发起的重新协商:VULNERABLE-服务器接受客户端发起的协商安全重新协商:正常-支持*机器人攻击:OK-不易受攻击扫描在9.31秒内完成

内部错误的解决方式如下:

$context = stream_context_create(
[
'ssl' => array(
'cafile' => $latestBundle->getFilePath(),
'SNI_enabled' => true,
'ciphers' => 'HIGH:TLSv1.2:TLSv1.1:TLSv1.0:SSLv3:SSLv2',
'verify_peer' => false,
'verify_peer_name' => false,
'crypto_disable_compression' => true,
'method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
'verify_depth' => 10,
)
]
);

但我仍然无法验证CA证书。

在Chrome中运行良好。

这是因为Chrome可以解决一些问题,请参阅https://security.stackexchange.com/questions/199963/certificate-works-in-chrome-firefox-but-not-with-curl-unable-to-get-local-is

所以我必须等待,直到链配置正确。

最新更新