是否有可能在IIS7中使用通配符映射

我想指出用户test1.domain.com test2.domain.com等没有手动添加在IIS7中的头绑定。 这可能吗? 如果不能自动添加主机头以编程方式?

是的你可以。

可以使用通配符SSL证书和单个IP。

我可以详细说明如何使用自签名通配符进行testing。

先决条件

  • MakeCert.exe(这应该是一个视觉工作室安装的一部分或在这里下载 )
  • winhttpcertcfg.exe( 可在此下载 )
  • APPCMD(Vista / Server 2008 / Windows 7的一部分)
  • 使用MMC的个人和本地计算机的“证书”pipe理单元

方法

从命令提示符处执行以下命令

makecert -r -pe -n CN=*.domain.com -ss my -sr currentuser -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 wildcard.domain.cer 

然后

  • 从运行命令或开始菜单中,键入MMC
  • 文件>添加或删除pipe理单元 – select证书,单击添加,select我的用户帐户,单击完成
  • 重复上一步并select我的电脑(然后select本地电脑)
  • 点击OK
  • 展开证书 – 当前用户>个人>证书
  • 右键单击* .domain.com和所有任务>导出。 PFX文件包含此证书的公钥和私钥,因此为什么要求input密码。
  • 将当前用户>个人>证书复制或移动到本地计算机>受信任的根证书颁发机构>证书
  • 导入PFX到本地计算机>个人>证书(这将是您的Web服务使用的证书。

现在我们来创build您的Web服务器

  • 整理你的环境:)

删除现有的演示应用程序池和网站

 %windir%\system32\inetsrv\Appcmd delete site "Demo 1" %windir%\system32\inetsrv\Appcmd delete site "Demo 2" %windir%\system32\inetsrv\Appcmd delete AppPool "Demo 1 App Pool" %windir%\system32\inetsrv\Appcmd delete AppPool "Demo 2 Portal App Pool" 
  • build立SSL环境

告诉Windows允许networking服务访问您的通配符证书。 并告诉它将证书绑定到您的IP地址上的端口443

 PathToWinHTTPCertCfg\winhttpcertcfg -g -i "wildcard.domain.com.pfx" -c LOCAL_MACHINE\My -a “Network Service” -p MySecretPassword netsh http add sslcert ipport=<YOURLOCALIPADDRESS>:443 certhash=<CERTIFICATE THUMBPRINT> appid=<A GUID IN THE FORM OF {ab3c58f7-8316-42e3-bc6e-771d4ce4b201}> 
  • 创build应用程序池和站点

这是创build应用程序池和网站的代码

 %windir%\system32\inetsrv\Appcmd add site -id:100 -name:"Demo 1" -bindings:http/*:80:YOURLOCALIPADDRESS -physicalPath:<PathToDemo1Source> -logfile.directory:<PathToPutLogFilesIn> -traceFailedRequestsLogging.directory:<PathToPutTraceFiles> %windir%\system32\inetsrv\Appcmd set app "Demo 1/" -applicationPool:"Demo 1 App Pool" %windir%\system32\inetsrv\Appcmd set site /site.name:"Demo 1" /+bindings.[protocol='https',bindingInformation='*:443:demo1.domain.com'] %windir%\system32\inetsrv\Appcmd add site -id:200 -name:"Demo 2" -bindings:http/*:80:YOURLOCALIPADDRESS -physicalPath:<PathToDemo2Source> -logfile.directory:<PathToPutLogFilesIn> -traceFailedRequestsLogging.directory:<PathToPutTraceFiles> %windir%\system32\inetsrv\Appcmd set app "Demo 2/" -applicationPool:"Demo 2 App Pool" %windir%\system32\inetsrv\Appcmd set site /site.name:"Demo 2" /+bindings.[protocol='https',bindingInformation='*:443:demo2.domain.com'] 

…那应该是你;)享受!

据我所知,只有两个选项,当涉及IIS7的主机头。

  1. 你为每个你想要处理的域设置一个主机头/types/端口/ IP。
  2. 您不设置主机标题,但在要处理多个域的站点上包含type / port / ip。

选项#2的捕获是会响应该端口上的任何请求,并且您将无法在没有主机头的另一个站点上使用相同的端口。

可能有一个ISAPI筛选器可以在服务器级加载,以在请求到达处理的主机头部分之前拦截请求,但可能更容易设置脚本来处理选项#1。

通过设置通配符DNS条目,您可以尽可能多的名称到您的默认网站。 一旦用户点击该网站,如果您需要将其redirect到另一个网站,请让您的default.asp文件查找HOST标题以确定是否需要redirect,否则,请继续并加载网站的其余部分。

参考文献:

通配符主机头与IIS7

HTTP头列表

我对网站开发不是很好,但至less应该让你开始。