У меня есть сценарий bash, который генерирует self-signed
сертификат и отлично работает:
#! /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
. Вы положили -days
вариант с x509
команда, это будет работать.
Вы получаете 30/08, потому что нет -days
опция, которая отменяет срок действия сертификата по умолчанию 30 дней, как указано в x509
страница руководства:
-days arg
указывает количество дней, в течение которых сертификат должен действовать. По умолчанию 30 дней.
Примечание: создание сертификата со сроком действия 358000 дней (980 лет!) - это слишком долго, если вам нужна разумная безопасность.
Срок действия сертификата устанавливается при создании этого сертификата.
openssl req
сам по себе порождает запрос на подпись сертификата (CSR). -days
указанные здесь будут проигнорированы.
openssl x509
выдает сертификат CSR. Это где -days
следует указать.
Но:
openssl req -x509
сочетает req
и x509
в один; он генерирует CSR и подписывает его, выдавая сертификат за один раз. Поэтому req
поддерживает -days
флаг, поскольку он передает его внутри x509
команда.