如何使用OpenSSL创建自签名证书并设置自定义CA和适当的SAN设置?

5

我偶尔会遇到这个主题,试图记住如何完成操作,然后再次找到所有不完整的答案(使用配置文件,在一行命令中忽略我们真正想要使用自定义CA创建完整证书链等),许多答案适用于为证书请求应用SAN,但在签署命令中搞砸了SAN...

我想做什么?

  1. 创建自定义CA
  2. 创建证书请求。
  3. 签署证书请求。
  4. 创建链文件
  5. Firefox/Chrome 中的其他步骤(是的,Chrome 需要SAN)

(是的,请不要在一个命令中完成所有操作,我想让我的CA驻留在另一台机器上) (是的,对于其他人来说可能还不够完整。但这正是我每年需要1-2次的情况,当我在 DEV 环境中只信任通过配置简单自签名证书不够时) (是的,如果您不是请求和签署证书的人,则可能希望实施其他验证步骤)

1个回答

17

假设我们要在我们的局域网内的新服务器/主机上设置自签名证书,在这种情况下,Let's Encrypt不是我们的选择,例如FRITZ!Box,域名:fritz.box,https://fritz.box,IPv4:192.168.1.1

1.1 生成CA的私钥

openssl genrsa -aes256 -out patrickca.key 4096

关于-aes128或-aes256:https://security.stackexchange.com/q/14068

1.2 生成CA证书(根证书)

openssl req -new -key patrickca.key -x509 -out patrickca.crt -days 3650

2. 创建您的域名/服务器证书请求

openssl req -new -nodes -newkey rsa:4096 -keyout fritzbox.key -out fritzbox.req -batch -subj "/C=DE/ST=Hamburg/L=Hamburg/O=Patrick CA/OU=router/CN=fritz.box" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:fritz.box,IP:192.168.1.1"))

3. 签署证书请求

openssl x509 -req -in fritzbox.req -CA patrickca.crt -CAkey patrickca.key -CAcreateserial -out fritzbox.crt -days 3650 -sha256 -extfile <(printf "subjectAltName=DNS:fritz.box,IP:192.168.1.1")

4. 构建证书链文件(您可能需要在组织过程中添加一个额外的中间证书)

cat fritzbox.key > fritzboxchain.pem 
cat fritzbox.crt >> fritzboxchain.pem
cat patrickca.crt >> fritzboxchain.pem 

如果这只是一个示例,您将把此文件导入到您的FRITZ!Box中。

5. Firefox和Chrome中的其他步骤(我目前不使用其他浏览器,我的组织中也没有其他人使用)

当您的浏览器显示有关https证书的警告消息时,您当然希望确认自己知道自己在做什么。

您可能希望将其设置为永久异常情况。

但请注意:请将第1.2步骤的CA证书导入为受信任的CA(在05/2020年,对于Firefox,设置CN=应该足够了;对于Chrome,如果它仍然无法接受您的自签名证书,则可能会出现SAN问题)。


在此处描述了Win / OSX的过程:https://alfilatov.com/posts/how-to-create-self-signed-certificate/ - Alex Filatov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接