Первоначально у меня была связь между моими 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.