使用openssl签发证书

openssl签发RSA证书

使用 OpenSSL 自签发根证书并签发 RSA 证书的过程可以分为以下几个步骤:

1. 生成自签名的根证书

首先,生成一个自签名的根证书。根证书是信任链的起点,用于签发其他证书。

1
2
3
4
5
6
7
8
# 生成根证书的私钥
openssl genpkey -algorithm RSA -out rootCA.key -aes256

# 生成根证书的 CSR(证书签名请求)
openssl req -new -key rootCA.key -out rootCA.csr

# 自签名生成根证书
openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.crt

2. 生成服务器证书的私钥和 CSR

接下来,生成服务器证书的私钥和 CSR。

1
2
3
4
5
# 生成服务器证书的私钥
openssl genpkey -algorithm RSA -out server.key

# 生成服务器证书的 CSR
openssl req -new -key server.key -out server.csr

3. 使用根证书签发服务器证书

使用根证书签发服务器证书。

1
2
# 使用根证书签发服务器证书
openssl x509 -req -days 365 -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt

4. 验证证书

可以使用以下命令验证生成的证书:

1
2
3
4
5
# 验证根证书
openssl x509 -in rootCA.crt -text -noout

# 验证服务器证书
openssl x509 -in server.crt -text -noout

5. 使用证书

现在,你可以将 server.crtserver.key 用于你的服务器配置中。例如,在 Nginx 或 Apache 中配置 HTTPS。

6. 可选:生成 PEM 格式的证书

有些应用程序可能需要 PEM 格式的证书和私钥。你可以将 CRT 和 KEY 文件转换为 PEM 格式:

1
2
3
4
5
# 将 CRT 转换为 PEM
openssl x509 -in server.crt -out server.pem -outform PEM

# 将 KEY 转换为 PEM
openssl rsa -in server.key -out server.key.pem -outform PEM

7. 可选:生成 PFX 格式的证书

如果你需要将证书和私钥打包成 PFX 格式(通常用于 Windows 服务器),可以使用以下命令:

1
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile rootCA.crt

总结

通过以上步骤,你可以使用 OpenSSL 自签发根证书并签发 RSA 证书。生成的证书可以用于各种需要 SSL/TLS 加密的场景。

openssl签发SM2证书

使用 OpenSSL 自签发根证书并签发 SM2 证书的具体步骤


1. 生成 SM2 私钥

可以使用:

1
openssl genpkey -algorithm EC -out rootCA.key -pkeyopt ec_paramgen_curve:sm2

也可以使用 openssl ecparam 生成 SM2 私钥:

1
openssl ecparam -genkey -name SM2 -out sm2_key.pem
  • -name SM2:指定使用 SM2 椭圆曲线。
  • -out sm2_key.pem:生成的私钥保存到 sm2_key.pem 文件中。

生成的 sm2_key.pem 是 PEM 格式的 SM2 私钥。


2. 生成自签名的根证书(SM2)

使用生成的 SM2 私钥创建自签名的根证书。

1
2
3
4
5
# 生成根证书的 CSR(证书签名请求)
openssl req -new -key sm2_key.pem -out rootCA.csr

# 自签名生成根证书
openssl x509 -req -days 3650 -in rootCA.csr -signkey sm2_key.pem -out rootCA.crt -sigopt sm2_id=1234567812345678
  • -sigopt sm2_id=1234567812345678:指定 SM2 签名时的 ID(可选,默认值为 1234567812345678)。

3. 生成服务器证书的私钥和 CSR(SM2)

同样使用 openssl ecparam 生成服务器证书的 SM2 私钥:

1
2
3
4
5
# 生成服务器证书的 SM2 私钥
openssl ecparam -genkey -name SM2 -out server.key

# 生成服务器证书的 CSR
openssl req -new -key server.key -out server.csr

4. 使用根证书签发服务器证书

使用根证书签发服务器证书:

1
2
# 使用根证书签发服务器证书
openssl x509 -req -days 365 -in server.csr -CA rootCA.crt -CAkey sm2_key.pem -CAcreateserial -out server.crt -sigopt sm2_id=1234567812345678

5. 验证证书

验证生成的证书,确保算法和参数正确:

1
2
3
4
5
# 验证根证书
openssl x509 -in rootCA.crt -text -noout

# 验证服务器证书
openssl x509 -in server.crt -text -noout

在输出中,检查以下内容:

  • 公钥算法应为 id-ecPublicKey(即 ECC)。
  • 曲线名称应为 SM2
  • 签名算法应为 sm2sig-with-sm3

6. 使用证书

将生成的 server.crtserver.key 用于支持 SM2 算法的服务器或应用程序中。


7. 可选:生成 PEM 格式的证书

如果需要 PEM 格式的证书和私钥,可以使用以下命令:

1
2
3
4
5
# 将 CRT 转换为 PEM
openssl x509 -in server.crt -out server.pem -outform PEM

# 将 KEY 转换为 PEM
openssl ec -in server.key -out server.key.pem -outform PEM

8. 可选:生成 PFX 格式的证书

如果需要将证书和私钥打包成 PFX 格式,可以使用以下命令:

1
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile rootCA.crt

为什么使用 openssl ecparam -genkey

openssl ecparam -genkey 是生成椭圆曲线密钥对的传统方式,适用于 OpenSSL 1.1.1 及以上版本。它的优点是:

  1. 明确指定曲线:通过 -name SM2 明确指定使用 SM2 曲线。
  2. 兼容性:生成的密钥可以直接用于签发证书。

不过,从 OpenSSL 3.0 开始,推荐使用 openssl genpkey 生成密钥,因为它更通用且支持更多算法。


总结

你提到的 openssl ecparam -genkey -name SM2 -out sm2_key.pem 是完全正确的,可以用于生成 SM2 私钥。结合上述步骤,你可以使用 OpenSSL 自签发根证书并签发 SM2 证书,确保根证书和服务器证书都使用 SM2 算法。