从现有私钥和 CSR 续订自签名证书

从现有私钥和 CSR 续订自签名证书

我为 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 秒的证书。

相关内容