Взаимная аутентификация SSL с PHP SOAP

Я пытаюсь получить взаимную аутентификацию ssl, работающую между двумя серверами LAMP.

У меня на самом деле 3 сервера. Один из них является ведущим, а два других — клиентами, выполняющими SOAP-вызовы.

На главном и одном клиенте у меня установлены сертификаты Comodo Postive SSL. Я могу подключиться от этого клиента к мастеру и успешно пройти аутентификацию SSL.

На втором клиенте я установил сертификат Lets Encrypt. Я получил корневой сертификат от их веб-сайта (и также подтвердил, что он был правильным, используя https://whatsmychaincert.com).

Этот сервер не может выполнить мыльный вызов. Я проверил журнал ошибок httpd на главном компьютере, и он имеет это:

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

Насколько я понимаю, это означает, что КЛИЕНТ не проверяет сертификат МАСТЕРА.

Если я использую 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

В этом случае комбинированный .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 представляет собой соединение закрытого ключа и сертификата.

Все серверы Centos7 с php 5.4.16

1

Решение

Я понял это (и под словом я имею в виду парня по имени Дино Чуффетти). Я наткнулся этот блог что помогло мне понять взаимную аутентификацию немного больше, но я все еще не мог заставить все работать.

Я отправил по почте постера в блоге, Дино, и он был достаточно любезен, чтобы помочь мне заставить вещи работать. Когда я попытался настроить третий сервер с LetsEncrypt на нем, все не работало, как ожидалось.

Я снова обратился к Дино, и он обнаружил, что каталог сертификата не разрешает доступ для чтения 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>";
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]