2017-08-05 183 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>";