Cách lưu chứng chỉ SSL máy chủ từ xa cục bộ dưới dạng tệp


319

Tôi cần tải xuống chứng chỉ SSL của máy chủ từ xa (không phải HTTPS, nhưng bắt tay SSL phải giống như Google Chrome / IE / wget và cuộn tròn tất cả các lỗi kiểm tra chứng chỉ) và thêm chứng chỉ như tin cậy vào máy tính xách tay của tôi Windows ' cửa hàng chứng chỉ vì tôi không thể yêu cầu các nhân viên IT của mình cung cấp cho tôi chứng chỉ CA.

cái này dùng để liên lạc văn phòng nên tôi thực sự không thể sử dụng máy khách thực tế để lấy chứng chỉ.

Làm thế nào để tôi làm điều này, tôi có Windows 7 và một đống Linux tiện dụng để mọi công cụ / ngôn ngữ kịch bản đều ổn.


Để lấy chứng chỉ của một máy chủ thư , hãy xem security.stackexchange.com/questions/70528/iêu
Chàng trai người Brazil đó

Nhiều khả năng, trình duyệt của bạn có tính năng tích hợp sẵn cho việc này - có thể trong "công cụ dành cho nhà phát triển".
tộc

Câu trả lời:


316

Nếu bạn có quyền truy cập OpenSSL, hãy thử

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

thay thế {HOSTNAME} và {PORT} bằng bất kỳ giá trị nào của bạn.


2
Tôi thích tùy chọn này vì tôi không phải mở GUI và tôi có thể thực hiện thông qua SSH từ các máy chủ của chúng tôi.
bramp

2
Thêm vào đó, nó hoạt động cho các giao thức khác ngoài HTTP.
matt

14
Giải pháp của elec3647 hoàn toàn tự động trích xuất PEM trong đường ống vỏ.
phs

4
443 là cổng mặc định cho HTTPS.
Flimm

4
Tôi cần -servernametùy chọn để có được chứng chỉ máy chủ ảo. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan

240

Một phương pháp nhanh chóng để lấy chứng chỉ được kéo và tải xuống sẽ là chạy lệnh sau, điều này dẫn đầu ra từ -showcerts sang lệnh ssl x509 chỉ loại bỏ mọi thứ bên ngoài. Ví dụ:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Để sử dụng chứng chỉ, với wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem

5
Tôi đã thử điều này (trên một trang web khác) - nhưng dự kiến ​​chuỗi certs đầy đủ: dường như điều này chỉ mang lại lần đầu tiên trong chuỗi - điều đó có được mong đợi không?
monojohnny

8
Điều đó không hiệu quả với tôi: không thể tải chứng chỉ 27262: error: 0906D06C: PEM thường xuyên: PEM_read_bio: không có dòng bắt đầu: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_ GIẤY CHỨNG NHẬN
Janusz

4
Tôi đồng ý với monojohnny, điều này không cung cấp cho bạn chuỗi đầy đủ.
Michael Munsey

4
Muộn nhưng @monojohnny: openssl s_client -showcertshiển thị tất cả các certs trong chuỗi nhận được (nếu kết nối thành công), nhưng đường ống openssl x509chỉ mất cái đầu tiên và loại bỏ phần còn lại. Để có được tất cả chúng thay vì sử dụng ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'hoặc ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'Bạn cũng có thể sử dụng một chút phức tạp hơn awkđể đặt từng chứng chỉ vào một tệp riêng biệt giúp chúng dễ sử dụng hơn opensslvà một số công cụ khác.
dave_thndry_085

3
bằng cách sử dụng wget dường như chỉ lưu a index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE

126

Thành thật mà nói, tôi chưa bao giờ thử điều này trước đây (chưa bao giờ cần), tuy nhiên, tôi mới thử dùng Firefox và nó dường như hoạt động để tiết kiệm:

  1. Nhấp vào biểu tượng chứng chỉ SSL ở trên cùng / Khóa ở phía dưới.
  2. Nhấp chuột View Certificate
  3. Bấm vào DetailsTab
  4. Chọn chứng chỉ mà bạn muốn từ hệ thống phân cấp [không được khoanh tròn trong ảnh]
  5. Nhấp chuột Export

văn bản thay thế


Điều tốt để biết - nhưng vì sự tò mò của tôi, bạn có thể giải thích thêm một chút về những gì bạn đang cố gắng thực hiện không? Tôi chưa bao giờ cần xuất chứng chỉ ứng dụng khách SSL và rất tò mò tại sao bạn thực sự có nhu cầu làm điều đó ...
William Hilsum

1
Đó là chứng chỉ máy chủ, không phải chứng chỉ ứng dụng khách. Lý do chính để xuất khóa & chứng chỉ cá nhân của khách hàng là để duy trì bản sao lưu hoặc nếu bạn muốn xác thực bằng trình duyệt hoặc máy tính khác.
gbroiles

@gbroiles - Đọc câu hỏi, anh ta đã sử dụng thuật ngữ sai, nhưng điều này đã giải quyết vấn đề của anh ta.
William Hilsum

1
đúng, và tôi đã trả lời câu hỏi của bạn - tại sao ai đó muốn lưu chứng chỉ ứng dụng khách? "Chứng chỉ ứng dụng khách SSL" là thuật ngữ của bạn, không phải của anh ấy.
gbroiles

1
Không giống như có một cách để làm điều này trong Chrome, phải không?!
fatuhoku

50

Xuất chứng chỉ bằng trình duyệt Chrome

  1. Kết nối với trang web bằng SSL ( https: // sao cũng được )

2. Nhấp vào biểu tượng khóa và sau đó nhấp vào Chi tiết

  1. Kể từ phiên bản Chrome 56, bạn thực hiện các thao tác sau: đi tới Menu Ba dấu chấm -> Công cụ khác -> Công cụ dành cho nhà phát triển, sau đó nhấp vào Tab Bảo mật. Điều này sẽ cung cấp cho bạn Tổng quan về bảo mật với nút Xem chứng chỉ .

  2. Nhấp vào nút Xem chứng chỉ .

    Một cửa sổ phương thức sẽ mở ra. Nó có hai tấm. Cái trên cùng cho thấy hệ thống phân cấp tin cậy của chứng chỉ của trang web (cái cuối cùng được liệt kê), (các) chứng chỉ trung gian và chứng chỉ gốc (cái trên cùng).

    Cửa sổ thứ hai, lớn hơn, hiển thị chi tiết của một trong các chứng chỉ.

    Có thể có 0 hoặc nhiều chứng chỉ trung gian.

    Lưu ý rằng chứng chỉ gốc có biểu tượng viền vàng. Những người khác có một đường viền màu xanh.

    Xem ảnh chụp màn hình bên dưới.

  3. Để xuất chứng chỉ:

    1. Đầu tiên bấm vào biểu tượng của chứng chỉ trong hệ thống phân cấp tin cậy.
    2. Chứng chỉ sẽ được hiển thị trong phần chính của phương thức.
    3. Nhấp vào biểu tượng lớn của chứng chỉ trong phần chính của phương thức. Kéo biểu tượng vào màn hình của bạn. Chrome sau đó sẽ sao chép chứng chỉ vào máy tính để bàn của bạn.

nhập mô tả hình ảnh ở đây


1
Tôi đã phải kéo biểu tượng vào trình soạn thảo văn bản, máy tính để bàn không hoạt động với tôi.
Cory Klein

2
Đối với Chrome trên Windows, sau khi bạn nhấp vào 'Xem chứng chỉ', phương thức này khác với Mac. Nhấp vào tab Chi tiết và sau đó Sao chép vào Tệp ... Sau đó chọn định dạng và tên tệp, đơn giản.
PolyTekPatrick

1
Khi tôi sử dụng Chrome v63 trên Mac OS, tệp văn bản tôi nhận được từ việc kéo chứng chỉ có thể đọc được bằng con người, nhưng không phải ở bất kỳ định dạng có cấu trúc nào mà tôi có thể tìm ra cách chuyển đổi thành dạng có thể đọc được bằng máy như X.509 .crt.
Jim DeLaHunt

không có gì khác biệt nếu mở từ thanh địa chỉ hoặc từ tab nhà phát triển này và vẫn không thể tải xuống crt ...
user25

1
Không hoạt động nữa trên Chrome 72.0.3626.121
A. D'Alfonso

20

Đây là câu trả lời của gbroiles , nhưng tôi muốn chỉ ra rằng dự án cURL có một trang với một vài chi tiết về cách sử dụng opensslđể lưu chứng chỉ SSL của máy chủ từ xa:

  • openssl s_client -connect {HOSTNAME}: {PORT} | logfile
  • Loại QUITvà nhấn phím Enter / phím Return.
  • Chứng chỉ sẽ được liệt kê giữa các điểm đánh dấu "BEGIN CHỨNG NHẬN" và "KẾT THÚC KẾT THÚC".
  • Nếu bạn muốn xem dữ liệu trong chứng chỉ, bạn có thể sử dụng:

    openssl x509 -inform PEM -in certfile -text -out certdata

    nơi certfilelà Giấy chứng nhận chiết xuất từ logfile. Nhìn vào certdata.


Điều này làm việc cho tôi. Nói rõ hơn một chút, tôi đã chỉnh sửa logfile và cắt xén mọi thứ nằm ngoài BEGIN CERTIFICATE và END CERTIFICATE và lưu kết quả dưới dạng certfile.pem (Không chắc phần mở rộng có cần thiết không).
Michael Welch

16

tự động

-servername được yêu cầu đối với tôi để có được chứng chỉ phù hợp từ máy chủ ảo trên máy chủ của chúng tôi.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

bạn cũng có thể chuyển đổi thành chứng chỉ cho máy tính để bàn

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

phần cuối cùng là thêm nó vào certs của bạn, không chắc chắn trên windows
cho mac móc khóa tôi đã sử dụng, nên tương tự ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer



Lưu ý rằng một số ứng dụng gặp sự cố với các khóa của System và SystemRoot (Golang, tôi đang xem BẠN), vì vậy sau khi cài đặt và đặt niềm tin cho các cấp đó, bạn cũng có thể muốn sao chép nó vào người dùng của mình login.keychainthông qua Keychain Accessứng dụng, bạn chỉ có thể duyệt đến chứng chỉ trong System / SystemRoot và nhấp và kéo nó vào loginmóc khóa của bạn .
dragon788

1
@ dragon788 - Ý định của tôi là tự động hóa việc này bằng dòng lệnh và điều này hiệu quả với tôi. Vui lòng chia sẻ ở đây nếu bạn tìm thấy giải pháp cho login.keychain thông qua CLI! cảm ơn!
Artistan

Đánh giá từ những gì tôi đã đọc trên web Tôi tin rằng chỉ cần bỏ qua -dlệnh từ sẽ chỉ áp dụng cho móc khóa người dùng thay vì móc khóa Hệ thống.
dragon788

Nếu bạn cũng đang thêm (các) chứng chỉ trung gian, bạn sẽ muốn sử dụng trustAsRootthay vì trustRootđể được thêm chính xác.
dragon788

2

Điều này sẽ chỉ cung cấp kết quả chứa các chứng chỉ

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "

0

Tìm thấy một cách dễ dàng hơn nhiều nếu trên Windows. Đã thử Microsoft Edge (tiền crom) và nhấp vào khóa trong thanh địa chỉ -> Xem hộp thoại chứng chỉ bật lên với nút "Xuất ra tệp", lưu tệp này dưới dạng tệp .crt.

Tôi không sử dụng Edge nhiều, nhưng đây là miếng bánh.

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.