Wie kann ich eine HTTPS-URL unter Mac OS X abrufen, ohne vor einer nicht vertrauenswürdigen Behörde gewarnt zu werden?


7

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-24unter 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-pRetouren t) kompiliert . Gnutls wurde mit Homebrew installiert.

Wenn ich festgelegt gnutls-verify-errorauf 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/sslund /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 libresslvon homebrew, und fügen Sie /opt/brew/etc/libressl/cert.pemzu gnutls-trustfiles, das Problem verschwindet bei der Verwendung von gnutls-verify-errorSatz zu t.

Bearbeiten 2: In meinen Tests schien es nicht so, als ob der Wert von tls-certtool-programtatsä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.


Ich kann dieses Verhalten mit dem aktuellen Emacs-Trunk nicht reproduzieren. Ihre ist ziemlich alt, bitte bauen Sie den aktuellen Kofferraum und versuchen Sie es erneut.

@lunaryorn Ich bekomme das gleiche Problem mit dem aktuellen Kofferraum.
Kirill

Wie hast du Emacs gebaut? Welche Flags haben Sie besonders benutzt?

@unaryorn ../emacs/configure --with-ns CPPFLAGS=-I/opt/brew/include LDFLAGS=-L/opt/brew/lib( ../emacsein Klon von git://git.savannah.gnu.org/emacs.git) dann makeund make install. Die Konfigurationsausgabe gibt an, dass sie verwendet wird -lgnutls.
Kirill

@lunaryorn Erhalten Sie im Beispiel einen Fehler (wie erwartet) beim Herstellen einer Verbindung zu expired.badssl.com oder self-signed.badssl.com anstelle von badssl.com?
Kirill

Antworten:


8

Hinzufügen /private/etc/ssl/cert.pemzu gnutls-trustfiles:

  1. M-x Customize-Variable
  2. Customize variable: gnutls-trustfiles
  3. Wählen Sie den letzten aus [INS]
  4. Bundle filename: /private/etc/ssl/cert.pem
  5. Wählen [ Apply and Save ]

4

Um dieses Problem zu lösen, scheint es ausreichend zu sein:

  • Setzen Sie gnutls-verify-errorauf t, und
  • Fügen Sie eine geeignete vertrauenswürdige Stammzertifikatsdatei hinzu gnutls-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 libresslvon Homebrew und Hinzufügen der Datei $(brew --prefix)/etc/libressl/cert.pemerfolgen. Laut Homebrew wird diese Datei aus dem Systemschlüsselbund erstellt. Wenn Sie die Variable gnutls-log-levelauf einen positiven Wert setzen, wird diese Datei tatsächlich verwendet.

Hinweis: Mit diesen Einstellungen erhalte ich eine zusätzliche Nachricht von gnutls

gnutls.c: [audit] Beachten Sie, dass die Sicherheitsstufe des Diffie-Hellman-Schlüsselaustauschs auf 256 Bit gesenkt wurde und dies möglicherweise die Entschlüsselung der Sitzungsdaten ermöglicht

Dies kann behoben werden, indem gnutls-min-prime-bitsein 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.


2
Gibt es einen Plan, damit Emacs standardmäßig richtig funktioniert? Das scheint eine Menge Arbeit zu sein.
Radon Rosborough

0

Das Hinzufügen /private/etc/ssl/cert.pemscheint den Job zu erledigen.


5
Bitte klären Sie, wie / wo es hinzugefügt werden soll und was "es" ist (meinen Sie eine Datei oder einen Dateinamen?),
Stefan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.