Tôi muốn tải xuống chứng chỉ ssl từ, giả sử https://www.google.com , sử dụng wget hoặc bất kỳ lệnh nào khác. Bất kỳ dòng lệnh unix? wget hay openssl?
Tôi muốn tải xuống chứng chỉ ssl từ, giả sử https://www.google.com , sử dụng wget hoặc bất kỳ lệnh nào khác. Bất kỳ dòng lệnh unix? wget hay openssl?
Câu trả lời:
Để tải xuống chứng chỉ, bạn cần sử dụng ứng dụng khách được tích hợp vào openssl như vậy:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Điều đó sẽ lưu chứng chỉ vào /tmp/$SERVERNAME.cert
.
Bạn có thể sử dụng -showcerts
nếu bạn muốn tải xuống tất cả các chứng chỉ trong chuỗi. Nhưng nếu bạn chỉ muốn tải xuống chứng chỉ máy chủ, không cần chỉ định-showcerts
echo -n
đưa ra phản hồi cho máy chủ để kết nối được giải phóng
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
xóa thông tin về chuỗi chứng chỉ và chi tiết kết nối. Đây là định dạng ưa thích để nhập chứng chỉ vào các kho khóa khác.
-showcerts
hiển thị các chứng chỉ máy chủ / lá quá không? Tôi nghĩ rằng nó chỉ hiển thị trung gian khi chuyển đổi được bao gồm.
s_client
luôn hiển thị chứng chỉ máy chủ (nếu có, tức là máy chủ trả lời xin chào và không chọn bộ ẩn danh). -showcerts
hiển thị tất cả các certs nhận được, chứng chỉ máy chủ đầu tiên sau đó trung gian và / hoặc root.
Tôi tìm thấy câu trả lời. Openssl cung cấp nó.
openssl s_client -connect $ {REMHOST}: $ {REMANCE}
openssl x509 -text <<EOF cert-text EOF
để xem chi tiết của chứng chỉ
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem
lịch sự của serverfault.com/questions/139728/ từ
Công cụ máy khách GNUTLSgnutls-cli
, cũng có thể thực hiện điều này dễ dàng:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Chương trình được thiết kế để cung cấp một ứng dụng khách tương tác cho trang web, vì vậy bạn cần cung cấp cho nó đầu vào trống (trong ví dụ này, từ /dev/null
) để kết thúc phiên tương tác.
dựa trên câu trả lời @bignose, đây là một phiên bản khép kín rất phù hợp với ví dụ như một công thức đầu bếp:
sudo apt-get install gnutls-bin
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
chế độ openssl này mong đợi stdin, vì vậy chúng tôi cung cấp thông qua true |
, điều này kết nối với máy chủ được chỉ định trong tham số -connect. 2>/dev/null
lỗi im lặng (tùy chọn), chúng ta có thể chuyển toàn bộ đầu ra vào trình phân tích cú pháp x509, chỉ định /dev/stdin
sử dụng ống vỏ làm tệp đầu vào. Và đó là ý chí đầu ra chỉ là -----BEGIN CERTIFICATE-----
để -----END CERTIFICATE-----
phần s_client
đầu ra. Bạn có thể chuyển hướng đó đến một tệp bằng cách thêm > google.com.pem
vào cuối lệnh.
Như tôi có thể nói, điều này không xác minh chuỗi chứng chỉ, nó chỉ có thể cho bạn biết danh tính ssl mà máy chủ cuối cung cấp.
x509
mặc định đọc stdin vì vậy -in /dev/stdin
là dư thừa (3) s_client
xác minh chuỗi chứng chỉ máy chủ chính xác đến một neo tin cậy cục bộ (root) và chưa hết hạn, nhưng bạn đã loại bỏ thông tin sẽ hiển thị thông tin này (4) nó KHÔNG kiểm tra thu hồi (5) nó chỉ kiểm tra tên trong chứng chỉ máy chủ trong 1.0.2 và sau đó không theo mặc định (nhưng bạn có thể dễ dàng tự kiểm tra bằng cách xem chứng chỉ sau đó)