Có thể hạn chế việc sử dụng chứng chỉ gốc cho một tên miền


28

Khách hàng của tôi sử dụng chứng chỉ tự ký cho một ứng dụng để làm việc. Để có thể làm việc, tôi phải cài đặt chứng chỉ gốc mà họ đã sử dụng để ký chứng chỉ.

Có thể định cấu hình chứng chỉ gốc để nó chỉ xác nhận đối với một tên miền?


Chỉ có thể là tôi, nhưng tôi không rõ bạn đang hỏi gì. Trạng thái kết thúc nào bạn đang cố gắng thực hiện? Nếu bạn nhập chứng chỉ gốc của họ vào bộ điều khiển miền tin cậy, thì chỉ các hệ thống trong miền đó sẽ có thể xác thực đối với nó ...
Gravy

Có vẻ như bạn đang nhầm lẫn giữa các chứng chỉ tự ký với việc sử dụng CA gốc không được tin cậy công khai. Một ứng dụng được cấu hình để sử dụng chứng chỉ tự ký là rất tệ, vì ứng dụng sẽ cần được cấu hình để bỏ qua các lỗi xác thực chứng chỉ. Sử dụng CA gốc không được tin cậy công khai thực sự khá phổ biến.
Greg Askew

Bạn có máy chủ CA nội bộ không?
Tiền điện tử 23/2/2015

1
Một CA có thể tự giới hạn ở một số miền nhất định với các ràng buộc tên , nhưng áp dụng các ràng buộc hồi tố cho CA của người khác là một vấn đề khác.
Matt Nordhoff

3
không có sự khác biệt Bạn cũng có thể áp dụng các ràng buộc tên cho CA bên thứ 3. Bạn chỉ cần ký chứng chỉ CA gốc của bên thứ 3 bằng cách sử dụng CA riêng của mình và xuất bản chứng chỉ chéo được tạo. Trong trường hợp này, chuỗi nước ngoài sẽ kết thúc với chuỗi riêng của bạn thông qua chứng chỉ chéo bị hạn chế.
Tiền điện tử 23/2/2015

Câu trả lời:


24

Như một quy luật của:

Không , ngụ ý trong việc tin tưởng chứng chỉ CA của khách hàng là sự tin tưởng vào mọi chứng chỉ được ký bởi CA.

Tôi không biết bất kỳ ứng dụng / thư viện nào có tùy chọn dễ dàng cho phép bạn là người dùng cuối chọn bạn sẽ tin tưởng khách hàng của mình hoặc bất kỳ chứng chỉ CA nào khác chỉ dành cho một số tên miền (phụ) nhất định, chỉ dành cho *. example.com và * .example.org và không có gì khác.

Mozilla có mối quan tâm tương tự về việc CA được chính phủ tài trợ hiện tại là một điểm chú ý mở và ví dụ Chrome có thêm kiểm tra để truy cập các trang web của Google, đó là cách chứng nhận * .google.com lừa đảo và sự thỏa hiệp của Diginotar CA trở nên công khai .

Nhưng ngay cả khi bạn không tin tưởng CA, bạn vẫn có thể nhập / tin tưởng một chứng chỉ máy chủ cụ thể được ký bởi CA đó, điều này sẽ ngăn cảnh báo SSL cho tên máy chủ trong chứng chỉ đó. Điều đó sẽ làm cho ứng dụng của bạn hoạt động mà không có lỗi hoặc khiếu nại.

Ngoại lệ:

Một tùy chọn không được sử dụng nhiều của tiêu chuẩn PKI X.509v3 là tiện ích mở rộng ràng buộc tên , cho phép chứng chỉ CA chứa danh sách trắng và danh sách đen của các mẫu tên miền được ủy quyền để cấp chứng chỉ.

Bạn có thể may mắn và khách hàng của bạn đã tự kiềm chế khi họ thiết lập cơ sở hạ tầng PKI của họ và bao gồm ràng buộc Tên đó trong chứng chỉ CA của họ. Sau đó, bạn có thể nhập chứng chỉ CA của họ trực tiếp và biết rằng nó chỉ có thể xác thực một phạm vi tên miền giới hạn.


2
@CryptoGuy: Một CA nội bộ cũng có thể cấp chứng chỉ cho các tên miền bên ngoài. Khi bạn tin tưởng CA nội bộ của mình, không có hạn chế nào chỉ có chứng chỉ cho miền (Active Directory hoặc DNS) của riêng bạn example.comhoặc *.ad.example.com là hợp lệ. CA nội bộ của bạn cũng có thể cấp giấy chứng nhận cho *.example.bankphép một cuộc tấn công trung gian tốt đẹp và rình mò thông tin ngân hàng trực tuyến của bạn.
HBruijn

1
Chà "mọi thứ" không hoàn toàn chính xác. Có những thứ như danh sách thu hồi chứng chỉ. Nhưng điều đó không thay đổi điểm mấu chốt.
Ben Voigt

1
xin lỗi, bạn lại không đúng Bạn có thể hạn chế CA bên thứ 3 tin cậy các chứng chỉ (từ CA đó) được cấp cho danh sách tên bạn muốn. Về CA nội bộ của riêng bạn, tôi cho rằng sự tin tưởng chắc chắn. Nếu bạn không tin tưởng CA của chính mình, thì có gì đó không ổn với CNTT của bạn. Tôi muốn nói rằng bằng cách có một CA riêng, OP có thể thiết lập niềm tin một phần cho CA bên thứ 3 (bằng cách giới hạn tên mà họ tin tưởng).
Tiền điện tử 23/2/2015

3
Đối với bài đăng đã chỉnh sửa của bạn: ngay cả khi CA bên thứ 3 không có tiện ích mở rộng ràng buộc tên, có thể áp dụng chúng bằng cách sử dụng máy chủ CA nội bộ của bạn thông qua chứng nhận chéo. Trong trường hợp này, chuỗi chứng chỉ sẽ như sau: chứng chỉ SSL lá -> chứng chỉ chéo -> chứng chỉ CA của bạn -> chứng chỉ gốc nội bộ của bạn. Mẹo nhỏ là bạn ký CA bên thứ 3 bằng cách sử dụng CA nội bộ của bạn. Và chứng chỉ chéo sẽ có tất cả các ràng buộc cần thiết.
Crypt32

1
CryptoGuy cho biết điều này là có thể, nhưng việc tìm kiếm chi tiết triển khai là một thách thức. Làm thế nào về một câu trả lời mô tả làm thế nào điều này có thể được thực hiện? Và có thể một cuộc thảo luận về các nền tảng hỗ trợ nameConstraint.
jorfus

17

@CryptoGuy đã có một câu trả lời khá hay ở đây, nhưng tôi muốn mở rộng về nó.

Để diễn dải:

Bạn có thể hạn chế CA bên thứ 3 tin cậy các chứng chỉ (từ CA đó) được cấp cho danh sách tên bạn muốn. Ngay cả khi CA bên thứ 3 không có tiện ích mở rộng ràng buộc tên, bạn vẫn có thể áp dụng chúng bằng cách sử dụng máy chủ CA nội bộ của riêng bạn thông qua chứng nhận chéo. Mẹo nhỏ là bạn ký CA bên thứ 3 bằng cách sử dụng CA nội bộ của bạn.

chứng chỉ SSL lá -> chứng chỉ chéo -> chứng chỉ CA của bạn -> chứng chỉ gốc nội bộ của bạn.

Và đây là cách bạn thực hiện công việc đó (sử dụng CA dòng lệnh OpenSSL)

Tạo một CA đơn giản

openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"

Bạn có thể bỏ qua việc tạo một CA trung gian

Tạo một yêu cầu CA trung gian, với các ràng buộc tên.

openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg

Với điều này trong ossl_domain_com.cfgtập tin:

[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca

[ req_distinguished_name ]
CN=somedomain.com trust CA

[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com

Sau đó, ký tên miền trung gian CA với CA.

openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg

Nếu bạn bỏ qua việc tạo trung gian, hãy sử dụng CA gốc của bạn để ký

Bây giờ hãy ký lại CA của tên miền ban đầu theo thẩm quyền của bạn, sử dụng chứng chỉ của họ. Bạn có thể thêm các phần mở rộng CA ở đây.

openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt

Bạn có thể cần sử dụng -x509-to-reqđối số để tạo một yêu cầu, mà bạn ký chính xác giống như cách trung gian ở trên.

Bây giờ, hãy thêm CA gốc, CA trung gian và tên miền chéo vào cơ sở dữ liệu tin cậy của trình duyệt của bạn.


2
MacOS không hỗ trợ nameConstraint. Chỉ cần FIY cho bất cứ ai làm việc trên một tên bị ràng buộc CA nội bộ. security.stackexchange.com/questions/95600/... archive.is/6Clgb
jorfus

Q: tình trạng của giải pháp này là gì? Những hệ thống nào nó hoạt động trong ngày hôm nay (2018)? // Tôi đã muốn điều này mỗi khi tôi buộc phải cài đặt một công ty khác tự ký chứng chỉ; và mỗi khi tôi nghĩ về Bưu điện Hồng Kông hoặc Symantec. // Tôi nghĩ rằng tôi có thể không quan tâm đến việc không bao giờ thực hiện việc thu hẹp như vậy được mô tả, miễn là họ không vô tình thực hiện mở rộng.
Krazy Glew

@KrazyGlew Tôi có một tệp bó tôi sử dụng cho việc này và tôi vẫn sử dụng nó thường xuyên. Thỉnh thoảng tôi phải phát hành lại các certs trung gian khi chúng hết hạn hoặc xoay, vì vậy nó hơi thủ công hơn một chút, nhưng nó không phải là vấn đề. Thỉnh thoảng tôi chạy trên các trang web được quản lý bởi chính quyền mà trình duyệt của tôi không tin tưởng do sử dụng một Cơ quan trung gian khác hoặc một tên miền bổ sung mà họ đã thêm, mà tôi không tin tưởng.
davenpcj

2
Tôi vừa mới sử dụng thành công, cảm ơn. Nó hoạt động tuyệt vời mà không cần chứng chỉ trung gian, có bất kỳ lợi thế để sử dụng một? Ngoài ra, basicConstraintsdòng trong tệp cấu hình dường như khiến phần mở rộng ràng buộc được đưa vào chứng chỉ hai lần, điều này khiến Firefox từ chối chứng chỉ với thông báo lỗi khó hiểu. Tôi nghĩ rằng nó có thể được gỡ bỏ một cách an toàn.
wrtlprnft

Tôi nhận được một lỗi ở bước cuối cùng : error with certificate to be certified - should be self signed. Nó có nghĩa là gì và làm thế nào để giải quyết điều này? pastebin.ubfox.com/p/QHhpQh2N6J
mymedia
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.