以编程方式将证书导入IIS?

13
我有一个用于SSL的.pem证书,我想将它与我的Web应用程序一起分发在一个MSI(必须在客户端计算机上运行)。然后我需要将其导入(到某个凭据存储中?)并告诉我的站点绑定要使用它。但是我该如何在代码中实现这一点?我发现了Microsoft.Web.Administration,但不确定该从哪里开始...
顺便说一下,这是在IIS7中。
编辑:这里的目标是让客户在其内部网络上运行Web应用程序。它主要作为iPhone应用程序的API。 (也许这不是最好的设计,但我们现在已经被锁定了。)因此,客户安装MSI,然后就有了Web服务。现在iPhone和Web服务之间需要密码身份验证;最简单的方法似乎是通过https来实现。所以我制作了自签名证书。
我知道重新分发单个证书通常是一个坏主意,但我们只是试图打败casual hackers...这将仅限于内部网络和仅限于企业,似乎不太可能有人会做任何疯狂的事情,而且API严格限制了您对数据库可以进行的Bad Things的数量。
所以这就是我们的目标,使用一键式(或类似的)安装,在内部网络Web应用程序上进行密码身份验证。 :-D

有趣的问题,但您真的想要重复使用 SSL 证书吗?即使这是为您自己的 Web 应用程序提供服务的大型集群的推按钮部署,您可能仍然希望更加小心地处理您的证书。 - Rup
请注意,在使用自签名证书时,除非所有客户端手机在联系API之前都预先安装了这个证书到其受信任的根证书存储中,否则仍然存在中间人攻击的可能性。 - yfeldblum
2个回答

26
亲爱的读者们,答案是这样的:
// Assume 'site' is already set to your site via something like 
// Site site = mgr.Sites.Add(siteName, directory, 443);

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

// Here, directory is my install dir, and (directory)\bin\certificate.pfx is where the cert file is.
// 1234 is the password to the certfile (exported from IIS)
X509Certificate2 certificate = new X509Certificate2(directory + @"\bin\certificate.pfx", "1234");

store.Add(certificate);

var binding = site.Bindings.Add("*:443:", certificate.GetCertHash(), store.Name);
binding.Protocol = "https";
store.Close();

感谢这个随机线程:http://forums.iis.net/t/1163325.aspx


5
别忘了调用 mgr.CommitChanges()。 - James McLachlan

1

你需要缩小你的问题范围。证书具体用于什么?

如果您的证书用于客户端身份验证(在服务器上验证客户端),那么将其与应用程序一起分发会使这种身份验证变得毫无用处,因为您将披露秘密密钥。

如果您需要验证服务器的证书(并且您已经在PEM文件中获得了服务器的证书或证书链),那么这可能有效,但是为什么需要将证书安装到证书存储中呢?

您应该注意,PEM格式不受Windows或.NET库的本地支持,因此您需要在部署之前将其转换为PFX,然后导入PFX或者基于PFX创建一个内存存储(您可以通过在StackOVerflow上搜索PFX或PKCS#12来找到大量信息)。

更新:更好的方法是每次安装应用程序时生成证书,并让用户拥有自己的证书(例如,他们可能已经拥有其网站的有效证书)。


抱歉,凌晨两点有些含糊;)已经进行了编辑。 - Dave
嗯,好观点;虽然我猜你总是会被困在浏览器中那个自签名证书确认对话框里吧?我支持这种方法...但是我该如何在代码中实现呢?(我是一个 Windows 编程新手 :-D)编辑:这里的想法是,安装此软件的人不懂计算机,因此如果所有操作都是自动化的,那就最好了。 - Dave
@Dave 为了避免浏览器确认,用户需要从已知的证书颁发机构(globalsign、comodo、thawte、verisign等)获取证书。至于证书生成,请参见https://dev59.com/eG865IYBdhLWcg3whfBf,此外,我们的Secureblackbox产品提供完整的PKI基础设施支持,包括证书生成和签名(http://www.eldos.com/sbb/desc-pki.php)。 - Eugene Mayevski 'Callback

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