生成一个自签名证书的步骤,在被信任之后,将在没有安全警告的情况下适用于两个不同的IP

我们有一个testing服务器,我试图转换到HTTPS / SSL,它有一个内部IP和一个外部IP。 我们必须为这个特定的服务器使用自签名证书。 过去有一段时间,我在RTMPS上进行了一些关于Flash的研发,所以我仍然有一个步骤清单,为内部IP创build一个自签名证书,并将其放置在客户端的可信存储区机器。

话虽如此,我需要同时为内部和外部的IP进行工作。 当我尝试使用相同的步骤来生成和信任外部IP的证书时,即使客户端使用外部IP,服务器也会不断尝试与内部IP的证书相混淆。 这显然是通过HTTP标头和获取默认网站的证书有关。 因此,即使外部IP的证书是可信的,客户端机器在浏览到外部IP上的站点时也会不断产生安全警告。

完全抛弃我以前的笔记,关于如何将内部IP置于旁边,这怎么能够同时处理内部和外部IP? 你怎样才能使用自签名证书的两个IP,既不在客户端的浏览器中产生安全警告?

请注意,这不是重复的。 我知道有关于主题替代名称,通配符证书等的信息。但是:

  1. 其中大部分是针对Apache的; 我正在使用IIS 7。

  2. 大部分是用于Linux的; 我正在使用Windows。

  3. 它也倾向于处理域名,这似乎是通配符证书所必需的; 我只使用IP。

  4. 在这一点上剩下的一些东西希望我在IIS或Windows中有一些不是普遍可用的选项。

  5. 可能剩下的东西有点超过我的头,他们使用的步骤期望一些预先存在的知识,只是不存在。 换句话说,他们跳过步骤,跳转到高级主题等。

假设服务器是IIS 7 / Windows Server 2008 R2,并且客户端计算机使用的是Windows 7(有时是Windows Embedded Standard)和不同版本的IE,那么完成此步骤的明确步骤是什么? 客户端通过IP地址访问页面,Web服务等,我一直在使用OpenSSL(虽然我打开其他选项)。 谢谢。

看到马西莫的答案是正确的做法。

否则,您可以通过使用以下命令创buildconfiguration文件(以及所需的其他选项),将IP添加到证书的SAN中:

[ v3_ca ] subjectAltName = IP:1.2.3.4 

或者,如果你有一堆的IP地址….

 [ v3_ca ] subjectAltName = @alt_names [alt_names] IP.1 = 1.2.3.4 IP.2 = 2.3.4.5 IP.3 = 3.4.5.6 

然后发出正常的OpenSSL命令来创build具有以下添加的证书:

 -extfile configuration_file_mentioned_above.cnf -extensions v3_ca 

注意:如果遇到问题,上面一行通常以openssl x509 -req


最简单的有效configuration文件就是这样的(我把它保存为example.cfg ):

 [req] distinguished_name = req_distinguished_name x509_extensions = v3_ca [ req_distinguished_name ] commonName = TypeCommonNameHere [v3_ca] subjectAltName = @alt_names [alt_names] IP.1 = 203.0.113.1 IP.2 = 192.0.2.1 IP.3 = 198.51.100.1 

然后运行:

 openssl req -x509 -nodes -days 3653 -newkey rsa:2048 -keyout example.key -out example.pem -config example.cfg 

它将要求证书的通用名称,并分别用私钥和公钥(分别)写出example.key和example.pem。 另外,你必须把IP放在configuration文件中,但是不能把通用的名字放在那里(你可以,但是你仍然需要在OpenSSL提示时input)。

另外,这个例子使用了一个完整的configuration文件,上面的原始答案假设你已经有了一个configuration文件,并且使用来自扩展configuration文件的SAN信息来扩充它(这可能更令人困惑,但是我没有使用原来答案中给出的参数)

你真的不应该在SSL证书中使用IP地址; 你应该设置一个合适的DNS基础设施,以便你有internal.yourdomain.com指向内部IP地址, external.yourdomain.com指向external.yourdomain.com IP地址; 那么你将不得不把两个名称作为主题替代名称在证书中,并将完美地工作。

也就是说,你可以使用IP地址作为SAN; 但是如何做到这一点取决于您用来请求证书的工具以及将要颁发证书的证书颁发机构。

在这两种情况下,您都应该使用带有两个SAN的单个证书; 使用两个证书没有意义,甚至不能工作,因为您不能将两个不同的证书绑定到同一个网站。

如果您有两个IP地址或基于名称的地址,则需要两个证书和两个https定义。 在Apache httpd上,这将是两个虚拟主机部分。