Giấy chứng nhận ký tự đại diện


18

Tôi đã thiết lập lỗ hổng ở nhà, vì vậy tôi muốn có thể xử lý các yêu cầu cho bất kỳ trang web nào với máy chủ của riêng tôi, để hiển thị trang "trang web này đã bị chặn".

Tôi đang cố gắng thực hiện điều này bằng cách tạo chứng chỉ tự ký cho bất kỳ url nào và cài đặt chứng chỉ này trên thiết bị của tôi. Các lệnh tôi đã sử dụng để tạo chứng chỉ:

openssl genrsa 2048 > pihole.key
openssl req -new -x509 -nodes -days 36500\
    -key pihole.key \
    -subj "/C=NL/ST=Utrecht, Inc./CN=*" \
    -reqexts SAN \
    -config <(cat /etc/ssl/openssl.cnf \
        <(printf "\n[SAN]\nsubjectAltName=DNS:*,DNS:*")) \
    -out pihole.cert
openssl x509 -noout -fingerprint -text < pihole.cert > pihole.info
cat pihole.cert pihole.info > pihole.pem
service apache2 reload

Tôi đã cài đặt chứng chỉ này trên thiết bị windows của mình và windows cho thấy đó là chứng chỉ hợp lệ.

Tuy nhiên, chrome mang lại cho tôi NET::ERR_CERT_COMMON_NAME_INVALIDvà cạnh cho tôi một lỗi tương tự ( DLG_FLAGS_SEC_CERT_CN_INVALID)

Tại sao lại thế này? Là CN = *chỉ không được phép? Làm thế nào tôi có thể đạt được những gì tôi muốn?


Như một lưu ý phụ: Đối với các trang web lớn, trình duyệt của bạn có thể sẽ không chấp nhận bất kỳ chứng chỉ nào bạn quản lý để tạo. Các trang web đó sử dụng ghim chứng chỉ và gửi dấu vân tay của các TLS của họ để đưa vào các trình duyệt đó. Chứng nhận của bạn sẽ không khớp với dấu vân tay được lưu trữ và sẽ bị chặn. Dưới đây là thông tin thêm: noncombatant.org/2015/05/01/about-http-public-key-pinning
Martijn Heemels

certs tự ký có thể có vấn đề như bạn đã phát hiện ra. Thay vào đó, bạn có thể nhìn vào việc nhận được chứng nhận "phù hợp" từ allowencrypt.org - chúng là các ký tự đại diện miễn phí và hỗ trợ. Tùy thuộc vào số lượng máy chủ mà bạn đang cố gắng bảo vệ với * bạn thực sự cần, một (hoặc nhiều) certs từ letencrypt có thể bao phủ bạn
Dave Smylie

2
@DaveSmylie đó là một trình chặn quảng cáo, tôi không sở hữu tên miền.
Daniël van den Berg

1
@Stewart vui lòng đọc bình luận trước của tôi.
Daniël van den Berg

1
Cũng cần lưu ý: nếu bạn đang sử dụng công cụ này cho trình chặn quảng cáo, tốt hơn là chỉ nên âm thầm thả các kết nối đến các máy chủ có liên quan thay vì hiển thị một trang thay thế. 90% quảng cáo hiện đại ban đầu được tải thông qua JavaScript, vì vậy không có khả năng trang thay thế của bạn sẽ có bất kỳ khả năng hiển thị thực sự nào trên trang. Thực sự, nó có thể sẽ phá vỡ mọi thứ, cố gắng tải các tài nguyên không phải là JavaScript dưới dạng Javascript.
Nzall

Câu trả lời:


42

Nó không được phép. Là một bổ sung dành riêng cho giao thức cho xác thực tên máy chủ TLS tiêu chuẩn, tất cả các trình duyệt web chính (máy khách HTTPS) về cơ bản đã đồng ý hạn chế chứng chỉ ký tự đại diện thành "eTLD + 1" - nghĩa là phải có "TLD hiệu quả" cộng thêm một thành phần -wildcard.

Nói chung, điều này có nghĩa là cần ít nhất hai thành phần ( *.example.netkhông sao nhưng *.netkhông phải là trần *). Quy tắc "TLD hiệu quả" mở rộng điều này thành hậu tố đa cấp khi co.ukmọi người sử dụng như "TLD" không thể chia tách trong thực tế. ( *.example.ac.ukĐược phép nhưng *.ac.ukkhông được.)

Bạn có thể kiểm tra cách danh sách hậu tố công khai được triển khai trong Chromiumtrong Mozilla .

Xem thảo luận liên quan trong Security.SE có trích dẫn từ Yêu cầu cơ bản của Diễn đàn CA-Browser (chỉ áp dụng cho các CA WebPKI công khai, nhưng vẫn phản ánh việc triển khai chung):

CA SHALL thu hồi bất kỳ chứng chỉ nào trong đó ký tự đại diện xuất hiện ở vị trí nhãn đầu tiên ngay bên trái của sổ đăng ký “nhãn điều khiển của nhãn hiệu hoặc điều khiển hậu tố công cộng.


Để tránh hạn chế này, hãy xây dựng cơ quan cấp chứng chỉ phát hành chứng chỉ "theo yêu cầu" cho bất kỳ trang web nào bạn cố gắng truy cập. Tôi không biết làm thế nào điều đó sẽ được thực hiện trong bất kỳ máy chủ web thông thường nào, nhưng đây là phương pháp phổ biến được sử dụng bởi các hệ thống đánh chặn TLS thương mại; chương trình chống vi-rút và phần mềm độc hại khác; và các công cụ phát triển như bộ Burp Proxy.

Ví dụ: máy chủ web OpenResty (về cơ bản là Nginx-with-Lua) ssl_certificate_by_luatùy chọn để thực hiện tạo chứng chỉ động. Squid proxy hỗ trợ chứng chỉ bắt chước trong tính năng ssl-gập của nó.

Cũng lưu ý rằng SAN hoàn toàn ghi đè Chủ đề-CN nếu cả hai đều có mặt. Điều này làm cho việc bao gồm CN chủ yếu là dự phòng (trừ khi phần mềm máy khách của bạn quá cũ, nó thiếu hỗ trợ SAN) và đối với các trình duyệt web CA công cộng thậm chí không chấp nhận nó nữa.


Tôi đã tìm thấy về giới hạn TLD + 1 theo kinh nghiệm ở đây trong một dự án trước đó. Cảm ơn vì đã đặt nó ra. +1
Rui F Ribeiro

Cảm ơn câu trả lời công phu của bạn, tôi đoán điều đó giải thích nó yeah. Bạn có tình cờ biết một cách tiếp cận khác mà tôi có thể sử dụng không?
Daniël van den Berg

25
Được nâng cấp cho vị trí chiến lược của "và phần mềm độc hại khác".
Džuris

@ DaniëlvandenBerg: Tôi tình cờ có một đề xuất trong bài viết. Tôi vừa thêm liên kết đến các ví dụ Nginx và Squid.
dùng1686

5

Chỉ có thể có một ký tự đại diện duy nhất trong một chứng chỉ (nghĩa là không *.*.example.com), nó chỉ có thể khớp với một nhãn duy nhất (nghĩa là wwwkhông phải www.example.com), nó chỉ có thể ở vị trí ngoài cùng bên trái (nghĩa là *.www.example.comkhông www.*.example.com) và nó không thể nằm trong hậu tố công khai (tức là không *.com).

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.