我为 Postgres 实例生成了这个文件
-rw-r--r-- 1 root root 2733 Jun 8 20:37 server-cert.pem
-rw-r--r-- 1 root root 3322 Jun 8 20:37 server.csr
-rw------- 1 root root 1704 Jun 8 20:37 server-key.pem
证书已过期,我需要更新主题,可能使用相同的私钥和 CSR
我无法让它工作,有人帮忙吗?谢谢
更新 似乎有一些错误,我也需要更新 ca 证书
-rw-r--r-- 1 root root 2895 Jun 8 20:37 ca-cert.pem
-rw-r--r-- 1 root root 41 Jun 8 20:37 ca-cert.srl
-rw-r--r-- 1 root root 3350 Jun 8 20:37 ca.csr
-rw------- 1 root root 1704 Jun 8 20:37 ca-key.pem
-rw-r--r-- 1 root root 2733 Jun 8 20:37 client-cert.pem
-rw-r--r-- 1 root root 3322 Jun 8 20:37 client.csr
-rw------- 1 root root 1704 Jun 8 20:37 client-key.pem
-rw-r--r-- 1 root root 2733 Jun 8 20:37 server-cert.pem
-rw-r--r-- 1 root root 3322 Jun 8 20:37 server.csr
-rw------- 1 root root 1704 Jun 8 20:37 server-key.pem
root@SQLECOFIL1:~/cert_bkp# openssl x509 -CA server-cert.pem -CAkey server-key.pem -set_serial 256 -days 365 -in server-cert.pem -out new-server-cert.pem
Getting CA Private Key
/CN=pg-server
error with certificate - error 20 at depth 0
unable to get local issuer certificate
/CN=pg-server
error with certificate - error 21 at depth 0
unable to verify the first certificate
*更新2*
-rw-r--r-- 1 postgres postgres 993 Jun 10 20:52 new-server-cert.pem
-rw-r--r-- 1 postgres postgres 2733 Jun 8 18:36 server-cert.pem
-rw------- 1 postgres postgres 1704 Jun 8 18:36 server-key.pem
root@SQLECOFIL1:/etc/ssl/postgresql# openssl x509 -signkey server-key.pem -set_serial 256 -days 365 -in server-cert.pem -out new-server-cert.pem
Getting Private key
文件 new-server-cert.pem 已验证但无法连接到 Postgres 服务器(验证失败)
答案1
如果您当前(或在您的情况下已过期)证书具有密钥使用限制,则您无法将其用作 CA 来签署新证书。相反,您可以使用私钥和原始证书来创建新的自签名证书:
openssl x509 -signkey server-key.pem -set_serial 256 -days 365 -in server-cert.pem -out new-server-cert.pem
如果您有certSign
密钥用法(或没有密钥用法),您还可以使用以下方法使用证书和密钥进行签名:
openssl x509 -CA server-cert.pem -CAkey server-key.pem -set_serial 256 -days 365 -in server-cert.pem -out new-server-cert.pem
在这两个例子中:
设置-days 365
新证书的有效期(本例中为 365 天)。
设置-set_serial 256
新的序列号(在本例中为 256)
自行设置序列号的另一种方法是使用OpenSSL 为您创建随机序列号-CAcreateserial
,而不是-set_serial <n>
让 OpenSSL 为您创建随机序列号。
您可以根据需要调整这些,但必须使用它们,否则您最终会得到一个没有序列号和/或有效期为 0 秒的证书。