cURL PHP Правильный SSL между частными серверами с самозаверяющим сертификатом

Первоначально у меня была связь между моими 2 серверами, работающими с CURLOPT_SSL_VERIFYPEER, установленными в «false» без общего имени в сертификате SSL, чтобы избежать ошибок. Ниже приведен код клиента, который подключен к серверу с сертификатом:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); 

Тем не менее, я недавно изменил этот код (установил его в true) и указал сертификат компьютеров в формате PEM.

 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/includes/hostcert/Hostname.crt'); 

Это отлично работало в локальной сети с тестового компьютера, так как сертификат подписан с его именем хоста для CN. Как настроить PHP-код, чтобы он доверял только компьютеру имени хоста и поддерживал безопасное соединение.

Я хорошо знаю, что вы можете просто установить CURLOPT_SSL_VERIFYHOST на «0» или «1» и CURLOPT_SSL_VERIFYPEER на «false», но это не допустимые решения, поскольку они нарушают безопасность SSL.

Мой файл / etc / hosts выглядит следующим образом:

 #<ip-address> <hostname.domain.org> <hostname> 127.0.0.1 localhost.localdomain localhost ExampleHostName ::1 localhost.localdomain localhost 

Вам необходимо сгенерировать сертификат с допустимым именем хоста, запрошенным клиентом . Если вы использовали machine.local для своего внутреннего имени, но теперь хотите использовать внешних клиентов, вызывающих его через machine.example.org , тогда вам нужен сертификат, который вы используете для использования на machine.example.org .

Если вам нужны оба (поскольку один и тот же компьютер может быть вызван с разными именами хостов), используйте расширение альтернативного имени темы и поместите в свой сертификат несколько записей DNS.