Openssl
為什麼 openssl 忽略 -days 自簽名證書的到期日期?
我有一個 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
命令。