私は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