【问题标题】:Error using appcmd to add ssl binding使用 appcmd 添加 ssl 绑定时出错
【发布时间】:2012-03-25 21:08:10
【问题描述】:

我想使用 appcmd 将绑定添加到站点。但是当我尝试以下命令时,我得到一个错误:

appcmd set site /site.name:"My site name" /+bindings.[protocol='https',bindingInformation='*:443:sub.mydomain.com'] 

错误:

ERROR ( message:Cannot find SITE object with identifier "bindingInformation='*:443:sub.mydomain.com']". )

我检查了该站点是否存在并且确实存在。我做错了什么?

【问题讨论】:

    标签: iis iis-7 https appcmd


    【解决方案1】:

    如果您使用的是 PowerShell,则必须将 bindings 参数用双引号括起来,以便 PowerShell 在命令发送到 appcmd 之前不会解释单引号。

    ./appcmd set site /site.name: contoso /+"bindings.[protocol='https',bindingInformation='*:443:']"
    

    来源:http://technet.microsoft.com/en-us/library/cc731692(v=ws.10).aspx

    【讨论】:

    • 谢谢!试图在 PowerShell 中进行这项工作时,我感到很头疼。 :)
    【解决方案2】:

    试试这个:

    appcmd set site "My site name" /bindings:"https://sub.mydomain.com:443"
    

    但是你的命令也是正确的。列出所有网站并确保您正在使用其中一个:

    appcmd list site
    

    【讨论】:

    • 你从哪里得到没有/+/- 的语法?能否提供文档链接?
    【解决方案3】:

    我在 Powershell 中遇到了绑定中冒号的问题。将它们连接起来解决了这个问题。

    [string] $cmd = "$Env:windir\SysWOW64\inetsrv\APPCMD.exe"
    $response = invoke-expression "$cmd add site /name:""$SiteName"" /id:$ID /+""bindings.[protocol='$Protocol',bindingInformation='$IP"+":$Port"+":']"" /physicalPath:""$Path"""
    

    【讨论】:

      【解决方案4】:

      您需要以管理员身份运行命令。

      【讨论】:

        【解决方案5】:

        我永远无法使用 *.mydomain.com 的通配符证书来完成这项工作,我认为这是一个非常友好的名称:“mydomain.com 加通配符”。我会运行上面的命令,进入 IIS 并查看绑定,它会在那里,但没有选择证书。选择证书将删除主机名并禁用它,因此我无法更改它。

        我终于通过将通配符证书的友好名称更改为 IIS 预期的格式(“*.mydomain.com”)并通过 IIS 界面正常添加它来使其工作,不知道上面的 appcmd 命令是否可以工作。这个故事的寓意是给通配符证书一个标准形式的友好名称。

        【讨论】:

          【解决方案6】:

          我创建了一个批处理文件来实现这一点:

          @echo off
          
          set /p sitename="Enter the site Name (as displayed in IIS): " %=%
          set /p siteurl="Enter the site Host Header(the site url): " %=%
          set /p siteip="Enter the site IP Address (ip address or *): " %=%
          set /p siteprotocol="Enter the site Protocol (http, https, etc): " %=%
          set /p siteport="Enter the site Port (80, 443): " %=%
          
          appcmd set site /site.name:"%sitename%" /+bindings.[protocol='%siteprotocol%',bindingInformation='%siteip%:%siteport%:%siteurl%']
          
          pause
          

          【讨论】: