Cambios de OpenSSL en PHP 5.6.x
Las envolturas de flujos ahora verifican los certificados del par y los nombres de host por omisión al utilizar SSL/TLS
Todos los flujos encriptados de clientes ahora habilitan la verificación del par por omisión. De manera
predeterminada se usará el paquete de CA predeterminado de OpenSSL para verificar el certificado del
par. En la mayoría de los casos no será necesario realizar ningún cambio para comunicarse
con servidores que posean certificados SSL válidos, ya que los distribuidores generalmente
configuran OpenSSL para que emplee paquetes de CA bien conocidos.
El paquete de CA podría ser sobrescrito globalmente estableciendo
la opción de configuración openssl.cafile u openssl.capath, o en función de
cada petición, usando las opciones de contexto
cafile
o
capath
.
Aunque no se recomienda en general, es posible deshabilitar la verificación
del certificado del par para una petición estableciendo la opción de contexto
verify_peer
a false
, y para deshabilitar la validación del nombre del par estableciendo
a false
la opción de contexto
verify_peer_name
.
Huellas digitales de certificados
Se ha añadido soporte para extraer y verificar huellas digitales de
certificados. Se ha añadido openssl_x509_fingerprint()
para extraer una huella digital de un certificado X.509, y se han añadido dos
opciones de contexto de flujo SSL:
capture_peer_cert
para capturar el certificado X.509
del par, y peer_fingerprint
para confirmar que el
certificado del par debería coincidir con la huella digital dada.
Cifradores predeterminados actualizados
Los cifradores predeterminados empleados por PHP han sido actualizados a una lista más segura
basada en las
» recomendaciones de cifradores de Mozilla,
con dos exclusiones adicionales: cifradores Diffie-Hellman anónimos, y RC4.
Se puede acceder a la lista mediante la nueva constante
OPENSSL_DEFAULT_STREAM_CIPHERS
, y se puede
sobrescribir (como en versiones anteriores de PHP) estableciendo
la opción de contexto
ciphers
.
Compresión deshabilitada de forma predeterminada
La compresión SSL/TLS ha sido deshabilitada de forma predeterminada para mitigar el
ataque CRIME. PHP 5.4.13 añadió la opción de contexto
disable_compression
para poder deshabilitar la compresión: ahora está establecida a
true
(es decir, la compresión está deshabilitada) de forma predeterminada.
Permitir que los servidores prefieran su orden de cifradores
Se ha añadido la opción de contexto honor_cipher_order
de SSL para que los servidores de flujos encriptados mitiguen las vulnerabilidades BEAST
prefiriendo los cifradores del servidor a los del cliente.
Nuevas opciones para secreto hacia adelante perfecto en servidores de flujos encriptados
Los flujos de clientes encriptados ya admiten secreto hacia adelante perfecto (PFS por sus siglas en inglés), ya que está
generalmente controlado por el servidor. Los flujos encriptados de servidores de PHP emplean
certificados capaces del secreto hacia adelante perfecto no necesitan tomar ninguna
acción adicional para habilitar PFS; sin embargo, se han añadido varias opciones de contexto
de SSL para permitir un mayor control sobre PFS y tratar con cualquier
problema de compatibilidad que pudiera surgir.
-
ecdh_curve
-
Esta opción permite la selección de una curva específica a emplear con cifradores
ECDH. Si no se especifca, se empleará prime256v1
.
-
dh_param
-
Una ruta a un fichero que contiene parámetros para el intercambio de claves Diffie-Hellman,
tal como el creado por el siguiente comando:
openssl dhparam -out /path/to/my/certs/dh-2048.pem 2048
-
single_dh_use
-
Si se establece a true
, se creará un nuevo par de claves cuando se emplean
parámetros Diffie-Hellman, mejorando así el secreto hacia adelante.
-
single_ecdh_use
-
Si se establece a true
, se generará siempre un nuevo par de claves cuando se
negocian cifradores ECDH. Esto mejora el secreto hacia adelante.
Selección de la versión de SSL/TLS
Ahora es posible seleccionar versiones específicas de SSL y TLS mediante la
opción de contexto crypto_method
de SSL o estableciendo un
transporte esepecífico al crear una envoltura de flujos (por ejemplo, llamando a
stream_socket_client() o
stream_socket_server()).
La opción de contexto crypto_method
de SSL acepta una
máscara de bit que enumere los protocolos que están permitidos, como lo hace
crypto_type
de
stream_socket_enable_crypto().
Versiones de protocolo seleccionadas y opciones correspondientes
Protocolo/s |
Indicador del cliente |
Indicador del servidor |
Transporte |
---|
Cualquier versión de TLS o SSL |
STREAM_CRYPTO_METHOD_ANY_CLIENT |
STREAM_CRYPTO_METHOD_ANY_SERVER |
ssl:// |
Cualquier versión de TLS |
STREAM_CRYPTO_METHOD_TLS_CLIENT |
STREAM_CRYPTO_METHOD_TLS_SERVER |
tls:// |
TLS 1.0 |
STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_0_SERVER |
tlsv1.0:// |
TLS 1.1 |
STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_1_SERVER |
tlsv1.1:// |
TLS 1.2 |
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_2_SERVER |
tlsv1.2:// |
SSL 3 |
STREAM_CRYPTO_METHOD_SSLv3_CLIENT |
STREAM_CRYPTO_METHOD_SSLv3_SERVER |
sslv3:// |
Soporte para SPKI
Se ha añadido soporte para generar, extraer y verificar claves públicas firmadas
y retos (SPKAC por sus siglas en inglés). Se han añadido
openssl_spki_new(), openssl_spki_verify(),
openssl_spki_export_challenge(), y
openssl_spki_export() para crear, verificar y
exportar claves públicas PEM y retos asociados de SPKAC generadas desde
un elemento KeyGen
de HTML5.
-
openssl_spki_new
-
Genera una nueva SPKAC usando una clave privada, un string con un reto y un
algoritmo de hash.
-
openssl_spki_verify
-
Verifica la SPKAC provista.
-
openssl_spki_export_challenge
-
Exporta retos asociados desde la SPKAC provista.
-
openssl_spki_export
-
Exporta la clave pública RSA con formato PEM desde la SPKAC.