Openssl

為什麼 openssl 忽略 -days 自簽名證書的到期日期?

  • May 14, 2020

我有一個 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,它顯示的過期時間為 8 月 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命令。

引用自:https://serverfault.com/questions/920461