Створення, адміністрування та конвертація SSL-сертифікатів за допомогою OpenSSL
OpenSSL є одним з найпопулярніших інструментів для управління, генерації та трансформації SSL-сертифікатів.
У вашій роботі часто виникатимуть ситуації, коли вам потрібно буде використовувати OpenSSL для різноманітних задач, тому нижче я зібрав список корисних команд як довідковий матеріал.
У цій статті ми розглянемо типові команди OpenSSL, що знаходять застосування у реальних сценаріях.
Перед тим, як продовжити, важливо розібратися з деякими абревіатурами, пов’язаними з сертифікатами:
- SSL – Secure Sockets Layer (рівень захищених сокетів)
- CSR – Certificate Signing Request (запит на підписання сертифіката)
- TLS – Transport Layer Security (безпека транспортного рівня)
- PEM – Privacy Enhanced Mail (пошта з розширеною конфіденційністю)
- DER – Distinguished Encoding Rules (відмінні правила кодування)
- SHA – Secure Hash Algorithm (безпечний алгоритм хешування)
- PKCS – Public-Key Cryptography Standards (стандарти криптографії з відкритим ключем)
Примітка: Якщо ви не знайомі з цими термінами, вам може допомогти курс з управління SSL/TLS.
Генерація нового приватного ключа та запиту на підписання сертифіката (CSR)
openssl req -out techukraine.net.csr -newkey rsa:2048 -nodes -keyout techukraine.net.key
Ця команда генерує CSR та 2048-бітний файл приватного ключа RSA. Для використання сертифіката з Apache чи Nginx, вам необхідно надіслати CSR в сертифікаційний центр (CA), де вам нададуть підписаний сертифікат (зазвичай у форматі der або pem), який потрібно буде налаштувати на вашому веб-сервері.
Створення самопідписаного сертифіката
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
Ця команда створює самопідписаний сертифікат разом із відповідним 2048-бітним приватним ключем RSA. Також використовується хешування SHA256, як більш безпечний стандарт на даний момент.
Підказка: За замовчуванням, самопідписаний сертифікат є дійсним лише протягом місяця. Ви можете скористатися параметром `-days`, щоб встановити інший термін дії.
Приклад: Створення самопідписаного сертифіката, дійсного два роки:
openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
Перевірка CSR-файлу
openssl req -noout -text -in techukraine.net.csr
Перевірка CSR-файлу важлива для гарантії того, що ви відправляєте правильні дані до сертифікаційного центру.
Створення приватного ключа RSA
openssl genrsa -out private.key 2048
Якщо вам необхідно згенерувати лише приватний ключ RSA, скористайтеся наведеною вище командою. Вказано 2048 біт для забезпечення надійнішого шифрування.
Видалення парольної фрази з приватного ключа
openssl rsa -in certkey.key -out nopassphrase.key
Якщо ваш приватний ключ захищено парольною фразою, то щоразу під час запуску Apache вам доведеться вводити пароль. Ви можете скористатися наведеною командою, щоб видалити пароль із ключа, уникаючи необхідності вводити пароль при кожному перезапуску.
Перевірка приватного ключа
openssl rsa -in certkey.key –check
Якщо у вас є сумніви щодо коректності вашого файлу приватного ключа, скористайтеся наведеною вище командою для його перевірки.
Перевірка файлу сертифіката
openssl x509 -in certfile.pem -text –noout
Щоб перевірити вміст сертифіката, такий як CN, OU та іншу інформацію, скористайтеся цією командою, щоб переглянути його деталі.
Перевірка органу, що підписав сертифікат
openssl x509 -in certfile.pem -noout -issuer -issuer_hash
Сертифікаційний центр підписує кожен сертифікат та верифікує його в разі потреби.
Перевірка хеш-значення сертифіката
openssl x509 -noout -hash -in bestflare.pem
Конвертація DER в PEM
openssl x509 –inform der –in sslcert.der –out sslcert.pem
Сертифікаційні центри часто надають сертифікати у форматі .der. Якщо вам потрібен формат .pem для Apache або інших програм, скористайтеся цією командою.
Конвертація PEM в DER
openssl x509 –outform der –in sslcert.pem –out sslcert.der
Якщо вам потрібно перетворити формат .pem у формат .der, ця команда стане в пригоді.
Конвертація сертифіката і приватного ключа у формат PKCS#12
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem
Якщо ви використовуєте Java або іншу програму, що підтримує лише формат PKCS#12, то ця команда згенерує один файл pfx, що містить як сертифікат, так і файл приватного ключа.
Підказка: ви також можете включити сертифікат ланцюжка, додавши параметр `-chain`, як показано нижче:
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem -chain cacert.pem
Створення CSR з існуючого приватного ключа
openssl req –out certificate.csr –key existing.key –new
Якщо ви хочете використати наявний приватний ключ замість створення нового, скористайтеся наведеною вище командою.
Перевірка вмісту сертифіката формату PKCS12
openssl pkcs12 –info –nodes –in cert.p12
PKCS12 — це бінарний формат, тому вміст неможливо переглянути у текстовому редакторі. Наведена команда дозволить переглянути вміст файлу PKCS12.
Конвертація PKCS12 в PEM
openssl pkcs12 –in cert.p12 –out cert.pem
Якщо ви хочете використовувати наявний файл pkcs12 з Apache або перетворити його у формат pem, ця команда буде корисною.
Перевірка SSL-сертифіката конкретної URL-адреси
openssl s_client -connect yoururl.com:443 –showcerts
Цю команду часто використовують для перевірки SSL-сертифіката конкретної URL-адреси. Вона надає детальну інформацію про протокол, шифрування та сертифікат.
Перевірка версії OpenSSL
openssl version
Якщо ви відповідаєте за безпеку OpenSSL, перевірка версії має бути першим кроком.
Перевірка дати закінчення терміну дії сертифіката у форматі PEM
openssl x509 -noout -in certificate.pem -dates
Ця команда корисна для моніторингу терміну дії сертифіката. Вона показує дати в синтаксисі notBefore та notAfter. Вам потрібно перевірити notAfter, щоб переконатися, що термін дії сертифіката ще не закінчився.
Наприклад:
[[email protected] opt]# openssl x509 -noout -in bestflare.pem -dates notBefore=Jul 4 14:02:45 2015 GMT notAfter=Aug 4 09:46:42 2015 GMT [[email protected] opt]#
Перевірка терміну дії сертифіката SSL для URL-адреси
openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate
Це корисна команда для віддаленого моніторингу терміну дії сертифіката для певної URL-адреси.
Наприклад:
[[email protected] opt]# openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate notAfter=Dec 8 00:00:00 2015 GMT
Перевірка, чи підтримується SSL V2 або V3 для URL-адреси
Перевірка SSL V2:
openssl s_client -connect secureurl.com:443 -ssl2
Перевірка SSL V3:
openssl s_client -connect secureurl.com:443 –ssl3
Перевірка TLS 1.0:
openssl s_client -connect secureurl.com:443 –tls1
Перевірка TLS 1.1:
openssl s_client -connect secureurl.com:443 –tls1_1
Перевірка TLS 1.2:
openssl s_client -connect secureurl.com:443 –tls1_2
Якщо ви захищаєте веб-сервер і хочете перевірити, чи ввімкнено SSL V2/V3, скористайтеся наведеною вище командою. Якщо протокол активовано, ви отримаєте “З’ЄДНАНО”, в іншому випадку “збій рукостискання”.
Перевірка, чи підтримується певний шифр для URL-адреси
openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443
Якщо під час перевірки безпеки було виявлено, що використовуються слабкі шифри, цю команду можна використати для перевірки підтримки певного шифру.
Змініть шифр та URL-адресу, що ви хочете перевірити. Якщо шифр підтримується, ви отримаєте “CONNECTED”, інакше “handshake failure”.
Сподіваюся, наведені вище команди допоможуть вам краще зрозуміти можливості OpenSSL для управління сертифікатами SSL вашого веб-сайту.