Я хочу завантажити сертифікат ssl, скажімо, на https://www.google.com , використовуючи wget або будь-які інші команди. Будь-який командний рядок Unix? wget або openssl?
Я хочу завантажити сертифікат ssl, скажімо, на https://www.google.com , використовуючи wget або будь-які інші команди. Будь-який командний рядок Unix? wget або openssl?
Відповіді:
Щоб завантажити сертифікат, вам потрібно використовувати клієнт, вбудований у openssl, таким чином:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Це дозволить зберегти сертифікат до /tmp/$SERVERNAME.cert
.
Ви можете використовувати, -showcerts
якщо хочете завантажити всі сертифікати в ланцюжку. Але якщо ви просто хочете завантажити серверний сертифікат, не потрібно вказувати-showcerts
echo -n
дає відповідь серверу, щоб з'єднання було звільнено
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
видаляє інформацію про ланцюжок сертифікатів та дані про з'єднання. Це кращий формат для імпорту сертифіката в інші сховища ключів.
-showcerts
відображається також сервер / лист cert? Я думав, що він відображає проміжні продукти лише тоді, коли цей комутатор був включений.
s_client
завжди відображається серверний серт (якщо такий є, тобто сервер відповідає на привіт і не вибирає анонімний набір). -showcerts
показує всі отримані certs, серт cert спочатку, потім проміжні та / або root.
Я знайшов відповідь. Openssl забезпечує це.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOF
побачити подробиці сертифіката
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem
люб’язно надано serverfault.com/questions/139728/…
GnuTLS клієнтський інструмент, gnutls-cli
також може зробити це легко:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Програма призначена для надання інтерактивного клієнта на сайт, тому потрібно дати йому порожній вхід (у цьому прикладі з /dev/null
) для завершення інтерактивного сеансу.
На основі відповіді @bignose, ось автономна версія, яка добре вписується, наприклад, у рецепт шеф-кухаря:
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
цей режим openssl очікує stdin, тому ми надаємо його через true |
, він підключається до сервера, зазначеного в параметрі -connect. 2>/dev/null
при замовчуванні помилок (необов’язково), ми можемо передати весь вихід у аналізатор x509, вказавши /dev/stdin
використовувати оболонку як вхідний файл. І що буде виводити тільки -----BEGIN CERTIFICATE-----
в -----END CERTIFICATE-----
частині s_client
виведення. Ви можете перенаправити це на файл, додавши > google.com.pem
в кінець команди.
Як найкраще я можу сказати, це не підтверджує ланцюжок сертифікатів, воно лише може сказати вам, яку ідентифікацію ssl надає кінцевий сервер.
x509
читає stdin за замовчуванням, тому -in /dev/stdin
надлишком (3) s_client
перевіряє, як серт-сервер правильно прив’язується до локального якоря довіри (root) і не закінчився, але ви придушив інформацію, яка б це показала (4) вона НЕ перевіряє на скасування (5) вона перевіряє ім'я в серті cert лише в 1.0.2, а потім не за замовчуванням (але ви можете легко перевірити це самостійно, подивившись на cert згодом)