信頼できない機関に関する警告なしにMac OS XでHTTPS URLを取得するにはどうすればよいですか?


7

次のコードは、原則としてhttps://badssl.comのコンテンツを返します。

(with-current-buffer
    (url-retrieve-synchronously "https://badssl.com")
  (buffer-string))

しかし、私の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-24OS X 10.10.5では、で実行すると-Q、代わりに次のメッセージが表示されます。

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

証明書を受け入れるかどうかを尋ねます-いいえ/セッション/常に。その後、証明書を受け入れれば機能します。

たとえば、wgetで同じ問題が発生しません。Wgetはhttps://badssl.comを正しくダウンロードし(質問せずに)、https://self-signed.badssl.comを拒否します

さらに、gnutlsとtls という2つの個別のカスタマイズグループがあるようです。私は、以前のgnutls(のためのサポートとのemacsをコンパイルしたgnutls-available-pリターンt)。Gnutlsは自作でインストールされました。

に設定gnutls-verify-errorするとt、代わりにエラーが発生します

gnutls-negotiate: Certificate validation failed badssl.com, verification code 42

したがって、おそらく最初の例ではgnutlsは使用されていません。OS Xでは、gnutls-trustfiles/usr/sslおよび/etc/ssl)に記載されているファイルは存在しません。

では、OS Xでデフォルトの信頼されたルート証明書を使用するようにemacsを構成するにはどうすればよいですか?

編集:libressl自作からインストールしてに追加/opt/brew/etc/libressl/cert.pemgnutls-trustfilesた場合、gnutls-verify-errorset to t を使用すると問題が解決します。

編集2:私のテストでは、の値tls-certtool-programは実際に使用されたようには見えませんが、とにかくOS Xには正しくない可能性があります。OSXのデフォルトのcerttoolは、tls.elが必要とするGnuTLS certtoolではなく、自作のgnutls代わりにgnutls-certtoolにすべきだと思います。


現在のEmacsトランクではこの動作を再現できません。あなたはかなり古いです。現在のトランクを構築して、もう一度試してください。

@lunaryorn現在のトランクで同じ問題が発生します。
Kirill

Emacsをどのように構築しましたか?特に、どのフラグを使用しましたか?

@lunaryorn ../emacs/configure --with-ns CPPFLAGS=-I/opt/brew/include LDFLAGS=-L/opt/brew/lib../emacsのクローンであるgit://git.savannah.gnu.org/emacs.git当時)makemake install。configureの出力には、が使用されていると表示されています-lgnutls
Kirill

@lunaryornこの例では、badssl.comではなく、expired.badssl.comまたはself-signed.badssl.comに接続するときに(予想どおり)エラーが発生しますか?
Kirill

回答:


8

追加/private/etc/ssl/cert.pemするにはgnutls-trustfiles

  1. M-x カスタマイズ変数
  2. Customize variable: gnutls-trustfiles
  3. 最後を選択 [INS]
  4. Bundle filename: /private/etc/ssl/cert.pem
  5. 選択する [ Apply and Save ]

4

この問題を解決するには、次のことで十分なようです。

  • に設定gnutls-verify-errort
  • 適切な信頼されたルート証明書ファイルを追加します。gnutls-trustfilesそのリストのデフォルト設定には、OS Xの既存のファイルが含まれておらず、システムキーチェーンを使用するようにデフォルト設定されていないようです。

これは、たとえば、libresslhomebrewからインストールしてファイルを追加することで実行できます$(brew --prefix)/etc/libressl/cert.pem。homebrewは、このファイルはシステムのキーチェーンから作成されたと言っています。変数gnutls-log-levelを正の値に設定すると、実際にそのファイルを使用することがわかります。

注:これらの設定では、gnutlsから次のような無関係なメッセージが表示されます。

gnutls.c:[監査] Diffie-Hellman鍵交換のセキュリティレベルが256ビットに引き下げられたことに注意してください。これにより、セッションデータの復号化が可能になる場合があります

これはgnutls-min-prime-bits、emacsのデフォルト(256)よりも高い値、および3072などのgnutlsが安全でないと見なす値(768)よりも高い値に設定することで修正できます。http://gnutls.org/manual/html_node/Selecting-cryptographic-key-を参照してください。 sizes.htmlhttp://www.keylength.com/en/3/-これは、Diffie-Hellman鍵交換の最小グループサイズを設定します。


2
Emacsをデフォルトで正しく動作させる計画はありますか?これは大変な作業のようです。
Radon Rosborough、2017

0

追加する/private/etc/ssl/cert.pemとうまくいくようです。


5
追加する方法/場所を明確にし、「それ」が何であるかを明確にしてください(ファイルまたはファイル名を意味しますか?)
Stefan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.