Opções de contexto de SSL

Opções de contexto de SSLLista de opções de contexto de SSL

Descrição

Opções de contexto dos transportadores ssl:// e tls://.

Opções

peer_name string

Nome do peer a ser utilizado. Se este valor não for defino, o nome será adivinhado com base no nome do host utilizado na abertura da stream.

verify_peer boolean

Exige a verificação do certificado SSL utilizado.

TRUE como padrão.

verify_peer_name boolean

Exige a verificação do nome do peer.

TRUE como padrão.

allow_self_signed boolean

Permite certificados auto assinados. Necessita o parâmetro verify_peer.

FALSE como padrão.

cafile string

Localização do arquivo de Autoridade Certificadora no sistema de arquivos que deve ser usado pela opção de contexto verify_peer para autenticar a identidade do peer remoto.

capath string

Se a opção cafile não for especificada, ou o certificado não for encontrado, o diretório apontado pela opção capath será utilizado na busca de um certificado adequado. A opção capath deve ser um diretório de certificado com hash correto.

local_cert string

Caminho para o certificado local no sistema de arquivos. Deve ser um arquivo PEM codificado que contêm seu certificado e chave privada. Pode opcionalmente conter a cadeia de certificados dos emitentes. A chave privada também pode estar em um arquivo separado especificada pela opção local_pk.

local_pk string

Caminho para a chave privada local no sistema de arquivos, em caso de se usar arquivos separados para o certificado (local_cert) e a chave privada.

passphrase string

Senha usada para codificar seu arquivo local_cert

CN_match string

Common Name esperado. O PHP executará o casamento de curingas. Se o Common Name não casar com este, a tentativa de conexão falhará.

Nota: Esta opção foi depreciada em favor de peer_name, a partir do PHP 5.6.0.

verify_depth integer

Abortará se a cadeia de certificados for muito profunda.

Não verificar por padrão.

ciphers string

Define a lista de cifras disponíveis. O formato desta string é descrita em » ciphers(1).

DEFAULT como padrão.

capture_peer_cert boolean

Se definida como TRUE, a opção de contexto peer_certificate será criada contendo o certificado peer.

capture_peer_cert_chain boolean

Se definida como TRUE, a opção de contexto peer_certificate_chain será criada contendo a cadeia certificadora.

SNI_enabled boolean

Se definida como TRUE, o indicador do nome do servidor será habilitado. Habilitar a SNI permite múltiplos certificados no mesmo endereço IP.

SNI_server_name string

Se definida, o valor será usado como o nome do servidor no indicador do nome de servidor. Se este valor não for definido, o nome do servidor é adivinhado baseando-se o nome do servidor utilizado na abertura da stream.

Nota: Esta opção foi depreciada em favor de peer_name, a partir do PHP 5.6.0.

disable_compression boolean

Se definida, desabilita a compressão TLS. Pode ajudar a mitigar o ataque de vetor criminoso.

peer_fingerprint string | array

Abortará quando o certificado resumido remoto não corresponder a um hash especificado.

Quando uma string for utilizada, o tamanho determinará qual algoritmo de hash será aplicado, "md5" (32) ou "sha1" (40).

Quando um array for utilizado, as chaves indicarão o nome do hash e os valores correspondentes o resumo esperado.

Changelog

Versão Descrição
5.6.0 Adicionada as opções peer_fingerprint e verify_peer_name. verify_peer têm como padrão TRUE.
5.4.13 Adicionada a opção disable_compression. Exige OpenSSL >= 1.0.0.
5.3.2 Adicionada as opções SNI_enabled e SNI_server_name.
5.0.0 Adicionada as opções capture_peer_cert, capture_peer_chain, ciphers e local_pk.

Notas

Nota: Por ssl:// ser um transporte básico para os empacotadores https:// e ftps://, qualquer opção de contexto aplicáveis a ssl://, também se aplicam a https:// e ftps://.

Nota: Para SNI (Server Name Indication) estar disponível, o PHP deve ser compilado com o OpenSSL 0.9.8j ou superior. Utilize a constante OPENSSL_TLSEXT_SERVER_NAME para determinar o suporte ao SNI.

add a note add a note

User Contributed Notes 3 notes

up
4
Botjan kufca
6 years ago
CN_match works contrary to intuitive thinking. I came across this when I was developing SSL server implemented in PHP. I stated (in code):

- do not allow self signed certs (works)
- verify peer certs against CA cert (works)
- verify the client's CN against CN_match (does not work), like this:

stream_context_set_option($context, 'ssl', 'CN_match', '*.example.org');

I presumed this would match any client with CN below .example.org domain.
Unfortunately this is NOT the case. The option above does not do that.

What it really does is this:
- it takes client's CN and compares it to CN_match
- IF CLIENT's CN CONTAINS AN ASTERISK like *.example.org, then it is matched against CN_match in wildcard matching fashion

Examples to illustrate behaviour:
(CNM = server's CN_match)
(CCN = client's CN)

- CNM=host.example.org, CCN=host.example.org ---> OK
- CNM=host.example.org, CCN=*.example.org ---> OK
- CNM=.example.org, CCN=*.example.org ---> OK
- CNM=example.org, CCN=*.example.org ---> ERROR

- CNM=*.example.org, CCN=host.example.org ---> ERROR
- CNM=*.example.org, CCN=*.example.org ---> OK

According to PHP sources I believe that the same applies if you are trying to act as Client and the server contains a wildcard certificate. If you set CN_match to myserver.example.org and server presents itself with *.example.org, the connection is allowed.

Everything above applies to PHP version 5.2.12.
I will supply a patch to support CN_match starting with asterisk.
up
2
Anonymous
1 year ago
If I read the UPGRADING file correctly, in PHP 5.6 the default value of verify_peer has changed.
up
1
borbas dot geri at gmail dot com
2 years ago
I used this for Apple Push Notification Service.
Passed in a local certificate filename `cert.pem` trough local_cert option.
Worked fine, when invoked the script directly.

But when I included/required the script from a different location, it stopped working, without any explicit error message.

Resolved by passed in the full path for the file `<FullPathTo>cert.pem`.
To Top