Der folgende Code sollte grundsätzlich den Inhalt von https://badssl.com zurückgeben
(with-current-buffer
(url-retrieve-synchronously "https://badssl.com")
(buffer-string))
Aber mit meinem 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
unter OS X 10.10.5, ausgeführt mit -Q
, zeigt es mir stattdessen diese Meldung:
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
und fragt, ob das Zertifikat akzeptiert werden soll - Nein / Sitzung / Immer. Es funktioniert dann, wenn ich das Zertifikat akzeptiere.
Ich habe nicht das gleiche Problem mit zum Beispiel wget. Wget lädt https://badssl.com korrekt herunter (ohne die Frage zu stellen) und lehnt https://self-signed.badssl.com ab .
Darüber hinaus scheint es zwei separate Anpassungsgruppen zu geben - gnutls und tls. Ich habe zuvor Emacs mit Unterstützung für Gnutls ( gnutls-available-p
Retouren t
) kompiliert . Gnutls wurde mit Homebrew installiert.
Wenn ich festgelegt gnutls-verify-error
auf t
, erhalte ich stattdessen die Fehler
gnutls-negotiate: Certificate validation failed badssl.com, verification code 42
Vermutlich wurden im ersten Beispiel keine Nüsse verwendet. Unter OS X ist keine der in gnutls-trustfiles
(in /usr/ssl
und /etc/ssl
) genannten Dateien vorhanden.
Wie kann ich Emacs so konfigurieren, dass unter OS X die standardmäßigen vertrauenswürdigen Stammzertifikate verwendet werden?
Edit: Wenn wir installieren libressl
von homebrew, und fügen Sie /opt/brew/etc/libressl/cert.pem
zu gnutls-trustfiles
, das Problem verschwindet bei der Verwendung von gnutls-verify-error
Satz zu t.
Bearbeiten 2: In meinen Tests schien es nicht so, als ob der Wert von tls-certtool-program
tatsächlich verwendet wurde, aber es kann trotzdem für OS X falsch sein: Das Standard-Zertifikatstool unter OS X ist nicht das von tls.el und mit Homebrews Gnutls erforderliche GnuTLS-Zertifikatstool Ich denke, es sollte stattdessen gnutls-certtool sein.
../emacs/configure --with-ns CPPFLAGS=-I/opt/brew/include LDFLAGS=-L/opt/brew/lib
(../emacs
ein Klon vongit://git.savannah.gnu.org/emacs.git
) dannmake
undmake install
. Die Konfigurationsausgabe gibt an, dass sie verwendet wird-lgnutls
.Antworten:
Hinzufügen
/private/etc/ssl/cert.pem
zugnutls-trustfiles
:Customize variable:
gnutls-trustfiles[INS]
Bundle filename:
/private/etc/ssl/cert.pem[ Apply and Save ]
quelle
Um dieses Problem zu lösen, scheint es ausreichend zu sein:
gnutls-verify-error
auft
, undgnutls-trustfiles
- Die Standardeinstellung für diese Liste enthält keine vorhandenen Dateien unter OS X und scheint nicht standardmäßig den Systemschlüsselbund zu verwenden.Dies kann zum Beispiel durch Installieren
libressl
von Homebrew und Hinzufügen der Datei$(brew --prefix)/etc/libressl/cert.pem
erfolgen. Laut Homebrew wird diese Datei aus dem Systemschlüsselbund erstellt. Wenn Sie die Variablegnutls-log-level
auf einen positiven Wert setzen, wird diese Datei tatsächlich verwendet.Hinweis: Mit diesen Einstellungen erhalte ich eine zusätzliche Nachricht von gnutls
Dies kann behoben werden, indem
gnutls-min-prime-bits
ein Wert festgelegt wird, der höher als der Emacs-Standardwert (256) und höher als der Wert ist, den gnutls für unsicher hält (768), z. B. 3072, siehe http://gnutls.org/manual/html_node/Selecting-cryptographic-key- Größen.html sowie http://www.keylength.com/en/3/ - Hiermit wird die Mindestgruppengröße für den Diffie-Hellman-Schlüsselaustausch festgelegt.quelle
Das Hinzufügen
/private/etc/ssl/cert.pem
scheint den Job zu erledigen.quelle