ssl - recomienda - instalar certificado java keytool
Comando OpenSSL para verificar si un servidor está presentando un certificado (3)
En mi caso, el certificado SSL no se configuró para todos los sitios (solo para la versión www a la que se redirigió la versión que no es www). Estoy usando la forja de Laravel y la configuración de Nginx Boilerplate
Tenía la siguiente configuración para mi sitio nginx:
/etc/nginx/sites-available/timtimer.at
server {
listen [::]:80;
listen 80;
server_name timtimer.at www.timtimer.at;
include h5bp/directive-only/ssl.conf;
# and redirect to the https host (declared below)
# avoiding http://www -> https://www -> https:// chain.
return 301 https://www.timtimer.at$request_uri;
}
server {
listen [::]:443 ssl spdy;
listen 443 ssl spdy;
# listen on the wrong host
server_name timtimer.at;
### ERROR IS HERE ###
# You eighter have to include the .crt and .key here also (like below)
# or include it in the below included ssl.conf like suggested by H5BP
include h5bp/directive-only/ssl.conf;
# and redirect to the www host (declared below)
return 301 https://www.timtimer.at$request_uri;
}
server {
listen [::]:443 ssl spdy;
listen 443 ssl spdy;
server_name www.timtimer.at;
include h5bp/directive-only/ssl.conf;
# Path for static files
root /home/forge/default/public;
# FORGE SSL (DO NOT REMOVE!)
ssl_certificate /etc/nginx/ssl/default/2658/server.crt;
ssl_certificate_key /etc/nginx/ssl/default/2658/server.key;
# ...
# Include the basic h5bp config set
include h5bp/basic.conf;
}
Entonces, después de mover (cortar y pegar) la siguiente parte del archivo /etc/nginx/h5bp/directive-only/ssl.conf todo funcionó como se esperaba:
# FORGE SSL (DO NOT REMOVE!)
ssl_certificate /etc/nginx/ssl/default/2658/server.crt;
ssl_certificate_key /etc/nginx/ssl/default/2658/server.key;
Por lo tanto, no es suficiente tener las claves especificadas solo para la versión www, ¡si solo llama directamente a la versión de www!
Estoy tratando de ejecutar un comando openssl para restringir lo que podría ser el problema SSL al tratar de enviar un mensaje de salida de nuestro sistema.
Encontré este comando en otro tema: Usar openssl para obtener el certificado de un servidor
openssl s_client -connect ip:port -prexit
El resultado de esto resulta en
CONNECTED(00000003)
15841:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 121 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
¿Esto significa que el servidor no presenta ningún certificado? Probé con otros sistemas en un puerto IP diferente y presentan un certificado con éxito.
¿La autenticación mutua afecta este comando con -prexit?
--Actualizar--
Ejecuté el comando otra vez
openssl s_client -connect ip:port -prexit
Y obtengo esta respuesta ahora
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 121 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
Agregué -ssl3 al comando
openssl s_client -connect ip:port -prexit -ssl3
Respuesta:
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : SSLv3
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Krb5 Principal: None
Start Time: 1403907236
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
También probando -tls1
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Krb5 Principal: None
Start Time: 1403907267
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
Estaba depurando un problema de SSL hoy que resultó en el mismo error de write:errno=104
. Eventualmente descubrí que el motivo de este comportamiento era que el servidor requería SNI (extensiones TLS de nombre de servername
) para funcionar correctamente. Al suministrar la opción -servername
a openssl, se conectó correctamente:
openssl s_client -connect domain.tld:443 -servername domain.tld
Espero que esto ayude.
15841:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
...
SSL handshake has read 0 bytes and written 121 bytes
Esta es una falla de apretón de manos. El otro lado cierra la conexión sin enviar ningún dato ("leer 0 bytes"). Puede ser que el otro lado no hable SSL en absoluto. Pero he visto errores similares en la implementación de SSL roto, que no entienden la versión más nueva de SSL. Pruebe si obtiene una conexión SSL agregando -ssl3
a la línea de comando de s_client.