O código a seguir deve, em princípio, retornar o conteúdo de https://badssl.com
(with-current-buffer
(url-retrieve-synchronously "https://badssl.com")
(buffer-string))
Mas com o meu 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
no OS X 10.10.5, execute with -Q
, ele me mostra esta mensagem:
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
e pergunta se aceita o certificado - Não / Sessão / Sempre. Funciona se eu aceitar o certificado.
Eu não tenho o mesmo problema com, por exemplo, o wget. O Wget baixa corretamente (sem fazer a pergunta) https://badssl.com e rejeita https://self-signed.badssl.com .
Além disso, parece haver dois grupos de personalização separados - gnutls e tls. Eu compilei anteriormente o emacs com suporte para gnutls ( gnutls-available-p
retornos t
). Gnutls foi instalado com homebrew.
Se eu definir gnutls-verify-error
como t
, em vez disso, recebo o erro
gnutls-negotiate: Certificate validation failed badssl.com, verification code 42
então presumivelmente gnutls não estava sendo usado no primeiro exemplo. No OS X, nenhum dos arquivos mencionados em gnutls-trustfiles
(in /usr/ssl
e /etc/ssl
) existe.
Então, como posso configurar o emacs para usar os certificados raiz confiáveis padrão no OS X?
Editar: se eu instalar a libressl
partir do homebrew e adicionar /opt/brew/etc/libressl/cert.pem
a gnutls-trustfiles
, o problema desaparece ao usar gnutls-verify-error
definido como t.
Edit 2: Nos meus testes, parecia que o valor de tls-certtool-program
realmente não era usado, mas pode estar incorreto para o OS X de qualquer maneira: a certtool padrão no OS X não é a certnol GnuTLS exigida pelo tls.el e com os gnutls do homebrew Eu acho que deveria ser gnutls-certtool.
../emacs/configure --with-ns CPPFLAGS=-I/opt/brew/include LDFLAGS=-L/opt/brew/lib
(../emacs
sendo um clone degit://git.savannah.gnu.org/emacs.git
) entãomake
emake install
. A saída de configuração diz que usa-lgnutls
.Respostas:
Adicionar
/private/etc/ssl/cert.pem
agnutls-trustfiles
:Customize variable:
gnutls-trustfiles[INS]
Bundle filename:
/private/etc/ssl/cert.pem[ Apply and Save ]
fonte
Para resolver esse problema, parece suficiente:
gnutls-verify-error
comot
egnutls-trustfiles
- a configuração padrão para essa lista não inclui nenhum arquivo existente no OS X e parece não usar o conjunto de chaves do sistema.Isso pode ser feito, por exemplo, instalando a
libressl
partir do homebrew e adicionando o arquivo$(brew --prefix)/etc/libressl/cert.pem
- o homebrew diz que esse arquivo é criado a partir do chaveiro do sistema. Definir a variávelgnutls-log-level
como um valor positivo mostra que ele realmente usa esse arquivo.Nota: Com essas configurações, recebo uma mensagem não relacionada extra de gnutls dizendo
Isso pode ser corrigido configurando-
gnutls-min-prime-bits
se um valor maior que o padrão emacs (256) e maior que o que o gnutls considera inseguro (768) como o 3072, consulte http://gnutls.org/manual/html_node/Selecting-cryptographic-key- size.html e http://www.keylength.com/en/3/ - define o tamanho mínimo do grupo para a troca de chaves Diffie-Hellman.fonte
Adicionar
/private/etc/ssl/cert.pem
parece fazer o trabalho.fonte