У меня есть сценарий bash, который генерирует самоподписанный сертификат и отлично работает:
#! /bin/bash
# Generate self signed root CA cert
openssl req -nodes -x509 -days 358000 -newkey rsa:2048 -keyout ca.key -out ca.crt -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=root/CN=es.example.com/emailAddress=info@example.com"
# Generate server cert to be signed
openssl req -nodes -newkey rsa:2048 -days 358000 -keyout server.key -out server.csr -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=server/CN=es.example.com/emailAddress=info@example.com"
# Sign the server cert
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
# Create server PEM file
cat server.key server.crt > server.pem
# Generate client cert to be signed
openssl req -nodes -newkey rsa:2048 -days 358000 -keyout client.key -out client.csr -subj "/C=IR/ST=TEH/L=Torento/O=CTO/OU=client/CN=es.example.com/emailAddress=info@example.com"
# Sign the client cert
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAserial ca.srl -out client.crt
# Create client PEM file
cat client.key client.crt > client.pem
Когда я проверяю время истечения срока действия сгенерированного client.pem
, он показывает время истечения 10 августа:
$ openssl x509 -enddate -noout -in client.pem
notAfter=Aug 10 12:32:07 2018 GMT
В чем проблема с датой истечения срока действия?
Срок действия устанавливается с помощью openssl x509
, а не с помощью openssl req
.
Если вы укажете параметр -дней
с командой x509
, он будет работать.
Вы получите 30/08, потому что нет -дней
параметр, который отменяет срок действия сертификата по умолчанию в 30 дней, как указано в x509
странице руководства:
-days arg
указывает количество дней, в течение которых сертификат должен действовать. По умолчанию - 30 дней.
Примечание: создание сертификата со сроком действия 358000 дней (980 лет!) Слишком долго, если вам нужна разумная безопасность.
Срок действия сертификата устанавливается при создании этого сертификата.
openssl req
сам по себе генерирует запрос на подпись сертификата (CSR). Указанные здесь -дней
будут проигнорированы.
openssl x509
выдает сертификат из CSR. Здесь следует указать -дней
.
Но:
openssl req -x509
объединяет req
и x509
в один; он генерирует CSR и подписывает его, выдавая сертификат за один раз. Вот почему req
поддерживает флаг -days
, поскольку он передает его внутри команды x509
.