gpt4 book ai didi

ssl - 如何通过代码将现有的 SSL 证书分配给新的 IIS 站点?

转载 作者:行者123 更新时间:2023-12-04 22:41:47 28 4
gpt4 key购买 nike

我正在开发一个用于测试环境的简单工具,我必须通过 C# 代码设置几十个站点。因此,我在一个数组中有一个(子)域名(和其他属性)的列表,我通过它来创建具有它们的绑定(bind)的站点。这工作正常,除了我需要从商店绑定(bind)正确的 SSL 证书的 HTTPS 绑定(bind)。无论出于何种原因,所有站点最终都会获得相同的证书。
代码相对简单。我首先像这样打开证书存储:

var store = new X509Store("MY", StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly);
然后我为每个域找到证书 Certificate.Subject.EndsWith(domain.Domain)这也可以正常工作。我显示哈希和名称,这些都是正确的。
然后我继续在端口 80 上创建具有基本绑定(bind)的每个域:
var site = manager.Sites.Add(domain.Name, "http", $"*:80:{domain.Domain}", domain.Folder);
如果找到证书,我还将绑定(bind) HTTPS 连接:
site.Bindings.Add($"*:443:{domain.Domain}", domain.Certificate.GetCertHash(), "MY");
我还将哈希写入控制台只是为了确保我有正确的值!之后 manager.CommitChanges();被调用以提交添加的站点。
然后我在 IIS 中检查附加了哪个证书,结果证明是错误的!所以每个站点都有一个证书错误,我不明白为什么会出错,因为一切似乎都是正确的。
因此,在提交之后,我通过枚举到控制台的绑定(bind)再次打印散列,它仍然显示正确的散列。这变得非常烦人!
至于确实被选中的证书......它似乎是我列表中最后一个域的证书。但是为什么它被分配给所有其他绑定(bind)呢?
这是 IIS 管理器中的错误吗?

一个小发现:我去了 IIS 并将证书更改为正确的证书。这会在 IIS 中产生以下消息:
Warning in IIS after manually changing certificate...
这很有趣,因为当我单击"is"时,它将更改所有站点的证书。如果我单击“否”,那么我将返回编辑对话框,这样就不会解决任何问题。不要以为这有关系,虽然...

最佳答案

杜!杜!哑的!解决了...

site.Bindings.Add($"*:443:{domain.Domain}", domain.Certificate.GetCertHash(), "MY", SslFlags.Sni);
最后是 SslFlags.Sni 标志,作为第 5 个参数,可以解决问题。它代表“服务器名称指示”,呵呵!如果您通过域名绑定(bind)证书,显然您需要它......
这么点小事也能惹人生气……

关于ssl - 如何通过代码将现有的 SSL 证书分配给新的 IIS 站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70212065/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com