Проверить сертификат php 5.6 ssl

Я пытаюсь отладить проблему с проверкой сертификата ssl и определил, что openssl получает адреса сертификатов с возвратом неправильных путей. (Смотри ниже)

Как определить, как это установить? Я просмотрел файл php.ini и не нашел эту ссылку нигде.

cmuench-air:bin cmuench$ ./php -r "print_r(openssl_get_cert_locations());" Array ( [default_cert_file] => /bitnami/mampstack56Dev-osx-x64/output/common/openssl/cert.pem [default_cert_file_env] => SSL_CERT_FILE [default_cert_dir] => /bitnami/mampstack56Dev-osx-x64/output/common/openssl/certs [default_cert_dir_env] => SSL_CERT_DIR [default_private_dir] => /bitnami/mampstack56Dev-osx-x64/output/common/openssl/private [default_default_cert_area] => /bitnami/mampstack56Dev-osx-x64/output/common/openssl [ini_cafile] => [ini_capath] => ) 

php.ini (соответствующие части) … Я не вижу bitnami / mampstack56Dev где угодно …

 [openssl] ; The location of a Certificate Authority (CA) file on the local filesystem ; to use when verifying the identity of SSL/TLS peers. Most users should ; not specify a value for this directive as PHP will attempt to use the ; OS-managed cert stores in its absence. If specified, this value may still ; be overridden on a per-stream basis via the "cafile" SSL stream context ; option. ;openssl.cafile= ; If openssl.cafile is not specified or if the CA file is not found, the ; directory pointed to by openssl.capath is searched for a suitable ; certificate. This value must be a correctly hashed certificate directory. ; Most users should not specify a value for this directive as PHP will ; attempt to use the OS-managed cert stores in its absence. If specified, ; this value may still be overridden on a per-stream basis via the "capath" ; SSL stream context option. ;openssl.capath= ;Curl ca bundle certificate curl.cainfo="/Applications/phppos/common/openssl/certs/curl-ca-bundle.crt" 

РЕДАКТИРОВАТЬ:

Я знаю, что это глупо, но есть моменты, когда сертификат ssl будет подписан сам собой. Есть ли параметр ini, который я могу изменить, чтобы отключить проверку всех сертификатов? или я должен сделать это в коде для сокетов и завитки?

Если вы проверяете источник PHP для функции openssl_get_cert_locations() , он получает эти местоположения, вызывая различные функции OpenSSL, такие как X509_get_default_cert_file и просматривает значения php.ini openssl.cafile и openssl.capath описанные здесь .

Какие сертификаты / пути вы ищете точно? Если вы пытаетесь получить файл пакета CA, вы можете установить указанные выше значения php.ini чтобы они были возвращены openssl_get_cert_locations .

Файл php.ini умолчанию для PHP 5.6 не имеет настроек по умолчанию для этих настроек OpenSSL ini, поскольку их необходимо определить вручную. Эта конфигурация расположена ближе к концу php.ini

 [openssl] ; The location of a Certificate Authority (CA) file on the local filesystem ; to use when verifying the identity of SSL/TLS peers. Most users should ; not specify a value for this directive as PHP will attempt to use the ; OS-managed cert stores in its absence. If specified, this value may still ; be overridden on a per-stream basis via the "cafile" SSL stream context ; option. ;openssl.cafile= ; If openssl.cafile is not specified or if the CA file is not found, the ; directory pointed to by openssl.capath is searched for a suitable ; certificate. This value must be a correctly hashed certificate directory. ; Most users should not specify a value for this directive as PHP will ; attempt to use the OS-managed cert stores in its absence. If specified, ; this value may still be overridden on a per-stream basis via the "capath" ; SSL stream context option. ;openssl.capath= 

При использовании cURL, если вы хотите отключить проверку сертификатов, вы можете передать эти параметры curl_setopt() :

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // shouldn't need this 

CURLOPT_SSL_VERIFYPEER описывается как:

FALSE, чтобы остановить cURL от проверки сертификата партнера. Альтернативные сертификаты для проверки могут быть указаны с помощью опции CURLOPT_CAINFO, или каталог сертификата может быть указан с помощью опции CURLOPT_CAPATH.

CURLOPT_SSL_VERIFYHOST описывается как:

1, чтобы проверить наличие общего имени в SSL-сертификате. 2, чтобы проверить наличие общего имени, а также убедиться, что он соответствует указанному имени хоста. В производственных средах значение этой опции должно быть равно 2 (значение по умолчанию).

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

Чтобы отключить проверку потока, открытого с помощью fsockopen , попробуйте:

 <?php $context = stream_context_create(); $result = stream_context_set_option($context, 'ssl', 'verify_peer', false); $socket = stream_socket_client('ssl://'.$host . ':443', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); 

См. Параметры контекста SSL для получения дополнительной информации и stream_socket_client() .