首页 > 解决方案 > Adding multiple DNS to CSR with Openssl via command prompt

问题描述

I need help understanding how to create a CSR with multiple DNS in it. I am creating csr using windows command prompt

Originally I use

Openssl req -new -newkey rsa:2048 -nodes -keyout -test.key -out test.csr

Which create csr with 1 common name.

I search online and the code I being trying are

openssl genrsa -out test.key
openssl req -new -key test.key -out test.csr -config csr.conf
openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt -extensions req_ext -extfile csr.conf

But, I'm sure it's obvious to y'all, the -config command from second line doesn't work. Saying it can't find the following file config file.

I'm very new to all of this. And I am doing csr because it's part of my internship. Doesn't help that the no one knows how to do it. I've tried searching online for half a day and I still can't find what's wrong.

标签: opensslcommand-promptcsr

解决方案


  1. (元)这不是关于编程问题或问题,很可能作为题外话被关闭;尽管在过去十年的早期,stackoverflow 的范围相当广泛,但近年来,由于其他主题的其他 stackexchange 站点已经创建,并且大量非编程问题使得该站点更难用于其预期目的,并且观众对话题性变得更加严格。

  2. CSR 和 X.509 证书中的 Subject 字段只能有效地包含 CommonName 中的一个 DNS 名称,至少与 TLS 常用的一样,即以前称为 SSL的艺术家协议。从技术上讲,RDN 可以有多个值,但规范规定只使用第一个值,而忽略所有其他值。如果这是 TLS 以外的证书,它可能允许名称属性的其他组合,在这种情况下,您应该参考该协议或应用程序的相关规范。

  3. 对于 TLS 和其他一些用途,您可以改为将多个 DNS 名称放在SubjectAlternativeName 扩展 (SAN)中,如RFC 6125中的 TLS和 HTTPS 特别是RFC 2818中所述。

  4. 可以将 SAN 扩展(或技术要求的扩展)放入 CSR。在使用 OpenSSL 的正确设计的系统上,手册页中对此进行了描述,但 Windows 不提供手册页,因此您需要查看在线版本req(1)其中描述了一般的配置文件以及x509v3_config(5)具体描述 SAN的链接.

  5. 但是由于您使用openssl x509 -req的是从 CSR 创建证书,因此这完全没用,因为x509 -req不使用 CSR 的任何扩展。相反,如果您想要一个包含 DNS 名称的 SAN 证书,您需要创建具有此扩展名的证书,而不是 CSR。最简单的方法是同时使用req这两种方法-new-x509它有效地结合了您的第二步和第三步:

      openssl req -new -key test.key -x509 -days 365 -config $file -out test.crt
    

    在这种情况下,配置文件,如上面链接的手册页中所述,可以指定主题名称x509_extensions可以包括 SAN的扩展名(使用该项目)。您也可以像第一个示例中那样包含第一步 ( genrsa):

     openssl req -new -newkey rsa:2048 -nodes -keyout test.key -x509 -days 365 -config $file -out test.crt
    

推荐阅读