Làm thế nào để bạn thêm một cơ quan chứng nhận (CA) vào Ubuntu?


166

Công việc của tôi đã quyết định cấp thẩm quyền chứng nhận (CA) của riêng họ để xử lý các khía cạnh khác nhau của công việc của chúng tôi một cách an toàn mà không phải trả tiền cho chứng chỉ.

  • Email ký mã hóa
  • Mã hóa nội dung email
  • Truy cập vào những thứ như chứng chỉ ứng dụng khách IRC của công ty .
  • Tự động thu hồi chìa khóa của nhân viên cũ

Họ đã gửi cho tôi một .pemtệp và tôi không biết cách thêm nó vào bản cài đặt Ubuntu của mình. Các hướng dẫn được gửi là: "Nhấp đúp vào nó trên máy Mac nên cài đặt nó." 

Làm thế nào để tôi tiến hành? Tôi có cần phải làm điều gì đó với OpenSSL để tạo ra một .key, .csrhoặc .crtnộp?


2
nhận xét "Các hướng dẫn được gửi là: \" Nhấp đúp vào nó trên máy Mac sẽ cài đặt nó. \ "" thực hiện ngày của tôi
mzoll

Câu trả lời:


231

Cài đặt CA

Sao chép chứng chỉ của bạn ở định dạng PEM (định dạng có ----BEGIN CERTIFICATE----trong đó) vào /usr/local/share/ca-certificatesvà đặt tên cho nó bằng một .crtphần mở rộng tệp.

Sau đó chạy sudo update-ca-certificates.

Hãy cẩn thận: Cài đặt này chỉ ảnh hưởng đến các sản phẩm sử dụng cửa hàng chứng chỉ này. Một số sản phẩm có thể sử dụng các cửa hàng chứng chỉ khác; nếu bạn sử dụng các sản phẩm đó, bạn cũng sẽ cần thêm chứng chỉ CA này vào các cửa hàng chứng chỉ khác. ( Hướng dẫn Firefox , Hướng dẫn Chrome , Hướng dẫn Java )

Kiểm tra CA

Bạn có thể xác minh nếu điều này hoạt động bằng cách tìm kiếm chứng chỉ mà bạn vừa thêm vào /etc/ssl/certs/ca-certificates.crt(đây chỉ là một danh sách dài tất cả các CA đáng tin cậy của bạn được nối với nhau).

Bạn cũng có thể sử dụng s_client của OpenSSL bằng cách cố gắng kết nối với máy chủ mà bạn biết đang sử dụng chứng chỉ được ký bởi CA mà bạn vừa cài đặt.

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
   i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Điều đầu tiên cần tìm là chuỗi chứng chỉ gần đầu ra. Điều này sẽ hiển thị CA là nhà phát hành (bên cạnh i:). Điều này cho bạn biết rằng máy chủ đang xuất trình chứng chỉ được ký bởi CA bạn đang cài đặt.

Thứ hai, tìm kiếm verify return codeở cuối được đặt thành 0 (ok).


3
cái này thực sự hoạt động
Sabareesh Kkanan

1
Cảm ơn bạn đã lưu ý rằng firefox / chrome không sử dụng cửa hàng cert mặc định.
Tim Strijdhorst

4
Lưu ý rằng cập nhật-ca-chứng chỉ có thể rất khó khăn (có thể theo thiết kế). mycert.pem.crt KHÔNG hoạt động, nhưng mycert.crt đã làm. Tôi cũng nghĩ rằng nó cần phải là / usr / local / share / ca-cert chứ không phải / usr / share / ca-cert (bất chấp những gì đã nói trong /etc/ca-certert.conf).
mê cung

2
Cảm ơn về crtnhận xét mở rộng, đó là bí mật để có được tác phẩm này cho tôi, tôi đã nhận được một chứng chỉ với certphần mở rộng và bối rối không biết tại sao không có gì hoạt động.
chuộc Briggs

3
Một cảnh báo: s_clientkhông gửi SNI theo mặc định và máy chủ có thể cần SNI đặc biệt nếu nó hỗ trợ các máy chủ / trang web ảo với các certs khác nhau; cho trường hợp này thêm -servername foo.whatever.com. Hoặc nếu đó là máy chủ web sử dụng (phiên bản hiện đại) curlhoặc wgetSNI tự động.
dave_thndry_085

66

man cập nhật-ca-chứng chỉ :

update-ca-certificates  is  a  program  that  updates   the   directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.

It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of  a  CA  certificate  under /usr/share/ca-certificates that should be
trusted.  Lines that begin with "#" are comment lines and thus ignored.
Lines  that  begin with "!" are deselected, causing the deactivation of
the CA certificate in question.

Furthermore   all   certificates   found   below   /usr/local/share/ca-
certificates are also included as implicitly trusted.

Từ những điều trên, tôi sẽ suy ra rằng cách ưa thích để đưa các tệp chứng chỉ cục bộ vào cửa hàng đáng tin cậy là đưa chúng vào /usr/local/share/ca-certificates, rồi chạy update-ca-certificates. Bạn không cần phải chạm /etc/ssl/certstrực tiếp.


23
Đặt tên cho các chứng chỉ với phần mở rộng .crt dường như cũng được yêu cầu.
phyzome

Cảm ơn bạn đã lưu ý @phyzome - sẽ không thể thêm chứng nhận của tôi nếu không.
Seiyria 17/03/2015

1
Tôi đã phải thêm --freshđể làm cho nó hoạt động. ví dụupdate-ca-certificates --fresh
Elijah Lynn

15

Tôi gặp vấn đề tương tự và tôi phải sao chép .pemtập tin vào /usr/local/share/ca-certificates, đổi tên thành .crt. Các .certập tin có thể dễ dàng được chuyển đổi sang .pem, với openssl, ví dụ, nếu bạn không có .pem.

Sau khi sao chép tập tin bạn phải thực thi sudo update-ca-certificates.


openssl x509 -inform DER -in certificate.cer -out certificate.crt
webwurst

14

Các câu trả lời khác liên quan update-ca-certificateslà chính xác cho các ứng dụng đọc từ kho chứng chỉ hệ thống. Đối với Chrome và Firefox và có lẽ một số người khác, chứng chỉ phải được đặt trong nssdb, phần phụ trợ cho thư viện Mozilla NSS.

Từ https://code.google.com.vn/p/chromium/wiki/LinuxCertQuản lý :

Ví dụ: để tin cậy chứng chỉ CA gốc để cấp chứng chỉ máy chủ SSL, hãy sử dụng

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <biệt danh chứng chỉ> -i <tên tệp chứng chỉ>

Trường hợp <certificate nickname>là tùy ý và <certificate filename>là tệp .pem hoặc .crt của bạn.

Tài liệu tham khảo hữu ích khác:


cảm ơn. Nó hoạt động trên Ubuntu 16.04 cho Chrome 53.0.2785.143, nhưng Firefox 49 dường như có db cửa hàng riêng biệt và phải được thêm từ about: Preferences # advanced [Xem Chứng chỉ] -> [Chính quyền] -> [Nhập] Thêm về kho lưu trữ chứng chỉ firefox. Askubfox.com/a/248326/535154
mauron85

Nhân tiện, nếu bạn muốn cài đặt cert trước khi chạy Chrome lần đầu (nghĩa là vẫn còn thiếu .pki / dir), trước tiên bạn phải tạo nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel

Có một cách để Chrome và Firefox đọc từ kho chứng chỉ hệ thống. Xem câu trả lời của tôi: superuser.com/a/1312419/506107
wheeler

11

Đối với các bản dựng mới hơn dựa trên Debian, bạn có thể cần phải chạy:

sudo dpkg-reconfigure ca-certificates

LƯU Ý: sudo dpkg-cấu hình lại các chứng chỉ ca gọi update-ca-cert trong nội bộ

Tất nhiên bạn vẫn cần sao chép chứng chỉ (tệp .crt) sang / usr / share / ca-chứng nhận trước khi bạn thực hiện bất kỳ điều gì trong số này :)


4

Dựa trên câu trả lời của dwmw2 , bạn thực sự có thể nói với các ứng dụng sử dụng NSS để quản lý chứng chỉ của nó để sử dụng cửa hàng ủy thác hệ thống.

libnss3theo mặc định các tàu có bộ chứng chỉ CA gốc ( libnssckbi.so) chỉ đọc, do đó, hầu hết thời gian bạn cần tự thêm chúng vào cửa hàng ủy thác người dùng cục bộ nằm trong $HOME/.pki/nssdb. p11-kitcung cấp một sự thay thế thả vào cho libnssckbi.sohoạt động như một bộ chuyển đổi cho các chứng chỉ gốc toàn hệ thống được cài đặt trong /etc/ssl/certs.

Biên tập:

Dường như có nhiều phiên bản libnssckbi.songoài đó hơn là chỉ trong libnss3. Sau đây là tập lệnh để tìm tất cả, sao lưu chúng và thay thế chúng bằng các liên kết đến p11-kit:

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
    sudo mv $line ${line}.bak
    sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done

Hướng dẫn ban đầu:

Để thực hiện việc này, hãy cài đặt p11-kitlibnss3(nếu chúng chưa được kích hoạt):

sudo apt-get update && sudo apt-get install -y p11-kit libnss3

Sau đó sao lưu hiện có libnssckbi.sođược cung cấp bởi libnss3:

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak

Cuối cùng, tạo liên kết tượng trưng:

sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

Để xác nhận rằng nó hoạt động, bạn có thể chạy ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.sovà nó sẽ hiển thị liên kết:

lrwxrwxrwx 1 root root 49 Apr  9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Bây giờ, nếu bạn thêm chứng chỉ vào cửa hàng CA bằng cách sử dụng update-ca-certificates, các chứng chỉ đó sẽ có sẵn cho các ứng dụng sử dụng NSS ( libnss3) như Chrome.


1

Như đã lưu ý, các ứng dụng khác nhau sử dụng NSS có kho lưu trữ chứng chỉ riêng. Vì mọi thứ đều có trên Ubuntu, bạn phải sử dụng thủ công certutilđể thêm CA của mình cho từng ứng dụng, cho từng người dùng.

Trong các bản phân phối khác như Fedora, loại điều này Just Works ™ và bạn nên gửi một lỗi đối với bất kỳ ứng dụng nào không tự động tin tưởng vào các CA bạn cài đặt update-ca-trust.

Bạn có thể sửa lỗi này trong Ubuntu quá bằng cách cài đặt các p11-kit-modulesgói và sau đó thay thế NSS built-in rễ niềm tin mô-đun với p11-kit-trust.so, bằng cách làm cho một liên kết tượng trưng ví dụ từ /usr/lib/firefox/libnssckbi.sođến/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Sau đó, bạn sẽ nhận được các gốc tin cậy được cấu hình của hệ thống, chứ không phải một số mã hóa cứng. Lưu ý rằng Ubuntu gửi nhiều bản sao khác nhau của thư viện libnssckbi.so với các gốc tin cậy được mã hóa cứng và bạn phải thay thế tất cả chúng!

xem https://bugs.launchpad.net/ubfox/+source/nss/+orms/1647285


Khi tôi đã làm sudo find / -type f -name "libnssckbi.so", Nó tìm thấy libnssckbi.soở ba nơi: /usr/lib/thunderbird/, /usr/lib/firefox/, và /usr/lib/x86_64-linux-gnu/nss/. Vì vậy, bạn đang nói rằng tôi nên liên kết libnssckbi.sotrong cả ba thư mục đó p11-kit-trust.so?
bánh xe

1
Được rồi, chỉ cần xác nhận rằng liên kết /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.sohoạt động như một CHARM. Tôi đã có thể thêm chứng chỉ vào /usr/local/share/ca-certificates, chạy sudo update-ca-certificatesvà PRESTO, Chrome bắt đầu chấp nhận chứng chỉ tự ký.
bánh xe

0

Câu trả lời cực kỳ ngu ngốc để thêm vào đây, nhưng tôi đã dành 2 giờ đồng hồ qua lại với certutils trong linux ... Tôi chắc chắn mọi thứ đều đúng:

hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

anyproxy                                                     CT,, 
rootCA                                                       CT,, 
myasos                                                       CT,, 

Tuy nhiên, trong chrome không có gì là làm việc. Tôi đã thử tất cả mọi thứ, cuối cùng ....

Restarting Chrome

Là chìa khóa thành công của tôi sau khi làm theo: Lời khuyên của Steven Thứ Hai

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.