В целях тестирования необходимо создать защищенные самозаверяющие сертификаты сервера и клиента. Однако я обнаружил, что многие учебные материалы, доступные в Интернете, являются сложными и не охватывают сертификаты, в которых используются безопасные алгоритмы. Итак, поскольку «необходимость — мать изобретений», я решил создать простое руководство и поделиться им со всеми вами!
Почему OpenSSL?
Я решил использовать OpenSSL, потому что он доступен на всех платформах (Linux, macOS, Windows), что означает, что этот учебник можно использовать на любых платформах.
О шагах
Хотя в этом процессе много шагов, пожалуйста, не беспокойтесь. Моя цель — сделать это как можно более простым для вас, и поэтому я разбил каждое действие на один шаг. Таким образом, все должно быть ясно, и я надеюсь, что вы не будете терять время или расстраиваться по пути. Есть одно требование, прежде чем начать все это, вам нужно иметь OpenSSL . Хорошо готов? Давайте начнем!
Шаг 1 — Центр сертификации
Шаг 1.1 — Генерация закрытого ключа центра сертификации (ЦС)
Каждый сертификат должен иметь соответствующий закрытый ключ. Создайте это с помощью следующей командной строки:
1 |
openssl ecparam -name prime256v1 -genkey -noout -out ca.key |
Это создаст 256-битный закрытый ключ по эллиптической кривой, которая является отраслевым стандартом. Мы знаем, что Curve25519 считается более безопасным, чем эта кривая NIST P-256, но она стандартизирована только в TLS 1.3, которая пока не получила широкого распространения.
Шаг 1.2 — Генерация сертификата центра сертификации
CA генерирует и выдает сертификаты.
Сгенерируйте сертификат корневого центра сертификации, используя следующую командную строку:
1 |
openssl req -new -x509 -sha256 -key ca.key -out ca.crt |
Вам будет предложено предоставить некоторую информацию о ЦС. Вот как выглядит запрос:
1 2 3 4 5 6 7 8 9 10 11 |
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. |
Ниже приведен пример использования информации, относящейся к okolokompa (замените ее собственной конкретной информацией):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Country Name (2 letter code) [AU]:CA State or Province Name (full name) [Some-State]:QC Locality Name (eg, city) []:Lavaltrie Organization Name (eg, company) [Internet Widgits Pty Ltd]:okolokompa inc. Organizational Unit Name (eg, section) []:Security Common Name (e.g. server FQDN or YOUR name) []:okolokompa.ru <strong>Email Address []:security@okolokompa.ru</strong> |
Ваш ЦС будет создан после ввода вашей информации.
Шаг 2: Сертификат сервера
Этот шаг может быть повторен для каждого сервера, который вам нужен.
Шаг 2.1 — Генерация закрытого ключа сертификата сервера
Чтобы сгенерировать закрытый ключ сервера, используйте следующую командную строку:
1 |
openssl ecparam -name prime256v1 -genkey -noout -out server.key |
Это создаст имя файла server.key.
Шаг 2.2 — Генерация запроса на подпись сертификата сервера
Чтобы сгенерировать запрос на подпись сертификата сервера, используйте следующую командную строку:
1 |
openssl req -new -sha256 -key server.key -out server.csr |
Для максимальной безопасности мы настоятельно рекомендуем генерировать запрос на подпись только на сервере, где будет установлен сертификат. Закрытый ключ сервера никогда не должен покидать сервер!
Вам будет предложено предоставить некоторую информацию о сертификате сервера. Вы можете ввести ту же информацию, которую вы использовали для сертификата CA. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Country Name (2 letter code) [AU]:CA State or Province Name (full name) [Some-State]:QC Locality Name (eg, city) []:Lavaltrie Organization Name (eg, company) [Internet Widgits Pty Ltd]:okolokompa inc. Organizational Unit Name (eg, section) []:Security Common Name (e.g. server FQDN or YOUR name) []:okolokompa.ru Email Address []:security@okolokompa.ru |
Кроме того, вам будет предложено создать пароль. Убедитесь, что вы используете длинный, надежный и уникальный пароль. Вот пример (не используйте этот!):
1 |
^x^GT+HEy]h9C@8>ZBrb%P>{ |
Шаг 2.3 — Генерация сертификата сервера
Теперь вы готовы сгенерировать сертификат сервера, что можно сделать с помощью следующей командной строки:
1 |
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 1000 -sha256 |
Этот шаг должен выполняться только на сервере центра сертификации, поскольку закрытый ключ CA никогда не должен покидать хост, на котором он был сгенерирован. Вы должны передать запрос на подпись на сервер CA.
Шаг 3: Сертификат клиента
Этот шаг может быть повторен для каждого клиента, который вам нужен.
Шаг 3.1 — Генерация закрытого ключа сертификата клиента
Используйте следующую командную строку для создания закрытого ключа сертификата клиента:
1 |
openssl ecparam -name prime256v1 -genkey -noout -out client1.key |
Это создаст файл с именем «client1.key».
Шаг 3.2 — Создание запроса на подпись сертификата клиента
Вам необходимо создать запрос на подпись для создания сертификата с CA. Используйте следующую командную строку:
1 |
openssl req -new -sha256 -key client1.key -out client1.csr |
Для максимальной безопасности мы настоятельно рекомендуем генерировать запрос на подпись сертификата только на клиенте, на котором будет установлен сертификат. Закрытый ключ клиента никогда не должен покидать клиента!
Далее вам будет предложено предоставить информацию о клиентском сертификате. Вы можете ввести ту же информацию, что и сертификат CA, за исключением двух последних записей: Common Name и Email Address. Это должны быть имя и адрес электронной почты человека, а не вашей компании. Например:
1 2 3 |
Common Name (e.g. server FQDN or YOUR name) []:Tester Email Address []:tester@okolokompa.ru |
Вам также будет предложено установить пароль в запросе на подпись сертификата. Еще раз убедитесь, что вы выбрали надежный и безопасный пароль. Вот пример (не используйте этот!):
1 |
^x^GT+HEy]h9C@8>ZBrb%P>{ |
Шаг 3.3 — Генерация клиентского сертификата
Теперь вы готовы сгенерировать сертификат клиента, что можно сделать с помощью следующей командной строки:
1 |
openssl x509 -req -in client1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client1.crt -days 1000 -sha256 |
Этот шаг должен выполняться только на сервере центра сертификации, поскольку закрытый ключ CA никогда не должен покидать хост, на котором он был сгенерирован. Вы должны передать запрос на подпись на сервер CA.
Мы рекомендуем создавать один сертификат для каждого клиента, так как это позволяет быстро идентифицировать уязвимого клиента в случае возникновения проблемы или проблемы. Для максимальной безопасности закрытый ключ клиента должен оставаться на клиенте и никогда не копироваться на другой хост.