В этом руководстве объясняется процесс создания ключей и сертификатов 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
Как исправить?
не копипастить – писать руками. или предварительно заменить длинные тире на дефисы
Проблема банальна, в копипасте команд из примера
заменил все дефисы ” — ” на ” – ” и команда выполнилась без ошибок.
Спасибо за дополнение, Роман!
Спасибо за лаконичное описание процесса!
Всегда рады помочь!