El siguiente código debería, en principio, devolver el contenido de https://badssl.com
(with-current-buffer
(url-retrieve-synchronously "https://badssl.com")
(buffer-string))
Pero con mi GNU Emacs 25.0.50.1 (x86_64-apple-darwin13.4.0, NS appkit-1265.21 Version 10.9.5 (Build 13F1112)) of 2015-08-24
en OS X 10.10.5, ejecutar con -Q
, en su lugar me muestra este mensaje:
Certificate information
Issued by: COMODO RSA Domain Validation Secure Server CA
Issued to: Domain Control Validated
Hostname: *.badssl.com
Public key: RSA, signature: RSA-SHA256
Protocol: TLS1.2, key: ECDHE-RSA, cipher: AES-128-GCM, mac: AEAD
Security level: Medium
Valid: From 2015-04-09 to 2016-07-07
The TLS connection to badssl.com:443 is insecure for the following
reasons:
the certificate was signed by an unknown and therefore untrusted authority
certificate could not be verified
y pregunta si acepta el certificado - No / Sesión / Siempre. Entonces funciona si acepto el certificado.
No tengo el mismo problema con, por ejemplo, wget. Wget descarga correctamente (sin hacer la pregunta) https://badssl.com y rechaza https://self-signed.badssl.com .
Además, parece haber dos grupos de personalización separados: gnutls y tls. Anteriormente he compilado emacs con soporte para gnutls ( gnutls-available-p
devoluciones t
). Gnutls se instaló con homebrew.
Si configuro gnutls-verify-error
a t
, en su lugar obtengo el error
gnutls-negotiate: Certificate validation failed badssl.com, verification code 42
así que presumiblemente no se usaba gnutls en el primer ejemplo. En OS X, ninguno de los archivos mencionados en gnutls-trustfiles
(en /usr/ssl
y /etc/ssl
) existe.
Entonces, ¿cómo puedo configurar emacs para usar los certificados raíz de confianza predeterminados en OS X?
Editar: si instalo libressl
desde homebrew y agrego /opt/brew/etc/libressl/cert.pem
a gnutls-trustfiles
, el problema desaparece cuando utilizo gnutls-verify-error
set to t.
Edición 2: en mis pruebas, no parecía que el valor de tls-certtool-program
realmente se usara, pero de todos modos puede ser incorrecto para OS X: la herramienta de certificación predeterminada en OS X no es la herramienta de certificación GnuTLS requerida por tls.el, y con gnutls de homebrew Creo que debería ser gnutls-certtool en su lugar.
../emacs/configure --with-ns CPPFLAGS=-I/opt/brew/include LDFLAGS=-L/opt/brew/lib
(../emacs
siendo un clon degit://git.savannah.gnu.org/emacs.git
) entoncesmake
ymake install
. La salida de configuración dice que usa-lgnutls
.Respuestas:
Añadir
/private/etc/ssl/cert.pem
agnutls-trustfiles
:Customize variable:
gnutls-trustfiles[INS]
Bundle filename:
/private/etc/ssl/cert.pem[ Apply and Save ]
fuente
Para resolver este problema, parece suficiente:
gnutls-verify-error
ent
ygnutls-trustfiles
: la configuración predeterminada para esa lista no incluye ningún archivo existente en OS X y no parece ser el uso predeterminado del llavero del sistema.Esto se puede hacer, por ejemplo, instalando
libressl
desde homebrew y agregando el archivo$(brew --prefix)/etc/libressl/cert.pem
: homebrew dice que este archivo se creó a partir del llavero del sistema. Establecer la variablegnutls-log-level
en un valor positivo muestra que realmente usa ese archivo.Nota: Con esta configuración, recibo un mensaje adicional no relacionado de gnutls que dice
Esto se puede solucionar estableciendo
gnutls-min-prime-bits
un valor superior al valor predeterminado de emacs (256) y superior a lo que gnutls considera inseguro (768) como 3072, consulte http://gnutls.org/manual/html_node/Selecting-cryptographic-key- tamaños.html así como http://www.keylength.com/en/3/ : esto establece el tamaño mínimo de grupo para el intercambio de claves Diffie-Hellman.fuente
Agregar
/private/etc/ssl/cert.pem
parece hacer el trabajo.fuente