繁体   English   中英

使用PHP SOAP进行相互SSL身份验证

[英]Mutual SSL authentication with PHP SOAP

我正在尝试在两个LAMP服务器之间进行双向SSL身份验证。

我实际上有3台服务器。 一个是主服务器,另外两个是客户端对其进行SOAP调用。

在主服务器和一个客户端上,我安装了Comodo Postive SSL证书。 我可以从该客户端连接到主机,并使SSL身份验证成功。

在第二个客户端上,我安装了一个Lets Encrypt证书。 我从他们的网站获得了根证书(并使用https://whatsmychaincert.com验证了它是正确的)。

此服务器使Soap调用失败。 我已经检查了主机上的httpd错误日志,它具有以下内容:

SSL handshake interrupted by system [Hint: Stop button pressed in browser?!]

我的理解是,这意味着CLIENT不会验证MASTER的证书。

如果我从此客户端上的命令行使用cURL起作用。 我这样称呼cURL:

curl  -v --cert /etc/letsencrypt/live/ssl3.demoserver.co.za/cert.pem
  --cacert /etc/letsencrypt/live/ssl3.demoserver.co.za/combined.crt 
  --key /etc/letsencrypt/live/ssl3.demoserver.co.za/privkey.pem
      https://ssl2.demoserver.co.za/index.php

在这种情况下,combined.crt是一个文件,其中comodo链和letsencrypt链都串联在一起。

PHP文件如下所示:

<?php

$contextOptions = array(
'ssl' => array(
    'verify_peer'   => true,
    'cafile'        => '/etc/letsencrypt/live/ssl3.demoserver.co.za/combined.crt',
    'local_cert'        => '/etc/letsencrypt/live/ssl3.demoserver.co.za/keycert.pem',
    'verify_depth'  => 5,
    'disable_compression' => true,
    'SNI_enabled'         => true
)
);

$sslContext = stream_context_create($contextOptions);

$options2 = array(
    'uri' => 'https://ssl2.demoserver.co.za',
            'location' => 'https://ssl2.demoserver.co.za/Soap.php',
            'trace' => 1,
            'stream_context' => $sslContext
    );

$client = new SoapClient(NULL, $options2);
print "<span style=\"color:green;\">'".$client->GetData()."'<span>";

?>

keycert.pem文件是私钥和证书的串联。

所有的服务器都是带有5.4.16的Centos7

我想出了这个(我指的是Dino ciuffetti的名字)。 我遇到了这个博客该博客帮助我进一步了解了相互身份验证,但仍然无法完全解决问题。

我邮寄了博客海报Dino,他很友好地帮助我使事情顺利进行。 当我尝试自行设置带有LetsEncrypt的第三个服务器时,事情没有按预期进行。

我再次与Dino接触,他发现证书的目录不允许apache读取访问。.一个简单的错误,但我想我已经盯着这个问题了好几个小时,以至于看不到明显的错误。

同样,最后,肥皂被简化为:

$options2 = array(
    'uri' => 'https://ssl2.demoserver.co.za',
            'location' => 'https://ssl2.demoserver.co.za/Soap.php',
            'trace' => 1,
            'local_cert' => '/etc/letsencrypt/live/ssl3.demoserver.co.za/keycert.pem'
    );

$client = new SoapClient(NULL, $options2);
print "<span style=\"color:green;\">'".$client->GetData()."'<span>";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM