Linux(openssl):用CA证书签名具有SAN的CSR

北极星光 2024-08-15 ⋅ 12 阅读

现今互联网的快速发展和广泛应用,使得网络安全问题备受关注。为了确保通信的安全性,使用SSL/TLS证书成为了一种必要的手段。而为了支持多个域名的安全通信,使用带有Subject Alternative Name(SAN,主体备用名称)的CSR能够满足不同域名的需求。在Linux系统上,可以利用openssl工具来生成和签名CSR(证书签名请求)。

生成CSR

首先,在Linux终端中输入以下命令来生成私钥和CSR:

openssl req -newkey rsa:2048 -nodes -keyout private.key -out csr.csr

上述命令中,-newkey选项用于生成一个新的私钥,rsa:2048指定生成的私钥类型为RSA,长度为2048位。-nodes选项表示不对私钥进行加密,以便在使用时不需要输入密码。-keyout选项后指定私钥文件路径和名称,-out选项后指定CSR文件路径和名称。

接着,在生成CSR的过程中,会要求输入一些信息,包括Common Name(通用名称)和SAN(主体备用名称)。其中Common Name是该证书所关联的主域名,而SAN则是该证书所关联的额外域名列表。多个域名之间使用逗号分隔。填写完必要信息后,会在指定路径下生成私钥文件和CSR文件。

生成CA证书

要使用CA证书签名CSR,首先需要生成自己的CA证书。执行以下命令生成CA证书:

openssl req -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 365 -out ca.crt

上述命令中,-newkey选项同样用于生成一个新的私钥,rsa:2048指定生成的私钥类型为RSA,长度为2048位。-nodes选项表示不对私钥进行加密。-keyout选项后指定私钥文件路径和名称。

-x509参数用于生成自签名的X.509证书。-days选项用于指定证书有效期,这里设置为365天。-out选项后指定CA证书文件路径和名称。

使用CA证书签名CSR

生成CA证书后,可以使用以下命令来使用CA证书签名CSR:

openssl x509 -req -CA ca.crt -CAkey ca.key -in csr.csr -out signed.crt -days 365 -CAcreateserial -extfile <(printf "subjectAltName=DNS:example1.com,DNS:example2.com,DNS:example3.com")

上述命令中,-req选项表示将CSR文件用作请求。-CA-CAkey选项分别用于指定CA证书文件和对应的私钥文件。

-out选项后指定签名后的证书文件路径和名称。-days选项同样用于指定证书有效期。-CAcreateserial选项在生成带有SAN的证书时需要用到,它会在当前目录下生成一个序列号文件,用于唯一标识每个创建的证书。

-extfile选项用于指定扩展配置文件的路径和名称。在该文件中,通过subjectAltName参数来指定需要包含的SAN列表。

将私钥和签名后的证书合并

在使用签名后的证书时,还需要将私钥和签名后的证书进行合并:

cat private.key signed.crt > combined.crt

上述命令中,通过cat命令将私钥和签名后的证书合并,输出到一个新的合并文件中。

配置服务器使用证书

最后,将生成的合并证书文件combined.crt和私钥文件private.key配置到服务器中:

例如,在Nginx服务器上,可以进行如下配置:

server {
    listen 443 ssl;
    server_name example1.com;

    ssl_certificate /path/to/combined.crt;
    ssl_certificate_key /path/to/private.key;

    ...

}

总结

通过上述步骤,我们可以在Linux系统上使用openssl工具生成带有SAN的CSR,并使用CA证书对其进行签名。使用带有SAN的证书能够满足多个域名的安全通信需求,增强网络安全性。当然,在配置服务器时,请根据实际情况进行相应的调整。

如果遇到任何问题,可以参考openssl的官方文档或寻求专业人士的帮助,以确保证书的正确配置和使用。

希望本文能够对你在Linux系统上生成和签名CSR提供帮助,并能够提高网络通信的安全性!

参考链接:


全部评论: 0

    我有话说: