2017-08-05 15 views
0

私は2つのLAMPサーバー間で相互SSL認証を取得しようとしています。PHPでの相互SSL認証

私は実際には3台のサーバーを持っています。 1つはマスターであり、他の2つはSOAP呼び出しを行うクライアントです。

マスターとクライアントでは、Comodo Postive SSL証明書がインストールされています。私はそのクライアントからマスターに接続し、SSL認証を成功させることができます。

2番目のクライアントでは、Lets Encrypt証明書をインストールしました。自分のウェブサイトからルート証明書を取得しました(また、https://whatsmychaincert.comを使用して正しいことを確認しました)。

このサーバーはsoap呼び出しに失敗します。私は、マスター上のhttpdのエラーログを確認したのだが、これを持っています

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

私の理解では、これはクライアントがMASTERの証明書を検証していないことを意味していることです。

私は、動作するこのクライアントのコマンドラインからcURLを使用する場合。私はこのようなカールを呼び出します。この場合、combined.crtで

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 

はコモドチェーンと連結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ファイルは、秘密鍵と証明書を連結したものです。

すべてのサーバーは、PHP 5.4.16

答えて

0

でCentos7ている私はこの1つを考え出した(と私で、私はディノciuffettiの名前でCHAPを意味します)。私はthis blogに出くわしました。私はもう相互認証を理解する助けになりましたが、私はまだ物事をうまく動かすことができませんでした。

私はブログのポスター、ディーノを郵送してくれました。 LetsEncryptを使って3台目のサーバーを自分でセットアップしようとすると、期待通りに機能しませんでした。

私はもう一度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>"; 

また、最終的に石鹸のように単純化しました