在IIS Express中创建自签名证书

时间:2011-12-13 19:17:45

标签: ssl certificate ssl-certificate iis-express self-signed

根据我的理解,实际上可以创建颁发给IP地址的证书。是否可以在IIS Express中执行此操作?

请注意,这仅供测试。

修改

人们似乎错过了我的问题的真正的肉和土豆,所以我删除了额外的细节。

5 个答案:

答案 0 :(得分:6)

感谢@Bruno提出的所有建议!!使用单独的工具创建SSL证书让我朝着正确的方向前进。

首先,我尝试了IIS 6 selfssl命令行工具,该工具可能在第一步工作时也能正常工作(但在找到我当前的解决方案后我还没有测试过)。第一步是创建证书,第二步是将证书绑定到我的IP /端口。

  1. 我使用Visual Studio命令提示符中的makecert来创建我的证书(这是我认为IIS 6资源工具包中的IIS 6 selfssl工具也可以工作的地方) 。创建证书后,我使用mmc管理单元控制台在“个人/证书”下找到了该证书,并添加了“证书”管理单元。

    makecert -r -pe -n "CN=0.0.0.0" -b 01/01/2011 -e 01/01/2025 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

  2. 要将证书绑定到我使用netsh的IP /端口。 ipport应更改为您的IP /端口。 appid是一个GUID,我不认为这对你设定的内容很重要。 certhash您可以从证书本身的Thumbnail字段获取,但您必须删除哈希中的空格。

    netsh http add sslcert ipport=0.0.0.0:44300 appid={AnyGuid} certhash=YourCertificateThumbprint

答案 1 :(得分:5)

正如我在this answer中所说:

要使SSL / TLS安全,您至少需要3分:

  • 一个合适的密码套件,以及成功的握手。
  • 验证客户端是否信任服务器证书(通常是通过PKI模型中的已知CA)。
  • 验证证书是否属于客户端要联系的服务器(主机名验证)。

第二和第三点由您的证书强制执行。您在第三点遇到问题:主机名验证。

使用自签名证书可替代使用CA颁发的证书(PKI的一部分)。这告诉您是否可以信任证书内容是真实的(由发行者声明)。通过颁发和使用自签名证书,您可以自行声明其内容。您的客户必须明确信任您所说的内容。这适用于小型部署,您可以说服客户将自签名证书安装为可信证书。

主机名验证是此后必需的步骤。如果您使用他们的护照检查某人的身份,那么检查这是否是您认可的国家的真正护照是不够的:您还需要检查该照片是否与您面前的人匹配。 这同样适用于此:您要连接的内容是我的主机名(或IP地址),它必须与您提供的证书中的主机名(或IP地址)相匹配。

当然,localhost只能从本地机器本身访问,有点像说“我”。 作为服务器,您需要证书中的名称是您的客户打电话给您的名称。 使用主机名而不是IP地址通常更好。请注意,根据RFC 2818,如果您使用IP地址,它还需要在主题备用名称扩展名中(尽管某些浏览器会根据该要求灵活处理)。

(您可能也对this answer感兴趣。虽然它是关于Java服务器的,但原则是相同的,因为证书验证取决于客户端,可以使用任何语言。)

编辑:(您已删除了初始问题的大部分内容,因此我上面的回答可能不完全有意义......)

简而言之,是的,您可以生成一个通过IP地址识别机器的证书。

理论上(RFC 2818),IP地址必须在证书的主题备用名称(SAN)扩展中(它将是“IP”类型的SAN,而不是“DNS”)。但是,在实践中,规范的这个特定部分只是松散地遵循,因此您可能希望在主题DN的公用名(CN)中获得IP地址。如果浏览器未能充分实施RFC 2818,您甚至可以在主题DN中仅使用CN=your.ip.address,而无需SAN条目。 (Java clients seem to be strict on this,但这可能不是您的测试用例所必需的。)

我不确定你生成的证书是什么。 makecert.exe seems not to be able to generate certificates with SANs, unfortunately.

在这种情况下,您可以使用OpenSSL生成自签名证书(例如,参见this answer底部的注释)。如果需要,请从您的私钥和生成的证书(.pfx)创建PKCS#12(扩展名为.p12openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out store.pfx的文件。 在此之后,请查看将.pfx文件中的证书配置到IIS Express中。您必须将证书和私钥导入证书存储区(最有可能的是,双击应触发正确的对话框)。然后,使用它(好像它来自CA);根据您配置IIS的方式,它可能需要涉及netsh。这里似乎有一个教程:http://blogs.blackmarble.co.uk/blogs/rfennell/post/2011/03/22/how-to-expose-iis-express-to-external-network-connections-and-use-a-non-self-signed-certificate.aspxnetsh命令也列在@MrZombie提到的this question中:您必须通过查看已安装的证书找到自签名证书哈希值,并根据您的设置调整端口号。)

答案 2 :(得分:0)

据我所知,除非您的证书是由具有实际可信度的证书颁发机构颁发的,否则您将继续收到错误。

(“可靠的证书颁发机构”是指“你购买证书的地方”)

http://www.gerv.net/security/self-signed-certs/< - 有趣的阅读此事。

答案 3 :(得分:0)

独立于IIS和平台,您只需要一个Web浏览器:

http://www.selfsignedcertificate.com/

答案 4 :(得分:-1)

是,从IIS,从左侧选择服务器名称节点,转到服务器证书。从右侧“操作”窗格中,选择“创建自签名证书”...为证书命名,就是这样!非常简单...