Самоподписанный сертификат
Инструкция по созданию сертификата SSL(TLS) консольной утилитой openssl.
Создание центра сертификации (CA – Certificate Authority)
Создание ключа:
openssl genrsa -aes256 -out CA.key 4096
- -out CA.key - корневой ключ.
- -aes256 - установка пароля на ключ. Рекомендуется устанавливать
Создание сертификата:
openssl req -x509 -new -nodes -key CA.key -sha256 -days 18250 -out CA.pem
Вводим пароль от корневого ключа.
Нужно заполнить поле Common Name (eg, fully qualified host name)
, остальное - опционально.
- CA.pem - корневой сертификат
- -x509 - output a x509 structure instead of a cert. req
- -new - new request.
- -nodes - don’t encrypt the output key
- -key file - use the private key contained in file
- -days - number of days a certificate generated by -x509 is valid for. (18250 дней == 50 лет)
Установка сертификата в систему
macos добавление сертификата в keychain:
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" CA.pem
macos удаление сертификата из keychain:
sudo security remove-trusted-cert -d CA.pem
ubuntu:
sudo apt-get update
sudo apt-get install -y ca-certificates
openssl x509 -outform der -in CA.pem -out CA.crt
sudo cp CA.crt /usr/local/share/ca-certificates
sudo update-ca-certificates
Создание серверного ключа
export DOMAIN=domain.example.com
openssl genrsa -out "$DOMAIN.key" 2048
- -aes256 - установка пароля на ключ. В примере этот параметр упущен. Если поставить пароль, его придётся вводить при старте приложения (или прописывать в конфигах путь к файлу с паролем).
Создание серверного сертификата
Установим переменную DOMAIN. Должен соответствовать вашему домену
export DOMAIN=domain.example.com
- Переменная DOMAIN используется в дальнейших командах.
openssl req -new -key "$DOMAIN.key" -out "$DOMAIN.csr" -subj "/CN=$DOMAIN"
- -subj - Избавляет от интерактивного ввода информации о домене. Можно упустить этот аргумент
cat > "$DOMAIN.ext" << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${DOMAIN}
EOF
openssl x509 -req -in "$DOMAIN.csr" -CA CA.pem -CAkey CA.key -CAcreateserial -out "$DOMAIN.crt" -days 397 -sha256 -extfile "$DOMAIN.ext"
- -req - input is a certificate request, sign and output.
- -in arg - input file - default stdin
- -CA arg - set the CA certificate, must be PEM format.
- -extfile - configuration file with X509V3 extensions to add
- -CAkey arg - set the CA key, must be PEM format
- -CAcreateserial - create serial number file if it does not exist
- -out arg - output file - default stdout
- -days arg - How long till expiry of a signed certificate - def 30 days
- -extfile - configuration file with X509V3 extensions to add