SSL
February 14, 2023

Генерация самоподписанного сертификата

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx-selfsigned.key -out nginx-selfsigned.crt

При использовании OpenSSL нужно также создать ключи Диффи-Хеллмана, которые нужны для поддержки PFS:

openssl dhparam -out dhparams.pem 4096

Источник: https://www.8host.com/blog/sozdanie-samopodpisannogo-ssl-sertifikata-dlya-nginx-v-ubuntu-16-04/

UPD: лучше использовать вариант ниже, с автогенерацией и использованием собственного центра сертификации:

#!/bin/bash

if [ -z "$1" ]
then
  echo "Please enter domain name and ip address to create a certificate for";
  echo "e.g. domain.local 192.168.1.1"
  exit;
fi

if [ -z "$2" ]
then
  echo "Please enter domain name and ip address to create a certificate for";
  echo "e.g. domain.local 192.168.1.1"
  exit;
fi

COMMON_NAME=$1
COMMON_IP=$2

# # генерируем закрытый ключ центра сертификации
openssl genrsa -out rootCA.key 2048
# # генерируем сертификат центра сертификации
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -subj "/C=CA/ST=None/L=NB/O=None/CN=domain.local" -out rootCA.pem
# C=CA    # Country Name
# ST=None # State or Province Name (full name)
# L=NB    # Locality Name (eg, city)
# O=None  # Organization Name (eg, company)
# CN=domain.local #Common Name (e.g. server FQDN or YOUR name)


if [ -f $COMMON_NAME.key ]; then
  KEY_OPT="-key"
else
  KEY_OPT="-keyout"
fi

>$COMMON_NAME.ext cat <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = $COMMON_NAME 
DNS.2 = www.$COMMON_NAME 
IP.1 = $COMMON_IP
EOF

SUBJECT="/C=RU/ST=None/L=Moscow/O=Kaspersky/CN=$COMMON_NAME"
NUM_OF_DAYS=999

# Сформируем csr файл
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT $COMMON_NAME.key -subj "$SUBJECT" -out $COMMON_NAME.csr

# Выпускаем сертификат:
openssl x509 -req -in $COMMON_NAME.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out $COMMON_NAME.crt -days $NUM_OF_DAYS -sha256 -extfile $COMMON_NAME.ext
rm $COMMON_NAME.ext

# Сконвертировать pem в pfx для Windows:
openssl pkcs12 -export -out rootCA.pfx -inkey rootCA.key -in rootCA.pem -password pass: