🗝️ Как создать CA и генерировать сертификаты и ключи SSL / TLS |

🗝️ Как создать CA и генерировать сертификаты и ключи SSL / TLS

Мануал

В этом руководстве объясняется процесс создания ключей и сертификатов CA и их использования для создания сертификатов и ключей SSL / TLS с использованием таких утилит SSL, как openssl и cfssl.

Терминологии, используемые в этой статье:

  1. PKI – Public key infrastructure
  2. CA – Certificate Authority
  3. CSR – Certificate signing request
  4. SSL – Secure Socket Layer
  5. TLS – Transport Layer Security

Рабочий процесс создания сертификата

Ниже приведены шаги, необходимые для создания сертификатов CA, SSL / TLS.

CA ключ и создание сертификата

  • Создайте файл закрытого ключа CA с помощью утилиты (OpenSSL, cfssl и т. д.)
  • Создайте корневой сертификат CA, используя закрытый ключ CA.

Процесс создания сертификата сервера

  • Сгенерируйте закрытый ключ сервера с помощью утилиты (OpenSSL, cfssl и т. д.)
  • Создайте CSR, используя закрытый ключ сервера.
  • Создайте сертификат сервера, используя ключ CA, сертификат CA и CSR сервера.

В этом руководстве мы объясним шаги, необходимые для создания сертификатов CA, SSL / TLS с использованием следующих утилит:

  1. openssl
  2. cfssl
Данное руководство посвящено созданию собственных сертификатов CA, SSL / TLS.
Он предназначен для разработки или использования во внутренней сети, где каждый может установить предоставленный вами сертификат корневого УЦ.
Для использования в общедоступных (интернет) службах, вы должны рассмотреть возможность использования любых доступных сторонних служб CA, таких как Digicert и т. д.

Генерация сертификатов с использованием CFSSL и CFSSLJSON

CFSSL и CFSSLJSON являются инструментами PKI от Cloudflare. Это делает вашу жизнь проще для создания CSR и ключей сертификатов.

Установите CFSSL и CFSSLJSON на Linux

1. Загрузите исполняемые файлы и сохраните их в /usr/local/bin

curl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 \
       -o /usr/local/bin/cfssl
curl https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 \
       -o /usr/local/bin/cfssljson
curl https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 \
       -o /usr/local/bin/cfssl-certinfo
2. Добавьте права на выполнение для загруженных исполняемых файлов.
1
2
3
chmod +x /usr/local/bin/cfssl \
         /usr/local/bin/cfssljson \
         /usr/local/bin/cfsslcertinfo
3. Проверьте установку, выполнив команду cfssl:
cfssl

Создайте сертификат CA и его ключ

Шаг 1: Создайте папку с именем cfssl для хранения всех сертификатов и перейдите в папку.
mkdir cfssl
cd cfssl
Шаг 2: Создайте файл ca-csr.json с необходимой информацией.
cat > ca-csr.json <<EOF
{
"CN": "Demo CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "California",
"ST": "Milpitas"
}
]
}
EOF
Вы можете проверить поддерживаемые значения для csr и config, используя следующие команды:
cfssl print-defaults config
cfssl print-defaults csr
Шаг 2. Создайте ключ CA и файл сертификата (ca-key.pem и ca.pem) с помощью файла ca-csr.json.
cfssl gencert -initca ca-csr.json | cfssljson -bare ca –
Шаг 3: Создайте ca-config.json с подписью и данными профиля.
Это будет использоваться для создания сертификатов сервера или клиента, которые можно использовать для настройки аутентификации на основе SSL / TSL.
cat > ca-config.json <<EOF 
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"web-servers": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "8760h"
}
}
}
}
EOF

Генерация сертификатов SSL / TLS

Шаг 1: Создайте server-csr.json с данными вашего сервера.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cat > servercsr.json <<EOF
{
“CN”: “scriptcrunch”,
“hosts”: [
“scriptcrunch.com”,
“www.scriptcrunch.com”
],
“key”: {
“algo”: “rsa”,
“size”: 2048
},
“names”: [
{
“C”: “US”,
“L”: “CA”,
“ST”: “San Francisco”
}
]
}
EOF

Примечание: запись hosts в json должна содержать DNS или публичный / частный IP-адрес сервера, имена хостов, локальный DNS и т. д. В зависимости от интерфейса, гп который вы хотите получать запросы на аутентификацию. Например, у вас может быть сервер с аутентификацией TLS через общедоступные сети и частная сеть внутри организации.

Шаг 2: Теперь создайте SSL-сертификаты сервера, используя ключи CA, certs и csr сервера.
Это создаст файлы server-key.pem (закрытый ключ) и server.pem (сертификаты).
 cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-profile=web-servers \
server-csr.json | cfssljson -bare server

Генерация сертификатов с использованием OpenSSL

Утилита Openssl присутствует по умолчанию во всех системах на базе Linux и Unix.

Создайте сертификат CA и его ключ

Шаг 1: Создайте каталог openssl и CD к нему.

mkdir openssl && cd openssl
Шаг 2: Сгенерируйте файл секретного ключа CA.
openssl genrsa -out ca.key 2048

Шаг 3: Сгенерируйте файл сертификата CA x509, используя ключ CA.

Вы можете определить срок действия сертификата в днях.

Здесь мы указали 1825 дней.

Следующая команда запросит детали сертификата, такие как имя команды, местоположение, страна и т. д.

openssl req -x509 -new -nodes \
     -key ca.key -sha256 \
     -days 1825 -out ca.crt
Или вы можете передать эту информацию в команду, как показано ниже.
1
2
3
openssl req x509 new nodes \
      key ca.key subj “/CN=scriptcrunch/C=US/L=CALIFORNIA” \
      days 1825 out ca.crt

Генерация сертификатов SSL / TLS

Шаг 1. Создайте закрытый ключ сервера

openssl genrsa -out server.key 2048
Шаг 2. Создайте файл конфигурации с именем csr.conf для генерации запроса на подпись сертификата (CSR), как показано ниже.
Замените значения в соответствии с вашими потребностями.
cat > csr.conf <<EOF

[ req ]

default_bits = 2048

prompt = no

default_md = sha256

req_extensions = req_ext

distinguished_name = dn

[ dn ]

C = US

ST = California

L = San Fransisco

O = Scriptcrunch

OU = Scriptcrunch Dev

CN = scriptcrunch.com

[ req_ext ]

subjectAltName = @alt_names

[ alt_names ]

DNS.1 = scriptcrunch

DNS.2 = scriptcrunch.com

IP.1 = 10.34.12.5

IP.2 = 10.34.12.5

[ v3_ext ]

authorityKeyIdentifier=keyid,issuer:always

basicConstraints=CA:FALSE

keyUsage=keyEncipherment,dataEncipherment

extendedKeyUsage=serverAuth,clientAuth

subjectAltName=@alt_names

EOF

alt_names должен содержать DNS ваших серверов, где вы хотите использовать SSL.
Также добавьте все IP-адреса, связанные с сервером, если клиенты используют этот IP-адрес для подключения к серверу по протоколу SSL.

Шаг 3: Сгенерируйте CSR, используя закрытый ключ и файл конфигурации.

openssl req -new -key server.key -out server.csr -config csr.conf
Шаг 4. Создайте SSL-сертификат сервера, используя ca.key, ca.crt и server.csr
1
2
3
openssl x509 req in server.csr CA ca.crt CAkey ca.key \
CAcreateserial out server.crt days 10000 \
extensions v3_ext extfile csr.conf

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий для cryptoparty Отменить ответ

  1. Роман

    Использовал вариант с OpenSSL Linux.
    На четвёртом шаге создания SSL сертификата сервера, возникает ошибка
    x509: Unknown parameter —req
    x509: Use -help for summary

    Как исправить?

    Ответить
    1. Delvish

      не копипастить – писать руками. или предварительно заменить длинные тире на дефисы

      Ответить
  2. Роман

    Проблема банальна, в копипасте команд из примера
    заменил все дефисы ” — ” на ” – ” и команда выполнилась без ошибок.

    Ответить
    1. cryptoparty автор

      Спасибо за дополнение, Роман!

      Ответить
  3. Антон

    Спасибо за лаконичное описание процесса!

    Ответить
    1. cryptoparty автор

      Всегда рады помочь!

      Ответить