2015-07-16 26 views
6

Sto tentando di eseguire il debug di un problema con la verifica del certificato ssl e ho stabilito che openssl ottenga le posizioni cert con la restituzione di percorsi errati. (Vedi sotto)php 5.6 certificato ssl verifica

Come faccio a capire come impostare questo? Ho cercato nel file php.ini e non ho trovato questo riferimento da nessuna parte.

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 (parti rilevanti) ... Non vedo bitnami/mampstack56Dev ovunque ...

[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" 

EDIT:

So che questo è muto, ma ci sono tempi in cui il certificato SSL sarà autofirmato. C'è un'impostazione ini che posso modificare per disabilitare il controllo di tutti i certificati? o devo farlo in codice per socket e arricciatura?

+0

Questi percorsi bitnami/mampstack sono i percorsi gestiti del sistema operativo che vengono restituiti chiamando le funzioni native OpenSSL. Questi percorsi predefiniti sono definiti in base al percorso di installazione di OpenSSL: vedi http://docs.huihoo.com/doxygen/openssl/1.0.1c/cryptlib_8h.html#a632c06aa262d7c398d82f89f50f636bf Probabilmente devi codificare manualmente il percorso negli script per cercare i certificati appropriati o metterli in quella directory. – drew010

+0

Quindi quei percorsi sono codificati in un file binario da qualche parte che non riesco davvero a ottenere? –

+0

Finiscono per essere hardcoded poiché sono compilati in OpenSSL in base alle opzioni di configurazione utilizzate quando il software è configurato e compilato. – drew010

risposta

8

Se si seleziona la sorgente di PHP per la funzione openssl_get_cert_locations(), si sta facendo quei luoghi chiamando varie funzioni OpenSSL quali X509_get_default_cert_file e guardando php.ini valori openssl.cafile e openssl.capath descritto here.

Quali certificati/percorsi stai cercando esattamente? Se si sta tentando di ottenere un file di bundle CA, è possibile impostare i valori php.ini di riferimento sopra riportati in modo che vengano restituiti da openssl_get_cert_locations.

Il file php.ini predefinito per PHP 5.6 non ha impostazioni predefinite per quelle impostazioni OpenSSL ini in quanto devono essere definite manualmente. Questa configurazione si trova vicino alla fine della 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= 

Quando si utilizza cURL, se si desidera disabilitare la convalida cert, è possibile passare queste opzioni per curl_setopt():

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

CURLOPT_SSL_VERIFYPEER è descritto come:

FALSE per impedire a cURL di verificare il certificato del peer. È possibile specificare i certificati alternativi da verificare con l'opzione CURLOPT_CAINFO oppure è possibile specificare una directory dei certificati con l'opzione CURLOPT_CAPATH.

CURLOPT_SSL_VERIFYHOST è descibed come:

1 per verificare l'esistenza di un nome comune nel certificato SSL peer. 2 per verificare l'esistenza di un nome comune e verificare anche che lo corrisponda al nome host fornito. Negli ambienti di produzione il valore di questa opzione deve essere mantenuto a 2 (valore predefinito).

Se si dispone di file di CA, è possibile utilizzare l'opzione CURLOPT_CAINFO per fornire il percorso completo del file contenente uno o più certificati per verificare il peer con.

Per disattivare il controllo di un flusso aperto con fsockopen, provare:

<?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); 

Vedi SSL Context Options per maggiori informazioni e stream_socket_client().

+0

Sto solo cercando di ottenere percorsi validi e non riesco a trovarlo. Aggiornerò la mia domanda con il mio php.ini una volta cerco quelle impostazioni. –

+0

Ho pubblicato il mio php.ini con quella parte –

+0

Qual è la differenza tra ca file e ca path? Cos'è ca informazioni? e dove è default_cert_dir proveniente da (Il percorso) –

Problemi correlati