как узнать версию openssl windows
Одним из самых популярных инструментов для создания и управления SSL-сертификатами является библиотека OpenSSL. В этой статье я расскажу о часто используемых командах OpenSSL.
Некоторые аббревиатуры, относящиеся к сертификатам:
1. Создание нового секретного ключа и запрос на получение сертификата
2. Создание самозаверяемого сертификата
Команда генерирует самозаверенный сертификат и файл 2048-битного RSA-ключа. Я также включил в команду хеш-функцию sha256, поскольку она считается наиболее безопасной.
Совет: По умолчанию команда генерирует самозаверенный сертификат, действительный только один месяц. Для увеличения этого срока переопределите параметра — days.
Пример: для получения сертификата, действительного два года.
3. Верификация CSR-файла
Верификация необходима, чтобы отправленный в регистрационный центр CSR-файл содержал всю необходимую информацию.
4. Создание секретного RSA-ключа
Если нужно создать секретный RSA-ключ, используйте приведенную выше команду.
5. Удаление пароля-фразы из ключа
Если вы используете составной пароль (фразу) в файле ключа и работаете на Apache, то при каждом запуске нужно вводить секретную фразу. Если вас это раздражает, то можно использовать приведенную выше команду, чтобы удалить пароль-фразу из существующего ключа.
6. Верификация секретного ключа
Если вы сомневаетесь в файле ключа, то можете использовать данную команду.
7. Верификация файла сертификата
Если хотите проверить данные сертификата, такие как CN, OU и т.д., используйте приведенную выше команду, которая предоставит данные сертификата.
8. Верификация центра сертификации
Для проверки центра сертификации можно использовать приведенную выше команду.
9. Проверка хеш-значения сертификата
10. Преобразование формата DER в PEM
11. Преобразование формата PEM в DER
12. Преобразование сертификата и секретного ключа в формат PKCS#12
Если необходимо использовать сертификат с Java-приложением, принимающим только формат PKCS#12, примените приведенную выше команду. Она генерирует один pfx файл, содержащий сертификат и ключ.
13. Создание CSR с использованием существующего секретного ключа
Если не хотите создавать новый секретный ключ вместо существующего, выполните приведенную выше команду.
14. Проверка содержимого сертификата в формате PKCS12
PKCS12 является двоичным форматом, поэтому вы не сможете просмотреть его содержимое в текстовом редакторе. Для просмотра файла в формате PKCS12 используйте приведенную выше команду.
15. Преобразование формата PKCS12 в PEM-сертификат
16. Проверка SSL-сертификата определенного URL-адреса
Я часто использую эту команду для проверки SSL-сертификата URL-адреса. Это удобно для проверки данных протокола, шифрования и сертификата.
17. Определение версии OpenSSL
18. Проверка даты истечения срока действия PEM-файла
Команда выведет дату в формате notBefore и notAfter. notAfter — это та дата, которая нужна, чтобы определить, истек ли срок действия сертификата или он еще действителен.
19. Проверка срока действия SSL-сертификата для URL-адреса
Команда позволяет контролировать дату истечения срока действия SSL- сертификата удаленно или для конкретного URL-адреса.
20. Проверка, принимается ли на URL-адресеSSL V2 или V
Чтобы проверить SSL V2:
Чтобы проверить SSL V3:
Чтобы проверить TLS 1.0:
Чтобы проверить TLS 1.1:
Чтобы проверить TLS 1.2:
Если необходимо проверить, включен ли SSL V2 / V3 или нет, используйте приведенную выше команду. Если он включен, то вы получите сообщение «CONNECTED», в противном случае –сообщение «handshake failure».
21. Проверка того, принимается ли конкретный шифр на URL-адресе
Если хотите знать, принимаются ли некоторые слабые шифры, то можете использовать приведенную выше команду.
Для этого необходимо задать шифр и URL-адрес. Если шифр будет принят, вы получите сообщение «CONNECTED», иначе – сообщение «handshake failure».
Надеюсь, что приведенные выше команды помогли вам узнать больше об использовании OpenSSL для управления SSL-сертификатами.
Дайте знать, что вы думаете по данной теме материала в комментариях. За комментарии, отклики, подписки, лайки, дизлайки огромное вам спасибо!
✔️ Как установить самую последнюю версию OpenSSL на Windows 10
В эпоху кибервойн единственная разумная позиция – быть параноиком, а это означает, помимо прочего, быть параноиком по поводу обновлений программного обеспечения.
Взять к примеру OpenSSL.
Эта криптографическая библиотека с открытым исходным кодом, которая реализует протоколы Transport Layer Security (TLS) и Secure Sockets Layer (SSL), разработана для «защиты связи по компьютерным сетям от перехвата», но угадайте, что?
С самого начала она была пронизана ошибками.
Это может быть неизбежно, в определенной степени – в конце концов, мы говорим о программном обеспечении.
Несмотря на то, что вы не можете ничего сделать с ошибками, которые еще предстоит идентифицировать, вы можете по крайней мере защитить свои системы от тех ошибок, которые уже исправлены и задокументированы.
Жаль, что официальный сайт OpenSSL предлагает только исходники для Linux.
Хотя дистрибутивы Linux обычно поставляются с OpenSSL, это не никак относится к Windows … или, скажем, «дистрибутивам Windows».
Если вы хотите запустить его, вам нужен бинарник под Windows, и если вы не хотите его собирать самостоятельно, вы должны найти другой вариант.
В этой статье я покажу,как можно настроить OpenSSL в Windows, не имея дело при этом дела со сборкой из исходников.
Шаг 1. Скачать бинарник
Поиск бинарных файлов OpenSSL для Windows – непростая задача, но не отчаивайтесь.
Чтобы загрузить нужный, перейдите по ссылке:
Не дайте себя одурачить ни строкой Win32 в URL-адресе, ни навигацией, указывающей на казалось бы древнюю страницу загрузки еще с 2004 года.
Прокрутите страницу вниз до раздела «Download Win32 OpenSSL».
Теперь вам нужно выбрать правильный файл из этого списка.
Для каждой версии есть два основных типа: light и full.
Загрузите файл под названием «Win64 OpenSSL v1.1.0f» (или версию с более новой версией, как только она станет доступна), чтобы скачать фулл установщик.
Шаг 2. Запустите установщик
Мы рекомендуем установить OpenSSL вне вашей системной директории Windows.
Следуйте инструкциям по установке через GUI.
Шаг 3. Запустите бинарный файл OpenSSL
Чтобы начать работу с OpenSSL, вы можете просто щелкнуть по нему правой кнопкой мыши в проводнике Windows в месте его установки, например в моем случае:
OpenSSL
Материал из Xgu.ru
OpenSSL — универсальный криптографический инструмент, построенный вокруг протоколов SSL/TLS и сертификатов X.509.
Помимо того, что этот инструмент позволяет работать с соединениями SSL/TLS, сертификатами X.509, он может делать множество других полезных вещей: шифровать и расшифровывать файлы, создавать и проверять цифровые подписи, проверять числа на простоту, тестировать производительность компьютера и другое.
Содержание
Вопросы и ответы
Введение
Как определить какую версию OpenSSL я использую?
Использовать опцию version:
Расширенная информация с опцией -a:
Как получить список доступных команд?
Вызвать с неправильным ключом (например, help или -h).
Аналогично с подкомандами:
Как посмотреть список доступных шифров?
Использовать команду ciphers:
Измерение производительности
Как измерить производительность системы с помощью openssl?
Пример для 2.16GHz Intel Core 2.
Каждый тест можно вызывать отдельно:
Как измерить производительность сетевого соединения?
Помимо этого простейшего измерения у подкоманды s_time есть множество других возможностей:
Сэмулировать web-сервер с помощью openssl s_server:
Сертификаты
Как сгенерировать самоподписной сертификат?
Создать файл mycert.pem, в котором будет и секретный ключ и открытый сертификат, основанный на нём. Сертификат будет действителен в течение 365 дней; ключ (благодаря опции -nodes) будет нешифрованным.
После вызова команды надо будет ответить на несколько вопросов: Country Name, State, City и так далее. На вопрос “Common Name” нужно отвечать именем сервера, по которому будут обращаться люди.
Можно автоматизировать ввод ответов с помощью опции -subj.
Как сгенерировать запрос сертификата у VeriSign?
Секретный ключ в файле mykey.pem и запрос на сертификат myreq.pem:
Если ключ уже есть, и его надо использовать только для генерации сертификата, используется команда попроще:
Или, с информацией для сертификата прямо в командной строке:
Не допускайте ошибок в названиях! Каждый символ важен.
Файл с ключом нужно сохранить в надёжном месте.
Как проверить новый сертификат?
Подкоманда s_server предоставляет простой, но эффективный метод тестирования. В примерах ниже предполагается, что ключ и сертификат хранятся в файле mycert.pem.
Запустите тестовый сервер на машине, на которой будет использоваться сертификат. По умолчанию, открывается порт 4433; другой порт можно задать опцией -accept.
Если команда запустилась без ошибок, открывайте в браузере страницу: https://127.0.0.1:4433/
Как получить удалённый сертификат?
С помощью openssl и sed:
Можно вернуть данные openssl, например, для того чтобы выяснить, для каких дат он действителен:
Как извлечь какую-либо информацию из сертификата?
В SSL-сертификате есть много информации, в частности:
Опция текст даёт весь объём информации:
Другие опции дают другую информацию:
Извлечение открытого ключа, который требуется для проверки цифровой подписи (дайджеста):
Как экспортировать или импортировать сертификат PKCS#12?
Превратить pfx в pem:
Проверка сертификата
Приложения, слинкованные с библиотеками OpenSSL, могут проверять подлинность сертификатов, выданных сервером сертификатов (certificate authority, CA).
Как проверить сертификат?
Использовать подкоманду verify:
Если в сертификате всё в норме, то будет выдано сообщение OK:
Если чего-то не хватает, появятся соответствующие сообщения об ошибках, например:
Какие центры сертификации распознаёт OpenSSL?
По умолчанию, этот каталог находится в /usr/local/ssl, но большинство сборщиков размещает его в других местах, таких как /etc/pki/tls (Red Hat/Fedora), /etc/ssl (Gentoo), /usr/lib/ssl (Debian) или /System/Library/OpenSSL (Macintosh OS X).
Посмотреть, какой именно каталог используется в конкретной инсталляции, можно с помощью опции version(параметр OPENSSLDIR):
Внутри данного каталога есть подкаталог certs/, в котором находятся файлы трёх разных типов:
Например, ссылка f73e89fd.0 указывает на файл vsignss.pem. Значит, сертификат соответствует хэшу, который равен имени ссылки:
Когда приложение получает удалённый сертификат, оно сначала проверяет, есть ли этот сертификат в cert.pem и, если нет, смотрит в файле, соответствующем хэшу сертификата. Если такой файл найден, сертификат считается верным.
Нужно иметь в виду, что некоторые приложения, такие как Sendmail, например, позволяют во время исполнения указывать местоположение сертификатов, а некоторые, например Pine, нет.
Как мне заставить OpenSSL признавать сертификат?
Сертификат, которому нужно доверять, должен быть размещён в каталоге certs/. После этого необходимо создать хэшированную символическую ссылку на него. Вот небольшой скрипт, который делает это:
Клиенты и серверы для командной строки
Подкоманды s_client и s_server предоставляют возможность для запуска SSL-клиентов для командной строки.
Как подключиться к безопасному SMTP-серверу?
С помощью подкоманды s_client можно проверить или даже использовать SMTP-сервер с поддержкой SSL.
Безопасные SMTP-серверы могут предлагать безопасные соединения на портах: 25 (TLS), 465 (SSL) и 587 (TLS). Где-то в районе релиза 0.9.7 у openssl появилась возможность использовать STARTTLS в ходе общения с SMTP-серверами.
Чтобы использовать для обозначения конца строки именно CRLF, а не CR или LF, используется опция -crlf. Это важно особенно для Qmail.
Как подключиться к [какому-либо] безопасному серверу?
На момент написания openssl поддерживал TLS из командной строки только с SMTP, поэтому для других протоколов нужно использовать прямые SSL-соединения.
Как запустить SSL-сервер из командной строки?
Подкоманда s_server позволяет запустить сервер с поддержкой SSL прямо из командной строки; сервер предназначен только для проверки и отладки. Для полноценной работы рекомендуется использовать stunnel.
Подкоманда s_server работает намного лучше, если есть сертификат; когда его нет, её возможности сильно сокращаются.
Дайджесты
Создание дайджестов (криптографических контрольных сумм) с помощью подкоманды dgst — одна из наиболее распространённых задач, выполняемых с помощью openssl.
Как создавать дайджесты MD5 или SHA1?
Дайджесты создаются с помощью подкоманды dgst:
Дайджест MD5 эквивалентен дайджесту, создаваемому известной утилитой md5sum, хотя выводится в другом формате:
То же верно и для дайджестов SHA1 и программы sha1sum:
Как подписать дайджест?
Для того, чтобы быть уверенным, что дайджест никто не изменял, его можно подписать с помощью своего закрытого ключа.
Подписать дайджест SHA1 для файла foo-1.23.tar.gz:
Как проверить подписанный дайджест?
Для того чтобы проверить правильность дайджеста, нужен файл, на основе которого был получен дайджест, сам подписанный дайджест и открытый ключ того, кто подписывал дайджест:
Как создать запись типа digest для файла паролей Apache?
У web-сервера Apache есть специальный формат файла с паролями, использующийся для выполнения digest-аутентификации. В комплект с web-сервером входит утилита htdigest, но она умеет записывать данные только в файл, а не на стандартный поток вывода. При работе с удалёнными пользователями может быть целесообразным им сначала сгенерировать хэш, а потом переправить его по почте или другому каналу информации для включения в базу.
Формат базы паролей прост: список нескольких полей, разделённых двоеточиями. Поля:
Скрипт, представленный ниже, повторяет действие htdigest с той разницей, что выводит данные на стандартный поток вывода. Кроме того, он умеет считывать данные со стандартного потока ввода.
Какие ещё есть дайджесты?
Подкоманда list-message-digest-commands даёт список типов дайджестов, доступных в данной инсталляции.
Шифрование/расшифровка
Как закодировать что-то по методу base64?
Использовать опцию -base64.
Закодировать одну строку:
Без перевода строки (важно для паролей):
Опция -d выполняет обратный процесс (то есть, раскодирование):
Как зашифровать файл?
Простое шифрование файлов, вероятно, лучше делать инструментами типа GPG. Тем не менее, иногда может возникнуть необходимость зашифровать файл без развёртывания инфраструктуры ключей и сертификатов, а пользуясь одним только паролем. Второе, что нужно будет запомнить — это шифр, с помощью которого выполнялось шифрование.
Список поддерживаемых шифров есть на странице enc(1). Более просто (и более точно) узнать этот список у самой программы openssl.
Кроме выбора шифра нужно также решить, будут ли данные закодированы в base64. Если будут, то их можно будет, грубо говоря, вставить в почтовое сообщение, прямо в текст. В противном случае это будет простой бинарный файл.
Расшифровка файла на стороне получателя:
Можно не вводить парольную фразу постоянно при шифровании и расшифровке, а передавать её автоматически (подробнее: openssl(1); раздел «PASS PHRASE ARGUMENTS»). Формат аргумента прост:
Ошибки
Как интерпретировать сообщения об ошибках SSL?
В системных журналах обнаружились строки, которые, похоже, имеют отношение к OpenSSL или crypto:
В первом приближении определить, что не так, можно с помощью подкоманды errstr, которая умеет интерпретировать код ошибки. Код ошибки находится между «error:» и «:lib». В данном случае это 0407006A.
Дальше информацию надо искать в документации. В данном случае в man-странице RSA_padding_add_PKCS1_type_1(3) будет написано, что PKCS #1 использует для подписей блочные методы.
Ключи
Как сгенерировать ключ RSA?
Использовать подкоманду genrsa:
Как сгенерировать открытый ключ RSA?
С помощью подкоманды rsa можно создать открытую версию для закрытого ключа RSA:
Как сгенерировать ключ DSA?
Для построения ключей DSA нужен специальный файл параметров (parameter file), кроме того, операции с DSA медленнее чем аналогичные операции с RSA, в связи с этим, DSA используется не так часто, как RSA.
Если нужно сгенерировать только один ключ DSA, то это можно сделать одной командой, с помощью подкоманды dsaparam:
Если же нужно создавать несколько ключей DSA, перед тем как их генерировать, можно сделать общий файл параметров. Файл параметров генерируется сравнительно медленно, а файлы ключей очень быстро.
Как создать ключ, основанный на эллиптических кривых (elliptic curve key)?
Процедуры для работы с эллиптическими кривыми были добавлены в openssl, начиная с версии 0.9.8. Работа с этими процедурами выполняется через подкоманду ecparam.
Как создать открытый EC ключ?
С помощью подкоманды ec можно создать открытую версию для закрытого ключа EC (elliptic curve):
Как удалить парольную фразу у ключа?
Каждый раз, когда запускается демон, использующий ключ, надо будет набирать парольную фразу. Её можно убрать.
Допустим, ключ, зашифрованный парольной фразой, находится в файле key.pem; после выполнения команды расшифрованный ключ будет в newkey.pem:
Если закрытый ключ (private key) и открытый сертификат хранятся в одном файле, нужно будет выполнить две команды:
Хэши для паролей
С помощью подкоманды passwd можно генерировать хэши паролей, которые совместимы со стандартными хэшами из /etc/passwd, /etc/shadow или файла паролей Apache.
Как сгенерировать хэш в стиле crypt?
Сгенерировать хэш очень просто:
Если salt для пароля известен, можно воссоздать хэш.
Как сгенерировать хэш пароля в стиле shadow?
Простые числа
Поскольку openssl активно использует механизмы для работы с простыми числами, не удивительно, что в нём есть соответствующие процедуры. Начиная с версии 0.9.7e (или где-то так), в openssl появилась подкоманда binary.
Как проверить, является ли число простым?
Передать число как аргумент к подкоманде prime. Результат будет не в десятичном, а в шестнадцатеричном виде.
Можно проверять и шестнадцатеричные числа:
Как сгенерировать набор простых чисел?
Сгенерировать множество чисел и оставить только простые среди них. Для генерирования последовательностей удобно использовать seq.
Случайные данные
Как генерировать случайные данные?
Используйте подкоманду rand.
На UNIX/Linux-системах, в которых есть файл /dev/urandom, похожего эффекта можно добиться иначе, и иногда с лучшим результатом даже:
Между устройствами random и urandom есть разница. Дополнительная информация в random(4) для Linux и BSD или random(7D) для Solaris.
S/MIME
S/MIME — стандарт для получения и отправки безопасных MIME-данных, в особенности, почтовых сообщений. Большинство почтовых клиентов умеет работать с такими сообщениями сами, но для этого же можно использовать и openssl smime.
Много хороших примеров есть в smime(1).
Как проверить подписанное сообщение S/MIME?
Проверить, сохранённое в файле msg.txt подписанное сообщение:
Если сертификат отправителя подписан сервером сертификатов, которому доверяет инсталляция OpenSSL, будут показаны заголовки сообщения, копия сообщения и заключительная строка «Verification successful».
Если сообщение было изменено, в выводе будет содержаться сообщение о том, что подпись или дайджест (контрольная сумма) не соответствуют действительности:
Если сертификат не опознан, возникнет похожая ошибка:
Если нужно вытащить сертификат автора письма, для того, чтобы использовать его в дальнейшем, то нужна только первая часть команды:
Дальше этот сертификат можно или интегрировать в инфраструктуру OpenSSL, или сохранить его для будущего использования, например, такого:
Как зашифровать сообщение S/MIME?
Допустим, кто-то прислал вам свой сертификат, которым попросил шифровать сообщения ему. Сертификат сохранён в her-cert.pem. Ответ сохранен в файле my-message.txt.
Для того чтобы получить шифрование по умолчанию RC2-40 (оно, правда, слабое), нужно только сказать ‘openssl, где находится сертификат:
Если есть уверенность, что на удалённой стороне есть современная поддержка SSL, можно использовать алгоритм шифрования посильнее чем DES:
По умолчанию, зашифрованные сообщения, включая почтовые заголовки, отправляются на стандартный поток вывода. С помощью опции -out их можно отправить в файл. Если постараться, то передать сообщение можно и сразу программе sendmail.
Как подписать сообщение S/MIME?
Подписать (но не шифровать) сообщение своим собственным сертификатом, так чтобы получатель имел возможность убедиться, кто является истинным автором.
Советы и трюки по работе с OpenSSL
Автор: Джошуа Дэвис (Joshua Davies)
Получение справки о подкомандах OpenSSL
Утилита для работы с командной строкой в OpenSSL является оболочкой для многих «подпрограмм». Для запуска нужной подпрограммы необходимо указать ее имя (например, ca, x509, asn1parse и т. д.) В документации по OpenSSL о подпрограммах сказано не особо много, однако на каждую такую подкоманду есть отдельная страница с документацией. Например, чтобы получить справку о подпрограмме openssl x509, наберите следующую команду:
Просмотр необработанной структуры ASN.1 файла
Протокол SSL является реализацией PKI (Public Key Infrastructure, Инфраструктура Открытых Ключей) и как таковой работает непосредственно с сертификатами. Можно с уверенностью сказать, если при настройке SSL возникли какие-то проблемы, то с 90% вероятностью дело в неправильно сконфигурированном сертификате. Сертификаты (или, если быть более точным, X.509 сертификаты) описываются формальным языком «ASN.1» (или Abstract Syntax Notation (.1)), в чем-то схожим с XML или JSON. Существует довольно много файлов, связанных с сертификатами, и нет никаких стандартов относительно их имен или расширений. Когда файл сертификата обнаружен, просмотр необработанной структуры (raw structure) может помочь в поиске проблемы. Однако если открыть файл сертификата, скажем, в текстовом редакторе, то можно увидеть нечто подобное:
MIICbDCCAioCAQAwaDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlRYMQ4wDAYDVQQHEwVQbGFubzER
MA8GA1UEChMIMnhvZmZpY2UxETAPBgNVBAsTCFJlc2VhcmNoMRYwFAYDVQQDEw1Kb3NodWEgRGF2
aWVzMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2
USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4
O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmC
ouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCB
gLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhR
kImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAOPlkQGq47HhKxmGBTDWaLaa140+Rl3b+
rZk3TpODy/BTS6O+v608EEBnJvF6ck26qFjLBHPC8IihovdcczKEAofIiR+do7CMjUEWdWIFnwKX
6W46ElBJN1ieWl1HtGj5RXnSfcfitiRGOiee1jsyV7wVn0Y4/8vbYPAUFRSPpk2gADALBgcqhkjO
OAQDBQADLwAwLAIUFgkt1lvVhcR1JE6wW7pyBAsgA1wCFHcSuOTaZdIM/dKwJ5dOFgsK0zOi
Файл закодирован по схеме Base64, но раскодировка не даст сколь-нибудь полезных результатов, поскольку в Base64 закодировано представление по стандарту DER (Distinguished Encoding Rule). Чтобы получить нечто более осмысленное, необходимо воспользоваться подкомандой asn1parse:
Результат выполнения подпрограммы:
0:d=0 hl=4 l= 620 cons: SEQUENCE
4:d=1 hl=4 l= 554 cons: SEQUENCE
8:d=2 hl=2 l= 1 prim: INTEGER :00
11:d=2 hl=2 l= 104 cons: SEQUENCE
13:d=3 hl=2 l= 11 cons: SET
15:d=4 hl=2 l= 9 cons: SEQUENCE
17:d=5 hl=2 l= 3 prim: OBJECT :countryName
22:d=5 hl=2 l= 2 prim: PRINTABLESTRING :US
26:d=3 hl=2 l= 11 cons: SET
28:d=4 hl=2 l= 9 cons: SEQUENCE
30:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName
35:d=5 hl=2 l= 2 prim: PRINTABLESTRING :TX
39:d=3 hl=2 l= 14 cons: SET
41:d=4 hl=2 l= 12 cons: SEQUENCE
43:d=5 hl=2 l= 3 prim: OBJECT :localityName
48:d=5 hl=2 l= 5 prim: PRINTABLESTRING :Plano
55:d=3 hl=2 l= 17 cons: SET
57:d=4 hl=2 l= 15 cons: SEQUENCE
59:d=5 hl=2 l= 3 prim: OBJECT :organizationName
64:d=5 hl=2 l= 8 prim: PRINTABLESTRING :2xoffice
74:d=3 hl=2 l= 17 cons: SET
76:d=4 hl=2 l= 15 cons: SEQUENCE
78:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName
83:d=5 hl=2 l= 8 prim: PRINTABLESTRING :Research
93:d=3 hl=2 l= 22 cons: SET
95:d=4 hl=2 l= 20 cons: SEQUENCE
97:d=5 hl=2 l= 3 prim: OBJECT :commonName
102:d=5 hl=2 l= 13 prim: PRINTABLESTRING :Joshua Davies
117:d=2 hl=4 l= 439 cons: SEQUENCE
121:d=3 hl=4 l= 300 cons: SEQUENCE
125:d=4 hl=2 l= 7 prim: OBJECT :dsaEncryption
134:d=4 hl=4 l= 287 cons: SEQUENCE
138:d=5 hl=3 l= 129 prim: INTEGER :FD7F53811D75122952DF4A9C2.
270:d=5 hl=2 l= 21 prim: INTEGER :9760508F15230BCCB292B982A.
293:d=5 hl=3 l= 129 prim: INTEGER :F7E1A085D69B3DDECBBCAB5C3.
425:d=3 hl=3 l= 132 prim: BIT STRING
560:d=2 hl=2 l= 0 cons: cont [ 0 ]
562:d=1 hl=2 l= 11 cons: SEQUENCE
564:d=2 hl=2 l= 7 prim: OBJECT :dsaWithSHA1
573:d=2 hl=2 l= 0 prim: NULL
575:d=1 hl=2 l= 47 prim: BIT STRING
Если вы немного знакомы с концепцией PKI, то, возможно, уже догадались, что это ни что иное как запрос на подпись сертификата. В недавних версиях OpenSSL появился параметр –i, используемый подкомандой asn1parse и отвечающий за глубину парсинга, что может быть полезно при анализе больших структур (например, цепочек сертификатов).
Работа с PEM-файлами и файлами, закодированными по стандарту DER
Впервые термин PEM начал использоваться в проекте PGP (Pretty Good Privacy), который был особенно популярен в 90-х годах и направлен на защиту электронной почты. В то же время предпринималась попытка популяризировать стандарт IETF, где описывалась общая инфраструктура по шифрованию электронных писем. В настоящее время любой файл, закодированный в Base64 и имеющий отношение к сертификату, мы называем «закодированный по стандарту PEM», даже если он не предназначен для передачи конфиденциальной информации.
Если и в этом случае возникает ошибка «offset too large», значит, файл либо не имеет отношение к сертификату, либо произошло его повреждение во время передачи.
Просмотр содержимого сертификата
Допустим, вы имеете дело с настоящим сертификатом стандарта X.509. Подпрограмма asn1parse во всех деталях расскажет о файле сертификата ( возможно, даже больше, чем вы ожидали). Вам же нужно узнать лишь срок действия и имя.
——BEGIN CERTIFICATE——
MIIEszCCA5ugAwIBAgIJAMR0RhX+M2iEMA0GCSqGSIb3DQEBBQUAMIGXMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCVFgxDjAMBgNVBAcTBVBsYW5vMREwDwYDVQQKEwgy
.
qRH8SwcC2/+kLp5/SqpC7Tv1K1466jrxltb4ncJL6Is8p2FDRn1GTLTj3Z086JgX
s9y/DGoyTw==
——END CERTIFICATE——
Для того чтобы OpenSSL отобразил нечто осмысленное, необходимо указать корректные параметры, например:
-subject
Вывод имени сертификата
-issuer
Вывод имени эмитента сертификата
-dates
Вывод срока действия сертификата
По умолчанию вся информация о сертификате будет выведена после закодированного содержимого. Чтобы закодированное содержимое не выводилось, используйте команду –noout (логичнее было бы сделать использование этого параметра по умолчанию). Если нужно вывести всю общую информацию о сертификате (что требуется в большинстве случаев), используйте параметр –text.
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
56:32:44:76:86:8c:08:92:74:71:0e:ac:a6:7d:ba:1d:7c:d3:
b6:74:ef:27:7a:5e:53:21:fc:8e:eb:26:58:e0:6e:4f:5c:01:
f1:40:ca:0a:e9:d2:0e:00:60:ae:1f:f6:a5:a4:4c:47:fb:e0:
68:7f:25:63:ab:60:38:0f:74:94
Создание самоподписанного тестового сертификата
Параметр –newkey заставляет OpenSSL сгенерировать секретный ключ, иначе вам придется ввести его самостоятельно.
Если вы не хотите выводить на экран содержимое сертификата, используйте параметр –out.
По умолчанию секретный ключ записывается в файл privkey.pem (если уже существует файл с таким именем, то он перезаписывается без предупреждения!). Чтобы избежать возможных проблем, старайтесь определять самостоятельно файл для секретного ключа:
Если вы хотите подцепить SSL на сервере Apache2 (только для тестирования!), раскомментируйте строку #Include /private/etc/apache2/extra/httpd-ssl.conf в файле /etc/apache2/httpd.conf и запустите следующую команду:
При этом вам будет предложено ввести некоторые параметры сертификата, но главное – в параметре Common Name следует указать «localhost».
Создание запроса для загрузки сертификата в центр сертификации
Естественно после тестирования вам потребуется настоящий сертификат. Если, к примеру, установить самоподписанный сертификат на сервер, в браузере пользователя появится следующее сообщение:
Рисунок 1: Сообщение с предупреждением о недостоверном сертификате, которое выводится в браузере Chrome
Вышеуказанная команда создает файл PKCS #10 (или запрос на подпись сертификата), который нужно загрузить в центр сертификации. Процедура получения достоверного сертификата варьируется от центра к центру, но в целом, вначале, вам нужно загрузить CSR-файл через вебформу. По завершению всех необходимых проверок, сертификат будет готов к работе. Обратите внимание, что сертификат не содержит секретный ключ (если вы еще не успели забыть, то он генерируется в отдельный файл). По сути, это часть публичной информации, которую ваш сервер будет отсылать каждому клиенту, пытающемуся подключиться по протоколу HTTPS.
Помните, когда я говорил о том, что могут возникнуть проблемы при перезаписи файла секретного ключа? Так вот, представьте себе ситуацию, когда CSR загружен в центр сертификации, а потом, нечаянно, перезаписан файл секретного ключа. Не забывайте, что секретный ключ не подлежит восстановлению (иначе инфраструктура, а которой базируется SSL, была бы уязвима). Если же ключ утерян, сгенерированный сертификат становится бесполезен (необходимо делать регулярные резервные копии подобных файлов).
Подписание запроса на создание сертификата
При помощи OpenSSL можно создать свой собственный центр сертификации и не прибегать к услугам коммерческих центров и тем самым сэкономить немного денег.
В документации утверждается, что средства по созданию своего собственного центра сертификации были разработаны лишь в демонстрационных целях. Их никогда не планировалось использовать для работы в боевых условиях. Выдержка из документации:
Для нечастого использования – средства OpenSSL вполне подходят, однако если вы хотите создать что-то более масштабное, необходимо развернуть серьезную инфраструктуру по управлению сертификатами.
Во-первых, как было показано выше, необходимо создать самоподписанный корневой сертификат. После этого создайте конфигурационный файл. В OpenSSL есть пример файла openssl.cnf, который находится в соответствующей папке (название директории может изменяться от версии к версии). В большинстве случаев (и особенно при тестировании) можно использовать как раз этот файл без каких-либо изменений. Если же вы планируете более плотно поработать с сертификатами, следует поподробнее ознакомиться с содержимым файла конфигурации. В нем есть несколько полезных параметров, например, местонахождение серийных номеров и списка отозванных сертификатов (Certificate Revocation List). Я не будут рассказывать обо всех опциях (если по-честному, с некоторыми из них я не сильно знаком). В большинстве случаев вы можете воспользоваться настройками по умолчанию.
Однако некоторые записи из раздела [ CA_default ] ссылаются на директории и файлы, которые, в случае их отсутствия, могут привести к проблемам при развертывании центра сертификации, и вы должны создать все необходимые файлы и папки перед тем, как подписывать CSR. В составе OpenSSL идет простая утилита CA.pl, которая упрощает весь процесс (на самом деле просто создается структура директорий, на которые ссылается файл openssl.cnf). За создание папок отвечает следующая секция:
mkdir demoCA
mkdir demoCA/certs
mkdir demoCA/crl
mkdir demoCA/newcerts
mkdir demoCA/private
touch demoCA/index.txt
echo «01» | demoCA/crlnumber
Этого вполне достаточно, чтобы развернуть простейший центр сертификации. В любой момент, в файле openssl.cnf можно изменить имена файлов и директорий.
После создания рабочего файла конфигурации и валидного CSR, можно подписать запрос при помощи следующей команды:
Подписанные сертификат можно отсылать отправителю без каких-либо ухищрений, поскольку за безопасность всей инфраструктуры отвечает секретный ключ.
Рассмотрим еще раз весь алгоритм при развертывании центра сертификации:
Создаем конфигурационный файл. Его минимальное содержимое должно быть следующим:
Если вы намереваетесь использовать центр сертификации для серьезных целей, установите сильный пароль для защиты файла cakey.pem и выставьте соответствующие права доступа:
$ chmod 400 cakey.pem
Сам по себе сертификат (в данном случае cakey.pem) будет размещен в конечных пунктах, где будут утверждаться подписанные сертификаты (к примеру, веб сервера, которые сконфигурированы для запроса клиентских сертификатов).
Команда для подписания запроса:
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Смотрим обновленное содержимое директории:
$ ls
ca.cnf certs index.txt.attr serial
cacert.pem index.txt.old serial.old
cakey.pem index.txt signed.pem
Были добавлены новые файлы: index.txt.attr, index.txt.old и serial.old
Также в директории certs появилась копия подписанного сертификат:
Этот файл идентичен файлу signed.pem.
Следует отметить на поле subject у подписанного сертификата:
Оно не совпадает с тем же самым полем из запроса:
Причина в содержимом раздела [ policy ], который находится в конфигурационном файле. Там я указал, чтобы выводился только атрибут commonName. Если бы я заходил отобразить другие атрибуты, то указал бы их отдельно:
countryName = optional
stateOrProvinceName = optional
Важно отметить, что поле subject подписанного сертификата необязательно будет совпадать с полем subject у запроса. Идентичным является лишь публичный ключ.
В этой минимальной конфигурации нашего центра сертификации отсутствуют другие важные возможности. Например, я не добавил поддержку аннулирования сертификатов. В данном случае моей целью было продемонстрировать вам на наглядном примере, как происходит процесс подписи, а не показать стабильное рабочее решение готового центра сертификации.
Подписание сертификата с начальной прошлой датой
При работе с сертификатами я столкнулся с проблемой, связанной с часовыми поясами. По умолчанию при подписании сертификата используется часовой пояс сервера. Бывали случаи, когда сертификат, созданный в часовом поясе восточном побережья, не устанавливался на сервере, находящимся на западном. Конечно, проблема не столь критична, но слегка раздражает. В OpenSSL команда ca позволяет указать начальную дату задним числом:
Передача информации для поля subject через командную строку
Если у вас уже есть некоторый опыт по созданию тестовых сертификатов (или даже отправки запроса в центр сертификации), то, возможно, вы заметили, что немного раздражает постоянно указывать поля country, state, locality, и т. д. Вы можете передать эту информацию через командную строку при помощи следующего скрипта: