Инструменты пользователя

Инструменты сайта


linux:openssl

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:openssl [2023/01/10 04:41]
admin [Получение сертификата]
linux:openssl [2025/04/04 13:10] (текущий)
admin
Строка 1: Строка 1:
 ====== OpenSSL ====== ====== OpenSSL ======
  
- +===== Разное ===== 
-===== rand =====+==== rand ====
 Генерирует последовательность случайных байтов\\ Генерирует последовательность случайных байтов\\
- 
 <code bash> <code bash>
   # Случайная строка (10 символов)   # Случайная строка (10 символов)
Строка 11: Строка 10:
  
  
-===== Получение сертификата ===== 
-Можно получить/скачать сертификат с указанного сайта\\ 
  
 +==== Работа с сертами ====
 +Можно получить/скачать сертификат с указанного сайта\\
 <code bash> <code bash>
   # Просмотреть сведения о сертификате   # Просмотреть сведения о сертификате
 openssl s_client -connect deeplay.enterprise.slack.com:443 openssl s_client -connect deeplay.enterprise.slack.com:443
 +
 +  # Для postgres
 +openssl s_client -starttls postgres -connect ip:port
  
   # Сохранить сведения в файл (экспорт)   # Сохранить сведения в файл (экспорт)
-echo -n | openssl s_client -connect deeplay.enterprise.slack.com:443 | +echo -n | openssl s_client -connect site.ru:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/newfile.crt
-   sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/slack_notify.crt+
  
   # Далее можно импортировать его например в Java   # Далее можно импортировать его например в Java
 keytool -import -trustcacerts -keystore /usr/lib/jvm/bellsoft-java8-full.x86_64/jre/lib/security/cacerts \ keytool -import -trustcacerts -keystore /usr/lib/jvm/bellsoft-java8-full.x86_64/jre/lib/security/cacerts \
    -storepass changeit -noprompt -alias slack_notify -file /tmp/slack_notify.crt    -storepass changeit -noprompt -alias slack_notify -file /tmp/slack_notify.crt
 +
 +  # Узнать кто выдал сертификат
 +  # далее, по указанной ссылке можно скачать вышестоящий, просто wget
 +openssl x509 -in <certificate.pem> -text -noout | grep -i issuer
 +  # проверка какая то
 +openssl verify <certificate.pem>
 +
 +  # Перчень установленных сертов в системе
 +awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt
 </code> </code>
 +
 +
 +[[https://gist.github.com/Hakky54/b30418b25215ad7d18f978bc0b448d81|Cheat Sheet]]\\
 +<code bash>
 +# Просмотр сведений
 +openssl x509 -in server.crt -text -noout
 +openssl x509 -in server.cer -text -noout
 +
 +# Проверка закрытого ключа
 +openssl rsa -in server.key -check
 +</code>
 +
 +
 +**keytool** [[https://keystore-explorer.org/downloads.html|gui утилита]]\\
 +<code bash>
 +  # Содержимое хранилища
 +keytool -list [-v] -keystore kafka.keystore.p12 (или .jks) [-storepass passwd]
 +  # Экспорт содержащегося серта в файл
 +keytool -exportcert -keystore kafka.keystore.p12 -alias myCert -file toFile.cer
 +  # Импорт
 +keytool -importcert -keystore kafka.keystore.jks -alias first -file first.cer
 +  # Для создания нового контейнера, нужно просто указать несуществующий файл, создастся
 +
 +  # Удаление серта
 +keytool -delete -alias <my-name> -keystore <my-name>
 +</code>
 +
 +
 +<details>
 +<summary>:!: Про jks </summary>
 +Работа с контейнером для джавы\\
 +Есть пароль для контейнера, есть пароли для сертов, могут совпадать, тогда меньше гемора\\
 +Бывает так что показывает только те серты, что подходт под введенный пароль\\
 +При запуске джарки, есть такие аргументы для задания параметров
 +  -Djavax.net.ssl.keyStore=cert.jks\\
 +  -Djavax.net.ssl.keyStorePassword=changeit\\
 +  -Djavax.net.ssl.trustStor=cacerts\\
 +  -Djavax.net.ssl.trustStorePassword=changeit\\
 +</details>
 +
 +
 +
 +==== Установка сертификата ====
 +<code bash>
 +trust list
 +sudo cp mycert.crt /usr/share/pki/ca-trust-source/anchors/
 +sudo update-ca-trust
 +
 + # debian
 +sudo cp mycert.crt /usr/local/share/ca-certificates/
 +sudo update-ca-certificates
 +</code>
 +
 +
 +
 +==== Форматы ====
 +<details>
 +<summary>:!: PEM </summary>
 +PEM - наиболее распространенный формат для X.509 сертификаты, CSRи криптографические ключи. Файл PEM представляет собой текстовый файл, может содержать сертификат конечного объекта, закрытый ключ или несколько сертификатов\\
 +PEM файлы обычно видны с расширениями .crt, .pem, .cer, и .key (для закрытых ключей), возможно и что нить типа ".ca-bundle"\\
 +
 +Выглядит например так 
 +<code bash>
 +-----BEGIN CERTIFICATE-----
 +MIIH/TCCBeWgAwIBAgIQaBYE3/M08XHYCnNVmcFBcjANBgkqhkiG9w0BAQsFADBy
 +MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24x
 +(...)
 +-----END CERTIFICATE-----
 +</code>
 +</details>
 +
 +
 +
 +
 +===== Примеры =====
 +
 +<details>
 +<summary>:!: Генерация самоподписанного ключа</summary>
 +
 +<code bash>
 +#!/bin/bash
 +
 +mkdir -p certs
 +cd certs
 +
 +# create self signed root CA
 +openssl genrsa -out test_ca.key 4096
 +openssl req -x509 -new -nodes -key test_ca.key -sha256 -days 1024 -subj "/C=RU/ST=SR/O=Org Test Root CA, Inc./CN=Test Root CA" -out test_ca.crt
 +
 +
 +# create test key and csr for app
 +openssl genrsa -out test_app.key 4096
 +openssl req -new -sha256 -key test_app.key -subj "/C=RU/ST=SR/O=Org Test APP, Inc./CN=client.app.org" -out test_app.csr
 +
 +# sign test cert by CA for APP
 +openssl x509 -req -in test_app.csr -CA test_ca.crt -CAkey test_ca.key -CAcreateserial -out test_app.crt -days 3650 -sha256
 +
 +echo "DONE!"
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Генерация, подпись, сбор в комплекты</summary>
 +
 +Для подписи используем сторонний ЦС, на своей стороне, с помощью файла "req", формируем закрытый ключ и запрос на подпись\\
 +После получаем подписанный, открытый ключ, далее собираем в ключевую пару и JKS-ники\\
 +Корневой сертификат так же получаем от ЦС\\
 +
 +<code bash>
 +# Из файла с запросом генерируем закрытый ключ
 +openssl req -new -newkey rsa:2048 -keyout my_cert.key -out my_cert.csr -config req.txt
 +
 +# ==== Подпись, генерация открытого ключа ====
 +
 +# Из закрытого, открытого и корневого сертов, генерируем ключевую пару (.p12)
 +openssl pkcs12 -export -in my_cert.crt -inkey my_cert.key -out my_cert.p12 -name SARM_PD10 -CAfile my_cert_ca.crt -caname MY.RU -passout pass:123
 +
 +# Из ключевой пары генерируем JKS
 +keytool -importkeystore -srckeystore my_cert.p12 -srcstoretype PKCS12 -destkeystore my_cert.jks -deststoretype JKS -alias "MYCERT" -destalias "MYCERT" -srcstorepass 123 -deststorepass 123
 +
 +# Из корневого ключа генерируем Truststore
 +keytool -import -alias MYCERT -file my_cert_ca.crt -keystore my_cert_truststore.jks -noprompt -deststorepass 123 -deststoretype JKS
 +</code>
 +
 +Пример файла с запросом\\
 +<code>
 +[req]
 +default_bits = 2048
 +distinguished_name = req_distinguished_name
 +req_extensions = req_ext
 +prompt = no
 +
 +[req_distinguished_name]
 +C = RU
 +O = MY_COMP
 +commonName = example.ru
 +
 +[req_ext]
 +subjectAltName = @alt_names
 +keyUsage=digitalSignature, keyEncipherment
 +extendedKeyUsage=serverAuth
 +
 +[alt_names]
 +DNS.1 = first.example.ru
 +DNS.2 = second.example.ru
 +DNS.3 = *.example.ru
 +</code>
 +
 +</details>
 +
 +
 +
 +
  
  
linux/openssl.1673325699.txt.gz · Последнее изменение: 2023/01/10 04:41 — admin