sec_error_unknown_issuer - cURL Error de conexión SSL 35 con error NSS-5961
nss error 12286 (5)
Tengo un servidor remoto de Windows 7 al que solo se puede acceder a través de HTTPS en el puerto 768. El servidor está utilizando un certificado firmado de una CA que figura en el servidor local de CentOS.
Cuando trato de acceder al servidor remoto a través de cURL usando el siguiente comando, se produce un error de la siguiente manera:
[usr@serv certs]# curl -3 -v https://1.1.1.1:768/user/login
* About to connect() to 1.1.1.1 port 768 (#0)
* Trying 1.1.1.1... connected
* Connected to 1.1.1.1 (1.1.1.1) port 768 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* NSS error -5961
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error
(Tenga en cuenta que la dirección IP se ha ocultado por razones de seguridad).
Estoy ejecutando la siguiente versión de cURL:
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Vale la pena señalar que esto está funcionando en otros dos servidores remotos que ejecutan Windows XP en lugar de Windows 7.
He intentado forzar a cURL a usar SSLv3 (usando la bandera -3 y la bandera -SSLv3) sin éxito.
Acabo de probar el mismo comando CURL en una Raspberry Pi que ejecuta Raspbian y he podido conectar con éxito. Por lo tanto, creo que puede ser un problema con la versión de cURL en uso en el servidor CentOS. La pi frambuesa está ejecutando la siguiente versión:
curl 7.26.0 (arm-unknown-linux-gnueabihf) libcurl/7.26.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.2 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: Debug GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
Este error también se emite cuando el servidor no admite el protocolo ssl. Intente especificar todas las variantes / protocolos en el archivo server.xml.
Esto también sucederá cuando los cifrados entre el cliente y el servidor no se superpongan.
Por ejemplo, el servidor solo acepta el cifrado ECHDE pero el cliente (alguna versión anterior enrollada con nss) no tenía este cifrado.
en este caso, el servidor enviará un TCP RST al cliente para finalizar el intento de conexión SSL cuando detecte que no se superpuso ningún cifrado (el cliente incluirá el cifrado admitido en el ''cliente hola'').
Recientemente me encontré con el mismo problema en una caja de CentOS 6. Resultó que el servidor no se había actualizado durante bastante tiempo y que la versión NSS era demasiado antigua. Se corrigió actualizando tanto el curl como el NSS:
yum update -y nss curl libcurl
curl
with NSS lee los certificados de Root CA por defecto en "/etc/pki/tls/certs/ca-bundle.crt"
en el formato PEM.
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
Puede especificar otro (su) certificado de CA (o un paquete en la base de datos compartida de NSS ) mediante la opción de --cacert
con el archivo PEM que contiene el (los) certificado (s) de CA.
Si no especifica el certificado manualmente con la opción --cacert
, NSS intenta seleccionar el correcto de la base de datos de NSS (ubicada en /etc/pki/nssdb
) automáticamente. Puede especificar su apodo por la opción de --cert
, esto debería ser suficiente si la clave está incrustada en el certificado; si no, puede especificar el archivo PEM con la clave de certificado usando la --key
. Si la clave está protegida por una frase de paso, puede asignarla mediante la opción de enrollamiento --pass
para que pueda importar su certificado a la base de datos compartida NSS usando las nss-tools ( yum install nss-tools
)
Añadiendo un certificado (línea de comando común)
certutil -d sql:/etc/pki/nssdb -A -t <TRUSTARGS> -n <certificate nickname> -i <certificate filename>
Acerca de TRUSTARGS
Especifique los atributos de confianza para modificar en un certificado existente o para aplicar a un certificado al crearlo o agregarlo a una base de datos.
Hay tres categorías de confianza disponibles para cada certificado, expresadas en este orden: "SSL, correo electrónico, firma de objetos". En cada posición de categoría, utilice cero o más de los siguientes códigos de atributo:
- p prohibido (explícitamente desconfiado)
- P compañero de confianza
- c valida CA
- T CA confiable para emitir certificados de cliente (implica c)
- C CA confiable para emitir certificados de servidor (solo SSL) (implica c)
- u Certificado puede ser utilizado para la autenticación o firma
- w Enviar advertencia (usar con otros atributos para incluir una advertencia cuando el certificado se usa en ese contexto)
Los códigos de atributo para las categorías están separados por comas, y todo el conjunto de atributos entre comillas. Por ejemplo:
-t "TCu, Cu, Tuw"
Confiar en un certificado de CA raíz para emitir certificados de servidor SSL
certutil -d sql:/etc/pki/nssdb -A -t "C,," -n <certificate nickname> -i <certificate filename>
Importar un certificado de CA intermedio
certutil -d sql:/etc/pki/nssdb -A -t ",," -n <certificate nickname> -i <certificate filename>
Confiando en un certificado de servidor autofirmado
certutil -d sql:/etc/pki/nssdb -A -t "P,," -n <certificate nickname> -i <certificate filename>
Agregar un certificado personal y una clave privada para la autenticación de cliente SSL
pk12util -d sql:/etc/pki/nssdb -i PKCS12_file_with_your_cert.p12
Listado de todos los certificados almacenados en NSS DB
certutil -d sql:/etc/pki/nssdb -L
Listado de detalles de un certificado
certutil -d sql:/etc/pki/nssdb -L -n <certificate nickname>
Borrando un certificado
certutil -d sql:/etc/pki/nssdb -D -n <certificate nickname>
Espero que esto ayude.
Qué esta pasando
Parece que está experimentando un problema de tiempo de espera al conectarse al servidor de Windows 7.
Soluciones posibles
Una posible answer indica que la causa raíz del error 5961 resultó ser un problema de configuración de MTU de red. No está claro si tiene acceso al servidor de Windows 7 o los componentes completos del entorno para identificar la causa exacta del tiempo de espera que está causando que la conexión falle. Revisaría la MTU del servidor de Windows 7 y compararía la configuración de la MTU con la de los otros servidores. Si encuentra que necesita modificar la configuración, puede seguir este procedure .