如何将 OpenSSL 用于具有自定义 CA 和适当 SAN 设置的自签名证书?
How to use OpenSSL for self-signed certificates with custom CA and proper SAN settings?
我 运行 偶尔翻阅这个主题,试图记住这是如何完成的,然后再次找到所有不完整的答案(使用配置文件,oneliners,忽略我们真的想使用自定义 CA创建完整的证书链等)。许多答案将 SAN 应用于证书请求,但在签名命令中搞砸了 SAN...
我想做什么?
- 创建自定义 CA
- 创建证书申请。
- 签署证书申请。
- 创建链文件
- Firefox/Chrome 中的其他步骤(是的,Chrome 需要 SAN)
(是的,请不要在一个命令中执行所有操作,我希望我的 CA 驻留在另一台机器上)
(是的,这对其他人来说可能又是不完整的。但这正是我每年需要 1-2 次的,当我的 DEV 环境中的一个简单的自签名证书,我只是通过配置信任,是不够的)
(是的,如果您不是一个人请求和签署证书的人,您可能想要实施额外的验证步骤)
让我们假设,我们想在我们的 LAN 中为我们的新 server/host 设置一个自签名证书,其中 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。创建您的 domain/server 证书请求
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 问题,如果它仍然没有,除了你的自签名证书)
我 运行 偶尔翻阅这个主题,试图记住这是如何完成的,然后再次找到所有不完整的答案(使用配置文件,oneliners,忽略我们真的想使用自定义 CA创建完整的证书链等)。许多答案将 SAN 应用于证书请求,但在签名命令中搞砸了 SAN...
我想做什么?
- 创建自定义 CA
- 创建证书申请。
- 签署证书申请。
- 创建链文件
- Firefox/Chrome 中的其他步骤(是的,Chrome 需要 SAN)
(是的,请不要在一个命令中执行所有操作,我希望我的 CA 驻留在另一台机器上) (是的,这对其他人来说可能又是不完整的。但这正是我每年需要 1-2 次的,当我的 DEV 环境中的一个简单的自签名证书,我只是通过配置信任,是不够的) (是的,如果您不是一个人请求和签署证书的人,您可能想要实施额外的验证步骤)
让我们假设,我们想在我们的 LAN 中为我们的新 server/host 设置一个自签名证书,其中 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。创建您的 domain/server 证书请求
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 问题,如果它仍然没有,除了你的自签名证书)