私は、C# コードを使用して数十のサイトをセットアップする必要があるテスト環境用の単純なツールに取り組んでいます。したがって、配列に (サブ) ドメイン名 (およびその他のプロパティ) のリストがあり、それを実行して、それらのバインディングを使用してサイトを作成します。ストアから適切な SSL 証明書をバインドする必要がある HTTPS バインドを除いて、これは正常に機能します。何らかの理由で、すべてのサイトが同じ証明書で終了します。
コードは比較的単純です。最初に次のように証明書ストアを開きます。
var store = new X509Store("MY", StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly);
次に、ドメインごとに、Certificate.Subject.EndsWith(domain.Domain)
正常に機能する証明書を見つけます。ハッシュと名前を表示しますが、これらは正しいです。
次に、ポート 80 での基本バインディングを使用して各ドメインを作成します。
var site = manager.Sites.Add(domain.Name, "http", $"*:80:{domain.Domain}", domain.Folder);
証明書が見つかった場合は、HTTPS 接続もバインドします。
site.Bindings.Add($"*:443:{domain.Domain}", domain.Certificate.GetCertHash(), "MY");
また、正しい値であることを確認するためだけに、ハッシュをコンソールに書き込みます。その後manager.CommitChanges();
、追加されたサイトをコミットするために呼び出されます。
次に、どの証明書が添付されているかを IIS で確認したところ、間違った証明書であることが判明しました。したがって、各サイトには証明書エラーがあり、すべてが正しいように見えるのになぜうまくいかないのかわかりません。
したがって、コミット後、バインディングをコンソールに列挙してハッシュを再度出力しますが、それでも正しいハッシュが表示されます。これは本当に面倒です!
選択される証明書については...リストの最後のドメインの証明書のようです。しかし、なぜそれが他のすべてのバインディングに割り当てられるのでしょうか?
これは IIS マネージャーのバグですか?
ちょっとした発見: IIS に行き、証明書を適切なものに変更しました。これにより、IIS で次のメッセージが表示されます
。[はい] をクリックすると、すべてのサイトの証明書が変更されるため、これは興味深いことです。「いいえ」をクリックすると、編集ダイアログに戻るので、何も解決しません。関係ないと思いますが…