В этом руководстве объясняется процесс создания ключей и сертификатов CA и их использования для создания сертификатов и ключей SSL / TLS с использованием таких утилит SSL, как openssl и cfssl.
Терминологии, используемые в этой статье:
- PKI – Public key infrastructure
- CA – Certificate Authority
- CSR – Certificate signing request
- SSL – Secure Socket Layer
- TLS – Transport Layer Security
- Рабочий процесс создания сертификата
- CA ключ и создание сертификата
- Процесс создания сертификата сервера
- Генерация сертификатов с использованием CFSSL и CFSSLJSON
- Установите CFSSL и CFSSLJSON на Linux
- Создайте сертификат CA и его ключ
- Генерация сертификатов SSL / TLS
- Генерация сертификатов с использованием OpenSSL
- Создайте сертификат CA и его ключ
- Генерация сертификатов SSL / TLS
Рабочий процесс создания сертификата
Ниже приведены шаги, необходимые для создания сертификатов CA, SSL / TLS.
CA ключ и создание сертификата
- Создайте файл закрытого ключа CA с помощью утилиты (OpenSSL, cfssl и т. д.)
- Создайте корневой сертификат CA, используя закрытый ключ CA.
Процесс создания сертификата сервера
- Сгенерируйте закрытый ключ сервера с помощью утилиты (OpenSSL, cfssl и т. д.)
- Создайте CSR, используя закрытый ключ сервера.
- Создайте сертификат сервера, используя ключ CA, сертификат CA и CSR сервера.
В этом руководстве мы объясним шаги, необходимые для создания сертификатов CA, SSL / TLS с использованием следующих утилит:
- openssl
- 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
|
1
2
3
|
chmod +x /usr/local/bin/cfssl \
/usr/local/bin/cfssljson \
/usr/local/bin/cfssl–certinfo
|
|
|
cfssl
|
Создайте сертификат CA и его ключ
mkdir cfssl cd cfssl
cat > ca-csr.json <<EOF
{
"CN": "Demo CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "California",
"ST": "Milpitas"
}
]
}
EOF
cfssl print-defaults config cfssl print-defaults csr
cfssl gencert -initca ca-csr.json | cfssljson -bare ca –
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 > server–csr.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 через общедоступные сети и частная сеть внутри организации.
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
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
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
|
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
|








Использовал вариант с OpenSSL Linux.
На четвёртом шаге создания SSL сертификата сервера, возникает ошибка
x509: Unknown parameter —req
x509: Use -help for summary
Как исправить?
не копипастить – писать руками. или предварительно заменить длинные тире на дефисы
Проблема банальна, в копипасте команд из примера
заменил все дефисы ” — ” на ” – ” и команда выполнилась без ошибок.
Спасибо за дополнение, Роман!
Спасибо за лаконичное описание процесса!
Всегда рады помочь!