2017-08-05 186 views
0

我正试图在两个LAMP服务器之间获得双向SSL身份验证。使用PHP SOAP进行相互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?!] 

我的理解是,这意味着客户端不识别该主的证书。

如果我在此客户端上的命令行中使用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是与两个魔岛链和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文件是私钥和证书的串联。

所有服务器都Centos7用PHP 5.4.16

回答

0

我想通这一个(和我,我的意思是迪诺ciuffetti名的CHAP)。我遇到了this blog,这帮助我更多地了解了相互身份验证,但仍然无法完成工作。

我寄出了博客海报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>";