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

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


linux:openssl

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:openssl [2023/07/21 07:31]
admin [Получение сертификата]
linux:openssl [2025/04/04 13:10] (текущий)
admin
Строка 1: Строка 1:
 ====== OpenSSL ====== ====== OpenSSL ======
-===== rand =====+ 
 +===== Разное ===== 
 +==== rand ====
 Генерирует последовательность случайных байтов\\ Генерирует последовательность случайных байтов\\
 <code bash> <code bash>
Строка 8: Строка 10:
  
  
-===== Получение сертификата =====+ 
 +==== Работа с сертами ====
 Можно получить/скачать сертификат с указанного сайта\\ Можно получить/скачать сертификат с указанного сайта\\
 <code bash> <code bash>
   # Просмотреть сведения о сертификате   # Просмотреть сведения о сертификате
 openssl s_client -connect deeplay.enterprise.slack.com:443 openssl s_client -connect deeplay.enterprise.slack.com:443
 +
   # Для postgres   # Для postgres
 openssl s_client -starttls postgres -connect ip:port openssl s_client -starttls postgres -connect ip:port
 +
   # Сохранить сведения в файл (экспорт)   # Сохранить сведения в файл (экспорт)
 echo -n | openssl s_client -connect site.ru:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/newfile.crt echo -n | openssl s_client -connect site.ru:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/newfile.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   # далее, по указанной ссылке можно скачать вышестоящий, просто wget
Строка 25: Строка 32:
   # проверка какая то   # проверка какая то
 openssl verify <certificate.pem> openssl verify <certificate.pem>
 +
   # Перчень установленных сертов в системе   # Перчень установленных сертов в системе
 awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt
 +</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> </code>
  
Строка 59: Строка 78:
  
  
-===== Установка сертификата =====+==== Установка сертификата ====
 <code bash> <code bash>
 +trust list
 sudo cp mycert.crt /usr/share/pki/ca-trust-source/anchors/ sudo cp mycert.crt /usr/share/pki/ca-trust-source/anchors/
 sudo update-ca-trust sudo update-ca-trust
Строка 67: Строка 87:
 sudo cp mycert.crt /usr/local/share/ca-certificates/ sudo cp mycert.crt /usr/local/share/ca-certificates/
 sudo update-ca-certificates sudo update-ca-certificates
 +</code>
  
-trust list+ 
 + 
 +==== Форматы ==== 
 +<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> </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.1689924704.txt.gz · Последнее изменение: 2023/07/21 07:31 — admin