Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:openssl [2023/04/18 15:28] 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: | openssl s_client -connect deeplay.enterprise.slack.com: | ||
+ | |||
+ | # Для postgres | ||
+ | openssl s_client -starttls postgres -connect ip:port | ||
# Сохранить сведения в файл (экспорт) | # Сохранить сведения в файл (экспорт) | ||
- | echo -n | openssl s_client -connect | + | echo -n | openssl s_client -connect |
- | sed -ne '/ | + | |
# Далее можно импортировать его например в Java | # Далее можно импортировать его например в Java | ||
keytool -import -trustcacerts -keystore / | keytool -import -trustcacerts -keystore / | ||
| | ||
+ | |||
+ | # Узнать кто выдал сертификат | ||
+ | # далее, по указанной ссылке можно скачать вышестоящий, | ||
+ | openssl x509 -in < | ||
+ | # проверка какая то | ||
+ | openssl verify < | ||
+ | |||
+ | # Перчень установленных сертов в системе | ||
+ | awk -v cmd=' | ||
</ | </ | ||
+ | |||
+ | [[https:// | ||
<code bash> | <code bash> | ||
- | | + | # Просмотр сведений |
- | keytool | + | openssl x509 -in server.crt |
+ | openssl x509 -in server.cer -text -noout | ||
+ | # Проверка закрытого ключа | ||
+ | openssl rsa -in server.key -check | ||
+ | </ | ||
+ | |||
+ | |||
+ | **keytool** [[https:// | ||
+ | <code bash> | ||
+ | # Содержимое хранилища | ||
+ | keytool -list [-v] -keystore kafka.keystore.p12 (или .jks) [-storepass passwd] | ||
# Экспорт содержащегося серта в файл | # Экспорт содержащегося серта в файл | ||
keytool -exportcert -keystore kafka.keystore.p12 -alias myCert -file toFile.cer | keytool -exportcert -keystore kafka.keystore.p12 -alias myCert -file toFile.cer | ||
- | |||
# Импорт | # Импорт | ||
keytool -importcert -keystore kafka.keystore.jks -alias first -file first.cer | keytool -importcert -keystore kafka.keystore.jks -alias first -file first.cer | ||
+ | # Для создания нового контейнера, | ||
+ | |||
+ | # Удаление серта | ||
+ | keytool -delete -alias < | ||
</ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Работа с контейнером для джавы\\ | ||
+ | Есть пароль для контейнера, | ||
+ | Бывает так что показывает только те серты, что подходт под введенный пароль\\ | ||
+ | При запуске джарки, | ||
+ | -Djavax.net.ssl.keyStore=cert.jks\\ | ||
+ | -Djavax.net.ssl.keyStorePassword=changeit\\ | ||
+ | -Djavax.net.ssl.trustStor=cacerts\\ | ||
+ | -Djavax.net.ssl.trustStorePassword=changeit\\ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Установка сертификата ==== | ||
+ | <code bash> | ||
+ | trust list | ||
+ | sudo cp mycert.crt / | ||
+ | sudo update-ca-trust | ||
+ | |||
+ | # debian | ||
+ | sudo cp mycert.crt / | ||
+ | sudo update-ca-certificates | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Форматы ==== | ||
+ | < | ||
+ | < | ||
+ | PEM - наиболее распространенный формат для X.509 сертификаты, | ||
+ | PEM файлы обычно видны с расширениями .crt, .pem, .cer, и .key (для закрытых ключей), | ||
+ | |||
+ | Выглядит например так | ||
+ | <code bash> | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIH/ | ||
+ | MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24x | ||
+ | (...) | ||
+ | -----END CERTIFICATE----- | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Примеры ===== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | <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 "/ | ||
+ | |||
+ | |||
+ | # create test key and csr for app | ||
+ | openssl genrsa -out test_app.key 4096 | ||
+ | openssl req -new -sha256 -key test_app.key -subj "/ | ||
+ | |||
+ | # 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 " | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | Для подписи используем сторонний ЦС, на своей стороне, | ||
+ | После получаем подписанный, | ||
+ | Корневой сертификат так же получаем от ЦС\\ | ||
+ | |||
+ | <code bash> | ||
+ | # Из файла с запросом генерируем закрытый ключ | ||
+ | openssl req -new -newkey rsa:2048 -keyout my_cert.key -out my_cert.csr -config req.txt | ||
+ | |||
+ | # ==== Подпись, | ||
+ | |||
+ | # Из закрытого, | ||
+ | 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 " | ||
+ | |||
+ | # Из корневого ключа генерируем Truststore | ||
+ | keytool -import -alias MYCERT -file my_cert_ca.crt -keystore my_cert_truststore.jks -noprompt -deststorepass 123 -deststoretype JKS | ||
+ | </ | ||
+ | |||
+ | Пример файла с запросом\\ | ||
+ | < | ||
+ | [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, | ||
+ | extendedKeyUsage=serverAuth | ||
+ | |||
+ | [alt_names] | ||
+ | DNS.1 = first.example.ru | ||
+ | DNS.2 = second.example.ru | ||
+ | DNS.3 = *.example.ru | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ |