2014-08-28 23:10:06
来 源
中存储网
Exchange邮件服务器
笔者希望在这里为大家提供一些如何解决RPC over HTTP问题的基本思路。

随着RPC over HTTP功能在国内的普及,Exchange管理员可能会碰到各种各样的问题。作为一名长期从事Exchange技术支持的工程师,笔者希望在这里为大家提供一些如何解决RPC over HTTP问题的基本思路。

大家都知道,在Microsoft Exchange Server 2003和Microsoft Office Outlook 2003与Windows Server 2003相结合的环境内,用户可以使用RPC over HTTP访问Exchange服务器。通过RPC over HTTP,在客户端计算机上运行Outlook 2003的用户可以无需使用虚拟专用网 (VPN),而通过Internet直接连接到公司环境内的Exchange服务器。

RPC over HTTP正是Exchange Server 2003为满足移动办公所提供的主要特点之一。它使得越来越多的用户在家里或者在外出差的时候也可以通过与Internet相连接的手提电脑访问公司的邮箱。随着RPC over HTTP功能在国内的普及,Exchange管理员可能会碰到各种各样的问题。作为一名长期从事Exchange技术支持的工程师,笔者希望在这里为大家提供一些如何解决RPC over HTTP问题的基本思路。

步骤一:
首先,我们需要确定在Exchange Server 2003上,RPC over HTTP的配置是正确的。基本上,在Exchange服务器上配置RPC over HTTP的步骤取决于如下两个因素:

  • 您的Exchange服务器是否安装了Service Pack 1或者之后的版本。
  • 您的Exchange组织是否使用了前端服务器和后端服务器的结构。

    Exchange Server 2003 SP1对RPC over HTTP的工作方式及配置方法都作了一些改进。比如说在应用Exchange Server 2003 SP1之后,使用RPC over HTTP的方式连接到运行Exchange的服务器的客户将使用DSProxy进程从全局编录服务器来访问信息(更多信息,请参阅“如何控制DSProxy过程用于RPCoverHTTP 通过HTTP连接Exchange Server 2003 SP1中”,http://support.microsoft.com/kb/872897/zh-cn)。同时,打开Exchange系统管理器,在安装了Service Pack 1或之后版本的Exchange服务器的属性页上,如图1所示,您可以看到一个名为RPC-HTTP的选项卡,您可以在这里直接指定其为一台RPC over HTTP的服务器,而不用手工添加相比较而言更为复杂的注册表键值。

    图1:安装有SP1的Exchange 2003服务器属性页上的RPC-HTTP的选项卡

    同样的,在一台服务器上配置RPC over HTTP和在具有前端和后端服务器的Exchange组织内配置的方法也不尽相同。在所有情形当中,在单独一台没有安装SP1的Exchange服务器上配置RPC over HTTP是最复杂的。在这里,我简单把配置步骤罗列如下:

  • 将Exchange计算机配置为使用RPC over HTTP。
  • 在IIS中配置RPC虚拟目录。
  • 配置RPC代理服务器,以使用企业网络内部为RPC over HTTP指定的默认端口。
  • 配置所有全局编录,以使目录服务的RPC over HTTP使用特定端口。

    关于在一台服务器上配置RPC over HTTP的具体方法,您也可以参阅“如何在一台服务器上的Exchange Server 2003中配置RPC over HTTP”(http://support.microsoft.com/kb/833401/zh-cn)。同时,您也可以访问以下文章,找到最适合您的Exchange环境的配置方法:
    RPC over HTTP的配置方法
    http://www.microsoft.com/technet/prodtechnol/exchange/guides/E2k3RPCHTTPDep/ee9b228f-db48-4860-8bfd-3195881b8980.mspx

    步骤二:
    在确保Exchange服务器上的RPC over HTTP配置正确之后,我们就需要通过使用SSL与RPC代理服务器进行连接,确认IIS和RpcProxy.dll文件均运行正常。我们知道,RpcProxy.dll文件在整个RPC over HTTP的过程中是非常重要的,它主要是用来从Outlook端发出的HTTP包中提取RPC访问信息。所以,确保它们正常工作是至关重要的。下面我们来看看具体的步骤:
    在您发现的一台不能通过RPC over HTTP访问Exchange邮箱的Outlook机器上,打开Internet Explorer并在其中键入完全限定域名(FQDN)地址,然后点击回车。例如,键入https://mail.contoso.com/rpc 

    注意:用RPC代理服务器的FQDN替换mail.contoso.com。
    如果IIS运行正常,并且可以成功地访问RPC应用程序,您就会收到以下错误消息: 
    The page cannot be displayed
    HTTP Error 403.2 - Forbidden: Read access is denied. 
    Internet Information Services(IIS) 
    出现此错误消息是预期的。尽管您可以成功地访问RPC应用程序,但因为客户端程序没有读取此应用程序的权限,所以IIS返回此错误消息。如果您已经应用了Windows Server 2003 Service Pack 1(SP1),则在这个RpcProxy.dll文件和IIS功能测试中,您将收到三次输入凭据的提示。在第一个提示中输入凭据后,在第二个和第三个提示中单击“确定”即可。您不必再次输入凭据。

    在第二个和第三个提示中单击“确定”后,您就会收到以下错误消息:
    You are not authorized to view this page. You do not have permission to view this directory or page due to the access control list (ACL) that is configured for this resource on the Web server.
    HTTP Error 401.3 - Unauthorized: Access is denied due to an ACL set on the requested resource.
    Internet Information Services (IIS)

    出现此错误消息也是预期的。以上两条错误信息均表明IIS和RpcProxy.dll文件运行正常。另外,您还可以通过浏览器直接浏览到位于RPC虚拟目录中的DLL文件。为此,请在Internet Explorer中键入以下FQDN地址:
    https://mail.contoso.com/rpc/rpcproxy.dll
    当提示您输入凭据时,请使用通用命名约定(UNC)格式(域用户名)键入用户名和密码,然后单击“确定”。您将在浏览器中看到一个空白页面,并且在浏览器的状态栏中将出现一个锁状图标。这表明您已经成功地与服务器建立了一个安全的(SSL)连接。此外,这是预期的行为并且表明RPC虚拟目录在服务器上进行了正确配置。

    步骤三:
    考虑到Outlook 2003是使用启用了SSL的HTTP来和RPC代理服务器进行连接的,为了保证RPC over HTTP的访问能够正常进行,我们要确保以下三个关于SSL证书的条件全部成立:

    • Outlook客户端必须信任颁发这张SSL证书的机构。
    • 这张SSL证书必须有效且没有过期。
    • 在这张SSL证书中所使用的名字必须和您在Outlook配置文件中出现的RPC代理服务器的名字一致。

      以上三个条件中的任何一条不能满足,RPC over HTTP的访问都将会失败。要验证SSL证书的这三个条件,我们还是要通过使用SSL与RPC代理服务器进行连接。具体步骤如下:

      在您发现的一台不能通过RPC over HTTP访问Exchange邮箱的Outlook机器上,打开Internet Explorer 并在其中键入完全限定域名(FQDN)地址,然后点击回车:例如,键入https://mail.contoso.com/rpc。
      注意:用RPC代理服务器的FQDN替换mail.contoso.com。
      如果您遇到了如图2所示的警告信息,这说明证书是由一家您不信任的公司颁发的,也就是您的客户端计算机不信任颁发该证书的根证书颁发机构。这种情况一般发生在您的RPC代理服务器使用自己内部证书授权机构所颁发的证书,而非互联网商业机构所颁发的证书。一般来说,内部证书授权机构所颁发的证书是免费的,而互联网商业机构所颁发的证书价格高昂。遇到这种情况时,您可以把颁发网站证书的颁发机构(CA)的根证书发布到互联网上,供用户下载。具体步骤,您可以参看以下微软知识库文章:

      错误消息:This Security Certificate Was Issued by a Company that You Have Not Chosen to Trust(该安全证书是由一家您不愿信任的公司颁发的)
      http://support.microsoft.com/kb/297681/zh-cn 

      如果您遇到了如图3所示的警告信息,您只需要重新申请一个SSL证书,它的名字和RPC代理服务器在公网上的完全限定域名一致即可。遇到SSL证书无效或过期的情况较少;如果您遇到此类情况,它的解决办法和上一种情况一样,重新申请一个有效的SSL证书即可。

      图2:Outlook客户端计算机不信任颁发这张SSL证书的机构

      图3:在这张SSL证书中所使用的名字和RPC代理服务器的名字不一致

      步骤四:

      作为解决RPC over HTTP连接问题的常用工具,我将向大家介绍如何使用RPC Ping。您可以使用RPC Ping实用工具检查运行Microsoft Exchange Server的计算机与网络上任何受支持的Microsoft Exchange客户端工作站之间的RPC连接。此外,还可以使用RPC Ping实用工具验证Microsoft Exchange Server服务是否能够响应客户端工作站通过网络发出的RPC请求。

      RPC Ping实用工具包含在Microsoft Windows Server 2003 Resource Kit工具中。要下载此Resource Kit,请访问以下地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

      在安装Microsoft Windows Server 2003 Resource Kit之后,您可以通过命令行输入以下命令来运行RPC Ping。这条命令基本上模拟了一次Outlook客户端RPC over HTTP的访问过程:

      rpcping -t ncacn_http -s ExchServer -o RpcProxy=RPCProxyServer -P "user,domain,*" -I "user,domain,*" -H 1 -u 10 -a connect -F 3 -v 3 -E -R none

      在这里,我来解释一下各个参数的使用。

      -t:该参数设置在尝试绑定到RPC代理服务器时使用的协议。该参数使用标准RPC协议序列。Ncacn_http意指RPC over HTTP的连接。

      -s:该参数是Microsoft Exchange 2003服务器和MBX服务器的名称。

      -o:该参数是RPC代理服务器的名称。

      -P:该参数指定向RPC代理服务器进行身份验证时使用的用户帐户。

      -I:该参数指定向Microsoft Exchange服务器进行身份验证时使用的用户帐户。

      -H:该参数是用于RPC代理服务器的身份验证类型。对于基本身份验证,使用值1;对于NTLM身份验证,使用值2。

      -u:RPC将使用此单元格中列出的安全方法之一验证用户帐户的身份,让调用对用户帐户进行身份验证。安全程序包以数字标识。Negotiate安全程序包是9,NTLM安全程序包是10,Schannel安全程序包是14,Kerberos安全程序包是16。

      -a:这是用于连接到RPC代理服务器的身份验证级别。如果指定该参数,则必须同时指定安全程序包ID(-u)。

      -F:这些参数是为进行RPC/HTTP前端身份验证而传递的标记。“无SSL”标记为2,“使用SSL”标记为3。

      -v:该参数打开详细记录。值1表示最小记录,值2表示普通记录,值3表示完整记录。

      -E:该参数不使用值。该参数指定仅限于对RPC代理服务器进行连接测试。

      -R:该参数指定要使用的HTTP代理服务器。使用值none将绕过HTTP代理服务器并尝试直接连接到RPC代理服务器。

      如果RPC Ping实用工具测试成功,您将收到类似于图4的响应:

      图4:使用RPC Ping工具来验证RPC over HTTP的连接

      在图4中,您可以看到一个测试成功的例子,在这里我的测试环境是单一的Exchange服务器,名为infra-e2k3。我使用名为administrator的帐号来测试连接。如果测试失败,以下是一些常见的报错以及可能导致这些错误的原因:

      • Error 12029 returned in the WinHttpSendRequest:PRC Ping实用工具测试失败的可能原因包括:无法访问代理服务器端口80(-F 2),443(-F 3)已被阻止,或者万维网发布服务(W3Svc)服务器已停止响应。
      • Response from server received:501:PRC Ping实用工具测试失败的可能原因包括:无法联系RcpProxy.dll,访问了错误的虚拟根文件夹(Vroot),未安装RPC代理服务器,或者无法访问Vroot。
      • Error 12175 returned in the WinHttpSendRequest:PRC Ping实用工具测试失败的可能原因包括:证书不受信任,或它不信任证书和根颁发机构。RPC代理服务器中的服务器证书主题与-B指定的主题不匹配。

        步骤五:

        正是因为RPC over HTTP连接是建立在HTTP基础上的,IIS日志也是解决RPC over HTTP连接问题的非常有效的手段。收集IIS日志的具体步骤如下:

        • 在RPC代理服务器上,启动Internet信息服务(IIS)管理器。
        • 右键点击Default Web Site,选择“Properties”。
        • 在Website tab选项卡下,选中“Enable logging”。
        • 选择“W3C Extended Log File Format”,点击“Properties”。
        • 在Advanced选项卡下,选中所有日志选项。点击OK两次,储存设置。
        • 停止Default Web Site,然后把文件夹C:WINDOWSsystem32LogFilesW3SVC1下的所有老的日志文件移至其它位置。
        • 重新启动Default Website,重复一遍RPC over HTTP的访问,这样IIS日志就会把整个在RPC虚拟目录上的动作全部记录下来。
        • 等待5至10分钟,然后到文件夹C:WINDOWSsystem32LogFilesW3SVC1下收集最近的IIS日志。

          从IIS日志中我们可以看到RPC虚拟目录对于RPC over HTTP访问请求的反应。一般来说,对于一次成功的RPC over HTTP访问,我们可以在IIS日志中看到HTTP 200代码。同理我们也可能从IIS日志中找到一些造成RPC over HTTP访问失败的原因。下面是两类最常见的错误。


          如果您的RPC over HTTP访问遇到“服务器不可用”的错误信息,并且从IIS日志中找到如下的HTTP 404.2的报错:
          日期时间 IP 地址 RPC_IN_DATA /rpc/rpcproxy.dll FQDN.companyname.com:6002 443 domainusername IP 地址 MSRPC 2日 1260 404 2 1260 日期时间 IP 地址 RPC_OUT_DATA /rpc/rpcproxy.dll FQDN.companyname.com:6002 443 domainusername IP 地址 MSRPC 404

          这是一个非常有名的关于RPC over HTTP的错误,它一般只出现在预装了Windows Server 2003操作系统的DelL服务器上。一般来说,在后台运行的IIS服务会使用C:Windowssystem32rpcproxyrpcproxy.dll来处理RPC over HTTP访问。但是在一台预装了Windows Server 2003操作系统的DELL服务器上,rpcproxy.dll的位置会错误地指向C:windowssystem32rpcproxy.dll。这就会导致RPC代理服务器扩展加载不正确,从而出现HTTP 404.2的报错。解决这个问题,您需要按照下面的文章重新为rpcproxy.dll设定正确的路径:


          Outlook 2003用户通过HTTP使用RPC连接到Exchange Server 2003时出现错误信息:“服务器不可用”(http://support.microsoft.com/kb/919092/zh-cn)

          或者是Dell官方网站的这篇文章:http://support.dell.com/support/topics/global.aspx/support/dsn/en/document?c=us&cs=555&l=en&s=biz&dn=1091575

          如果你在IIS日志中看到了其它的HTTP错误代码,这很有可能是由于您在这台Exchange Server 2003的服务器上安装了URLScan,来阻止特定的HTTP请求,像RPC_IN_DATA和RPC_OUT_DATA语句。而这两条语句恰恰是RPC over HTTP的访问语句。要解决这个问题,您可以参阅以下文章:
          当您的Exchange 2003环境中使用Urlscan工具fine-tuning和已知问题
          http://support.microsoft.com/kb/823175/zh-cn 

          当您遇到RPC over HTTP的问题时,以上五大步骤将会非常实用和有效。除此之外,我还想向大家介绍一些关于RPC over HTTP的参考资料。通过它们,大家可以更好地了解RPC over HTTP的工作原理及排除故障的技巧。
          RPC over HTTP的工作原理
          http://www.microsoft.com/technet/prodtechnol/exchange/guides/E2k3RPCHTTPDep/105b3a1b-a55b-4ec4-aed6-3b5a8c8de075.mspx?mfr=true 
          RPC over HTTP中的远程过程调用
          http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/remote_procedure_calls_using_rpc_over_http.asp   
          RPC over HTTP在Exchange服务器上的配置方法
          http://www.microsoft.com/technet/prodtechnol/exchange/guides/E2k3RPCHTTPDep/ee9b228f-db48-4860-8bfd-3195881b8980.mspx 
          在Outlook 2003上配置RPC over HTTP
          http://www.microsoft.com/office/ork/2003/three/ch8/OutC07.htm
          如何在Outlook 2003中对客户端RPC over HTTP连接问题进行故障排除
          http://support.microsoft.com/kb/827330/zh-cn 
          RPC over HTTPS故障排除 (Part 1)
          http://www.msexchange.org/tutorials/Troubleshooting-RPC-over-HTTPS-Part1.html  
          RPC over HTTPS故障排除 (Part 2)
          http://www.msexchange.org/tutorials/Troubleshooting-RPC-over-HTTPS-Part2.html

          声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。