Làm cách nào tôi có thể truy xuất URL HTTPS trên Mac OS X mà không có cảnh báo về cơ quan không đáng tin cậy?


7

Các mã sau đây về nguyên tắc phải trả về nội dung của https://badssl.com

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

Nhưng với 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 của tôi, chạy cùng -Q, nó thay vào đó hiển thị cho tôi thông báo này:

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

và hỏi liệu có chấp nhận chứng chỉ - Không / Phiên / Luôn luôn. Sau đó nó hoạt động nếu tôi chấp nhận chứng chỉ.

Tôi không gặp vấn đề tương tự, ví dụ, wget. Quên tải xuống chính xác (không đặt câu hỏi) https://badssl.com và từ chối https://elf-sign.badssl.com .

Hơn nữa, dường như có hai nhóm tùy chỉnh riêng biệt - gnutls và tls. Trước đây tôi đã biên dịch emacs với sự hỗ trợ cho gnutls ( gnutls-available-ptrả về t). Gnutls đã được cài đặt với homebrew.

Nếu tôi đặt gnutls-verify-errorthành t, thay vào đó tôi nhận được lỗi

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

vì vậy, có lẽ gnutls đã không được sử dụng trong ví dụ đầu tiên. Trên OS X không có tệp nào được đề cập trong gnutls-trustfiles(trong /usr/ssl/etc/ssl) tồn tại.

Vậy làm cách nào tôi có thể định cấu hình emacs để sử dụng chứng chỉ gốc đáng tin cậy mặc định trên OS X?

Chỉnh sửa: Nếu tôi cài đặt libressltừ homebrew và thêm /opt/brew/etc/libressl/cert.pemvào gnutls-trustfiles, sự cố sẽ biến mất khi sử dụng gnutls-verify-errorset to t.

Chỉnh sửa 2: Trong thử nghiệm của tôi, dường như giá trị của tls-certtool-programnó không thực sự được sử dụng, nhưng dù sao thì nó cũng có thể không đúng với OS X: certtool mặc định trên OS X không phải là certtool được yêu cầu bởi tls.el và với các gnutls của homebrew Tôi nghĩ rằng nó nên là gnutls-certtool thay thế.


Tôi không thể tái tạo hành vi này với thân cây Emacs hiện tại. Của bạn là khá cũ, xin vui lòng xây dựng thân cây hiện tại và thử lại.

@lunaryorn Tôi gặp vấn đề tương tự với thân cây hiện tại.
Kirill

Làm thế nào bạn xây dựng Emacs? Đặc biệt, những gì bạn đã sử dụng cờ?

@lunaryorn ../emacs/configure --with-ns CPPFLAGS=-I/opt/brew/include LDFLAGS=-L/opt/brew/lib( ../emacslà một bản sao của git://git.savannah.gnu.org/emacs.git) sau đó makemake install. Đầu ra cấu hình cho biết nó sử dụng -lgnutls.
Kirill

@lunaryorn Bạn có gặp lỗi (như mong đợi) khi kết nối với expired.badssl.com hoặc self-sign.badssl.com thay vì badssl.com trong ví dụ không?
Kirill

Câu trả lời:


8

Thêm /private/etc/ssl/cert.pemvào gnutls-trustfiles:

  1. M-x biến tùy chỉnh
  2. Customize variable: gnutls-tin tưởng
  3. Chọn cái cuối cùng [INS]
  4. Bundle filename: /private/etc/ssl/cert.pem
  5. Lựa chọn [ Apply and Save ]

4

Để giải quyết vấn đề này có vẻ như đủ:

  • Đặt gnutls-verify-errorthành t
  • Thêm tệp chứng chỉ gốc đáng tin cậy thích hợp vào gnutls-trustfiles- cài đặt mặc định cho danh sách đó không bao gồm bất kỳ tệp hiện có nào trên OS X và dường như không mặc định sử dụng khóa hệ thống.

Điều này có thể được thực hiện, ví dụ, bằng cách cài đặt libressltừ homebrew và thêm tệp $(brew --prefix)/etc/libressl/cert.pem- homebrew cho biết tệp này được tạo từ móc khóa hệ thống. Đặt biến gnutls-log-levelthành giá trị dương cho thấy nó thực sự sử dụng tệp đó.

Lưu ý: Với các cài đặt này, tôi nhận được một thông báo không liên quan thêm từ gnutls nói

gnutls.c: [aud] Lưu ý rằng mức bảo mật của trao đổi khóa Diffie-Hellman đã được hạ xuống còn 256 bit và điều này có thể cho phép giải mã dữ liệu phiên

Điều này có thể được sửa bằng cách đặt gnutls-min-prime-bitsthành giá trị cao hơn giá trị mặc định của emacs (256) và cao hơn giá trị mà gnutls coi là không an toàn (768), chẳng hạn như 3072, xem http://gnutls.org/manual/html_node/Selecting-cryptographic-key- size.html cũng như http://www.keylength.com/en/3/ - điều này đặt kích thước nhóm tối thiểu để trao đổi khóa Diffie-Hellman.


2
Có kế hoạch nào để Emacs hoạt động chính xác theo mặc định không? Điều này có vẻ như rất nhiều công việc khủng khiếp.
Radon Rosborough

0

Thêm /private/etc/ssl/cert.pemdường như để làm công việc.


5
Vui lòng làm rõ cách / nơi để thêm nó và làm rõ "nó" là gì (ý bạn là một tệp hoặc tên tệp?),
Stefan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.