<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Care, Share and Grow! : Authentication</title><link>http://blogs.msdn.com/saurabh_singh/archive/tags/Authentication/default.aspx</link><description>Tags: Authentication</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Avoid this confusion around Client certificate mapping in IIS 6.0/7.0</title><link>http://blogs.msdn.com/saurabh_singh/archive/2009/06/13/avoid-this-confusion-around-client-certificate-mapping-in-iis-6-0-7-0.aspx</link><pubDate>Sat, 13 Jun 2009 03:05:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9740648</guid><dc:creator>Saurabh Singh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/saurabh_singh/comments/9740648.aspx</comments><wfw:commentRss>http://blogs.msdn.com/saurabh_singh/commentrss.aspx?PostID=9740648</wfw:commentRss><wfw:comment>http://blogs.msdn.com/saurabh_singh/rsscomments.aspx?PostID=9740648</wfw:comment><description>&lt;p&gt;I just wanted to add this quick post around &lt;strong&gt;Client certificate Mapping&lt;/strong&gt; on IIS. This is focused on 1-to-1/Many-to-1 mapping in IIS 6.0/7.0.&lt;/p&gt; &lt;p&gt;If you are interested to know more about configuring Client certificate mapping in IIS 6.0 please check this &lt;a href="http://blogs.msdn.com/saurabh_singh/archive/2007/04/14/how-to-setup-iis-and-ad-for-client-certificate-setup-and-authentication.aspx" target="_blank"&gt;post&lt;/a&gt; of mine and for IIS 7.0 this is an excellent &lt;a href="http://blogs.iis.net/rlucero/archive/2008/05/23/iis-7-walkthrough-one-to-one-client-certificate-mapping-configuration.aspx" target="_blank"&gt;article&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Recently a &lt;a href="http://blogs.msdn.com/rakkimk/" target="_blank"&gt;colleague&lt;/a&gt; of mine and I was working on this issue for one of our internal teams and after some real slogging we figured out that one *cannot* set this mapping at any Virtual directory/Application level in IIS.&lt;/p&gt; &lt;p&gt;One has to set the Client certificate mapping at the specific Web site level only!&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/7535c5fca462_4A3D/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="41" alt="image" src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/7535c5fca462_4A3D/image_thumb.png" width="149" border="0"&gt;&lt;/a&gt; This is wrong!&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/7535c5fca462_4A3D/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="39" alt="image" src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/7535c5fca462_4A3D/image_thumb_1.png" width="144" border="0"&gt;&lt;/a&gt; This is right!&lt;/p&gt; &lt;p&gt;I couldn't find a documentation on this so thought of putting this as a short post for general audience in case someone is scratching their head over this.&lt;/p&gt; &lt;p&gt;Cheers!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9740648" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Client+Certificate/default.aspx">Client Certificate</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Service Principal Name (SPN) checklist for Kerberos authentication with IIS 7.0</title><link>http://blogs.msdn.com/saurabh_singh/archive/2008/12/25/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-0.aspx</link><pubDate>Thu, 25 Dec 2008 04:01:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9252291</guid><dc:creator>Saurabh Singh</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/saurabh_singh/comments/9252291.aspx</comments><wfw:commentRss>http://blogs.msdn.com/saurabh_singh/commentrss.aspx?PostID=9252291</wfw:commentRss><wfw:comment>http://blogs.msdn.com/saurabh_singh/rsscomments.aspx?PostID=9252291</wfw:comment><description>&lt;p&gt;In continuation to one of my earlier &lt;a href="http://blogs.msdn.com/saurabh_singh/archive/2007/01/29/kerberos-troubleshooting-from-iis-perspective.aspx" target="_blank"&gt;posts&lt;/a&gt; which focused on IIS 6.0 this post is more about the confusion that may arise around SPNs for setting up Kerberos authentication in IIS 7.0. IIS 7.0 has a new Kernel-mode authentication feature using which the ticket for the requested service is decrypted using Machine account (Local system) of the IIS server. It no longer depends upon the application pool Identity for this purpose by default and in turn improves the performance.  &lt;p&gt;Here is how it looks like.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/KerberostroubleshootingfromIISperspect.0_7F3B/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="207" alt="image" src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/KerberostroubleshootingfromIISperspect.0_7F3B/image_thumb.png" width="534" border="0"&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/KerberostroubleshootingfromIISperspect.0_7F3B/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="306" alt="image" src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/KerberostroubleshootingfromIISperspect.0_7F3B/image_thumb_1.png" width="456" border="0"&gt;&lt;/a&gt;  &lt;p&gt;So what does this mean?  &lt;p&gt;You no longer need to worry about the correlation between HTTP SPNs and the Application pool Identity that was required in the earlier version i.e. IIS 6.0. But that's not blindly true. There has been some confusion whether we don't have to care at all about SPNs or may have to depending upon the settings. Here is a checklist to give more clarity for different scenarios that you may fall under:  &lt;p&gt;&lt;strong&gt;SCENARIO 1a&lt;/strong&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="678" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;IIS 7.0 Web Site/Application&lt;/td&gt; &lt;td valign="top" width="469"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Integrated Windows authentication&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Application Pool Identity&lt;/td&gt; &lt;td valign="top" width="469"&gt;NETWORK SERVICE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Kernel-Mode authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Enabled (&amp;lt;attribute name="useKernelMode" type="bool" defaultValue="true" /&amp;gt; in the ApplicationHost.config file)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Site URL&lt;/td&gt; &lt;td valign="top" width="469"&gt;Accessed with the NetBIOS name, like &lt;font size="1"&gt;http://&lt;em&gt;&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/em&gt;/Default.aspx&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;SPNs will be required ONLY for the IIS machine account: &lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="678" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="674"&gt;HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="674"&gt;HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;.fully-qualified-domainname&amp;gt; for e.g. HOST/myIISserver.mydomain.com&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;em&gt;&lt;font color="#804000"&gt;&lt;strong&gt;***Note&lt;/strong&gt;: By default HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt; and HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;.fully-qualified-name&amp;gt; is already added for the machine account when a machine is added to a domain and HTTP forms a part of HOST. So you may not have to do anything special here for SPNs. Everything should be set by default.&lt;/font&gt;&lt;/em&gt;  &lt;p&gt;You can check the set of existing SPNs for the machine account by running the following command:  &lt;p&gt;&amp;gt; Setspn.exe -L &lt;em&gt;&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/em&gt; or directly using a Snap-in like &lt;a href="http://technet.microsoft.com/en-us/library/cc773354.aspx" target="_blank"&gt;Adsiedit.msc&lt;/a&gt;.  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;SCENARIO 1b&lt;/strong&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="678" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;IIS 7.0 Web Site/Application&lt;/td&gt; &lt;td valign="top" width="469"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Integrated Windows authentication&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Application Pool Identity&lt;/td&gt; &lt;td valign="top" width="469"&gt;Custom account for e.g. Domain1\Username1&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Kernel-Mode authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Enabled (&amp;lt;attribute name="useKernelMode" type="bool" defaultValue="true" /&amp;gt; in the ApplicationHost.config file)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Site URL&lt;/td&gt; &lt;td valign="top" width="469"&gt;Accessed with the NetBIOS name, like &lt;font size="1"&gt;http://&lt;em&gt;&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/em&gt;/Default.aspx&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;The SPN requirements remain the same as above. You don't have to add SPNs like http/&lt;em&gt;&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/em&gt; for the Domain1\Username1 unlike in IIS 6.0 (where we had to add an SPN of the form http/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt; for the Application Pool identity). &lt;/p&gt; &lt;p&gt;SPNs will be required ONLY for the IIS machine account:&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="678" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="674"&gt;HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="674"&gt;HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;.fully-qualified-domainname&amp;gt; for e.g. HOST/myIISserver.mydomain.com&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;em&gt;&lt;font color="#804000"&gt;&lt;strong&gt;***Note&lt;/strong&gt;: By default HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt; and HOST/&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;.fully-qualified-name&amp;gt; is already added for the machine account when a machine is added to a domain and HTTP forms a part of HOST. So you may not have to do anything special here for SPNs. Everything should be set by default.&lt;/font&gt;&lt;/em&gt;  &lt;p&gt;You can check the set of existing SPNs for the machine account by running the following command:  &lt;p&gt;&amp;gt; Setspn.exe -L &lt;em&gt;&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/em&gt; or directly using Snap-in like &lt;a href="http://technet.microsoft.com/en-us/library/cc773354.aspx" target="_blank"&gt;Adsiedit.msc&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;SCENARIO 2a&lt;/strong&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="678" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;IIS 7.0 Web Site/Application&lt;/td&gt; &lt;td valign="top" width="469"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Integrated Windows authentication&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Application Pool Identity&lt;/td&gt; &lt;td valign="top" width="469"&gt;NETWORK SERVICE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Kernel-Mode authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Enabled (&amp;lt;attribute name="useKernelMode" type="bool" defaultValue="true" /&amp;gt; in the ApplicationHost.config file)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Site URL&lt;/td&gt; &lt;td valign="top" width="469"&gt;Accessed with a Custom Host name, like &lt;font size="1"&gt;http://&lt;em&gt;www.mysite.com&lt;/em&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br&gt;SPNs will be required ONLY for the &lt;em&gt;IIS machine account&lt;/em&gt; in the following format: &lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="400" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="400"&gt;HTTP/&lt;em&gt;&amp;lt;site-custom-name&amp;gt;&lt;/em&gt; for e.g. HTTP/&lt;em&gt;www.mysite.com&lt;/em&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;You can add an SPN using Setspn.exe like  &lt;p&gt;&amp;gt; Setspn -a &lt;strong&gt;http/&lt;em&gt;&amp;lt;site-custom-name&amp;gt;&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/strong&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;where &amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt; is the IIS machine account and &lt;em&gt;&amp;lt;site-custom-name&amp;gt;&lt;/em&gt; is the custom host/host header name for the Web Site URL.&lt;/p&gt; &lt;p&gt;e.g. &amp;gt; Setspn -a http/www.mysite.com &amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&amp;gt;&lt;/em&gt;&lt;br&gt;&lt;font size="1"&gt;*The command is NOT case sensitive&lt;/font&gt; &lt;/p&gt; &lt;p&gt;You can check the existing set of SPNs for the machine account by running the following command:  &lt;p&gt;&amp;gt; Setspn.exe -L &amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;SCENARIO 2b&lt;/strong&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="678" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;IIS 7.0 Web Site/Application&lt;/td&gt; &lt;td valign="top" width="469"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Integrated Windows authentication&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Application Pool Identity&lt;/td&gt; &lt;td valign="top" width="469"&gt;Custom account for e.g. Domain1\Username1&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Kernel-Mode authentication&lt;/td&gt; &lt;td valign="top" width="469"&gt;Enabled (&amp;lt;attribute name="useKernelMode" type="bool" defaultValue="true" /&amp;gt; in the ApplicationHost.config file)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="205"&gt;Site URL&lt;/td&gt; &lt;td valign="top" width="469"&gt;Accessed with a Custom host/Host header name, like &lt;font size="1"&gt;http://&lt;em&gt;www.mysite.com&lt;/em&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;br&gt;SPNs will be required ONLY for the IIS machine account and NOT for Domain1\Username1 account unlike in IIS 6.0.&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="400" border="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="400"&gt;HTTP/&lt;em&gt;&amp;lt;site-custom-name&amp;gt;&lt;/em&gt; for e.g. HTTP/&lt;em&gt;www.mysite.com&lt;/em&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;You can add an SPN using Setspn.exe like  &lt;p&gt;&amp;gt; Setspn -a &lt;strong&gt;&lt;em&gt;http/&amp;lt;site-custom-name&amp;gt;&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;&amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;&lt;/strong&gt; where &amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt; is the IIS machine account and &lt;em&gt;&amp;lt;site-custom-name&amp;gt;&lt;/em&gt; is the custom host/host header name for the Web Site URL.&lt;/p&gt; &lt;p&gt;e.g. &amp;gt; Setspn -a http/www.mysite.com &amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&amp;gt;&lt;/em&gt;&lt;br&gt;&lt;font size="1"&gt;*The command is NOT case sensitive&lt;/font&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;You can check the existing set of SPNs for the machine account by running the following command:  &lt;p&gt;&amp;gt; Setspn.exe -L &amp;lt;&lt;em&gt;myIISserver-NetBIOS-name&lt;/em&gt;&amp;gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;Special case of running IIS 7.0 in a WEB FARM&lt;/strong&gt;&lt;br&gt;&lt;/font&gt;&lt;br&gt;If you are running IIS 7.0 server in a Web farm the KDC will not know in advance which individual server the request may go to and hence ticket decryption may fail. Hence in such a scenario instead of registering SPNs under a specific machine account use a domain account. I am not a SharePoint guy but based on what I have read on the Web this scenario is also applicable to a single SharePoint server configuration.&lt;br&gt;&lt;/p&gt; &lt;p&gt;There are two ways to go:&lt;/p&gt; &lt;p&gt;Either &lt;/p&gt; &lt;p&gt;Disable Kernel mode authentication and follow the general steps for Kerberos as in the previous IIS 6.0 version. Refer &lt;a href="http://support.microsoft.com/kb/871179" target="_blank"&gt;this&lt;/a&gt;.&amp;nbsp; &lt;p&gt;Or,  &lt;p&gt;[Recommended for Performance reasons]  &lt;p&gt;Let Kernel mode authentication be enabled and the Application pool's identity be used for Kerberos ticket decryption. The only thing you need to do here is:  &lt;p&gt;1. Run the Application pool under a common custom domain account.  &lt;p&gt;2. Add this attribute "useAppPoolCredentials" in the ApplicationHost.config file.  &lt;p&gt;&amp;lt;system.webServer&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;lt;security&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;authentication&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;windowsAuthentication enabled="true" useKernelMode="true" &lt;strong&gt;useAppPoolCredentials="true"&lt;/strong&gt; /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/authentication&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/security&amp;gt;&lt;br&gt;&amp;lt;/system.webServer&amp;gt;  &lt;p&gt;Remember there is no GUI setting for this. You need to modify the ApplicationHost.config file from  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&amp;lt;%SystemDrive%&amp;gt;/Windows/System32/inetsrv/config&lt;/u&gt;&lt;/strong&gt; folder on the IIS 7.0 machine.  &lt;p&gt;3. Add the SPNs in the form:  &lt;p&gt;&lt;em&gt;http/&amp;lt;virtualhost-name&amp;gt;&lt;/em&gt; and  &lt;p&gt;&lt;em&gt;http/&amp;lt;virtualhost-name.fully-qualified-name&amp;gt;&lt;/em&gt;&amp;nbsp; for the Application Pool Identity.  &lt;p&gt;Ensure that we don't have such an entry for SPNs for any other account including IIS server machine account.  &lt;p&gt;***If we have the same SPN mapped to multiple accounts (be it a machine or an user account) it leads to Duplicate SPNs and will break Kerberos.  &lt;p&gt;Hope this helps!  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9252291" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Kerberos/default.aspx">Kerberos</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/IIS+7.0/default.aspx">IIS 7.0</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Setup/default.aspx">Setup</category></item><item><title>Who knows! You may be missing these points for Kerberos authentication failures for Web applications...</title><link>http://blogs.msdn.com/saurabh_singh/archive/2008/11/16/who-knows-you-may-be-missing-these-points-for-kerberos-authentication-failures-for-web-applications.aspx</link><pubDate>Sun, 16 Nov 2008 13:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9102793</guid><dc:creator>Saurabh Singh</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/saurabh_singh/comments/9102793.aspx</comments><wfw:commentRss>http://blogs.msdn.com/saurabh_singh/commentrss.aspx?PostID=9102793</wfw:commentRss><wfw:comment>http://blogs.msdn.com/saurabh_singh/rsscomments.aspx?PostID=9102793</wfw:comment><description>&lt;p&gt;I am sharing here some of the general + elusive + ignored + must-have info that you may want to recheck when you are troubleshooting a kerberos cum delegation failure scenario and feel like reaching nowhere near the end of the tunnel (resolution!). These are my personal checklists based on experiences of troubleshooting kerberos related &lt;a href="http://encarta.msn.com/dictionary_1861614754/gotcha.html" target="_blank" mce_href="http://encarta.msn.com/dictionary_1861614754/gotcha.html"&gt;gotchas&lt;/a&gt;. I had also posted my first article on troubleshooting kerberos issues way back in January 2007. This article is a kind of continuation to it since I still see a lot of people missing some finer points here and there. Please check this &lt;a href="http://blogs.msdn.com/saurabh_singh/archive/2007/01/29/kerberos-troubleshooting-from-iis-perspective.aspx" target="_blank" mce_href="http://blogs.msdn.com/saurabh_singh/archive/2007/01/29/kerberos-troubleshooting-from-iis-perspective.aspx"&gt;post&lt;/a&gt; for the general kerberos checklist.&lt;/p&gt;
&lt;p&gt;So here I go...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kerberos was designed and is supported in Intranet scenarios. If you are trying to make it work over an Internet environment you may want to recheck other options (unless you are going ahead with Protocol transition for e.g. from Basic/NTLM to kerberos). Remember that for kerberos to work, the client (e.g. client browser) should be able to connect to the Domain Controller(KDC) to acquire the tickets. If your clients are coming over the Internet they may not be having access to the Domain Controller. Most security conscious organizations keep their DC away from Internet facing network in order to reduce the likelihood of it getting compromised. You may have to check with the firewall/proxy settings etc. and more...to make this work which I personally feel is not a good idea.&lt;/li&gt;&lt;/ul&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kerberos will work for resources (client-IIS-Backend DB etc.) in the same domain or in trusted domains within the same forest. Either have mutual trust (preferable) between the domains in the forest or at least have the IIS domain trust the client's domain. If your clients are coming from a domain across the forest with an external trust we need to do extra work. Refer to this &lt;a href="http://technet.microsoft.com/en-us/library/bb877995.aspx" target="_blank" mce_href="http://technet.microsoft.com/en-us/library/bb877995.aspx"&gt;article&lt;/a&gt;. I am not an AD guy &lt;img src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/red_smile.gif" alt="Embarrassed" mce_src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/red_smile.gif"&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here is an excerpt from the same article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;&lt;font color="#804040"&gt;The Windows Server 2003 family supports domain trusts and forest trusts. We know what domain trusts are: they allow a user to authenticate to resources in another domain. Like always, all domain trust relationships have only two domains in the relationship: the trusting domain and the trusted domain. There are one-way trusts (unidirectional) and two-way trusts (bi-directional) and a Windows Server 2003 domain can establish a trust among other Windows 2000/2003 domains in the same or different forest, Windows NT 4.0 domains and Kerberos V5 realms. In Windows 2000, if users in one forest needed access to resources in a second forest, an administrator could create an external trust relationship between the two domains, which is one-way and non-transitive. This meant that in order to extend your trust to other domains in the forests you had to explicitly configure each and every one of them. &lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;font color="#804040"&gt;Windows Server 2003 offers a forest trust: two-way Kerberos-based transitive trust between Windows Server 2003 forests, enabling a transitive trust between all the domains in the two forests. Forest trusts are established between the root domain of both forests and can be either one way or two way. A Few things to remember are to make sure all domain controllers in both forests are running Windows Server 2003, with a correctly configured DNS infrastructure and forest functionality level set to Windows Server 2003 mode in both forests. &lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;font color="#804040"&gt;&lt;/font&gt;&lt;/i&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Many a times you will see something as shown below when connecting to a web site over Windows integrated authentication. You may have checked all the basic settings for kerberos and things look okay, yet somehow mysteriously this is failing to work with kerberos. After three attempts it will fail with 401.&lt;/li&gt;&lt;/ul&gt;
&lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; You typed in &lt;b&gt;&lt;i&gt;&lt;u&gt;http://www.test.com&lt;/u&gt;&lt;/i&gt;&lt;/b&gt; in the browser and it seems to be connecting to some other machine&amp;nbsp;&amp;nbsp; name&amp;nbsp; as&amp;nbsp; shown below in the picture.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_8.png"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_thumb_3.png" style="border-width: 0px;" alt="image" mce_src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_thumb_3.png" width="472" border="0" height="434"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Look at the IE prompt which shows that we are trying to connect to testkrb.saurabh1.com although web site URL in the browser's address box shows we are trying to reach the site &lt;b&gt;&lt;i&gt;www.test.com&lt;/i&gt;&lt;/b&gt;. Ideally we should have seen "Connecting to www.test.com" and not "connecting to testkrb.saurabh1.com". Equivalently try a ping to &lt;b&gt;&lt;i&gt;www.test.com&lt;/i&gt;&lt;/b&gt; and see what it resolves to.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_6.png"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_thumb_2.png" style="border-width: 0px;" alt="image" mce_src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/2e48434f7ed2_14212/image_thumb_2.png" width="507" border="0" height="108"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;If you see such a scenario it's time to check whether the web site URL is an Alias(CNAME) or a DNS Host (A) Record. There is a known issue with using Alias for a site which may not allow kerberos to work. There are some details which I don't want to get into at this point, probably some other day. In short, it tries to look into the KDC based on the SPN &lt;b&gt;&lt;i&gt;http/testkrb.saurabh1.com&lt;/i&gt;&lt;/b&gt; and not an SPN of the form &lt;b&gt;&lt;i&gt;http/www.test.com&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Solution: &lt;/p&gt;
&lt;p&gt;Server side: Either go ahead and change the DNS entry to add &lt;b&gt;&lt;i&gt;www.test.com&lt;/i&gt;&lt;/b&gt; as a DNS Host (A) Record and not CNAME.&lt;/p&gt;
&lt;p&gt;or, &lt;/p&gt;
&lt;p&gt;Client side: Apply this &lt;a href="http://support.microsoft.com/kb/911149" target="_blank" mce_href="http://support.microsoft.com/kb/911149"&gt;hotfix&lt;/a&gt; to IE browser on the client(s) (I don't see this as a good option).&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I would recommended to use a host name instead of an IP address to access a web site meant for a kerberos based authentication. You may see it working just fine even with IP address in some scenarios but then it may pose problems when we have client and servers in different domains etc. You may get into an issue wherein domain2 will not give any referral back to to the client to look into domain1 for the SPN. This can occur if IP address is being used to look for a service. In such a case even after adding SPN's for IP addresses, Kerberos won't work and will fall back to NTLM.&lt;/li&gt;&lt;/ul&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If your web site is configured to use a non-default HTTP port like 81 instead of 80, users will access the site as &lt;b&gt;&lt;i&gt;&lt;u&gt;http://www.test.com:81&lt;/u&gt;&lt;/i&gt;&lt;/b&gt; and not &lt;b&gt;&lt;i&gt;&lt;u&gt;http://www.test.com&lt;/u&gt;&lt;/i&gt;&lt;/b&gt; (browsers append ':80' as the default port if none specified). Here lies the confusion when you add SPNs for the web site. Don't have an SPN with the port number appended even if you are running your site on a non-default port.&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;If the site is accessed as &lt;u&gt;&lt;b&gt;&lt;i&gt;http://&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;www.test.com:8&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;080&lt;/i&gt;&lt;/b&gt;&lt;/u&gt; SPN will still be of the form &lt;b&gt;&lt;i&gt;http/www.test.com&lt;/i&gt;&lt;/b&gt;&amp;nbsp; and&amp;nbsp; not &lt;b&gt;&lt;i&gt;http/www.test.com:8080&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Refer to this &lt;a href="http://technet.microsoft.com/en-us/library/cc263449.aspx#section4" target="_blank" mce_href="http://technet.microsoft.com/en-us/library/cc263449.aspx#section4"&gt;article&lt;/a&gt;. It confuses me further but I would suggest go ahead with the default as above.&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consider a scenario wherein two applications &lt;i&gt;&lt;b&gt;&lt;u&gt;http://servername/app1&lt;/u&gt;&lt;/b&gt;&lt;/i&gt; and &lt;b&gt;&lt;i&gt;&lt;u&gt;http://servername/app2&lt;/u&gt;&lt;/i&gt;&lt;/b&gt; are running under a NETWORK SERVICE &amp;amp; a domain user Application Pool identities respectively .&lt;br&gt;The SPNs requested will be &lt;i&gt;&lt;b&gt;http/servername&lt;/b&gt;&lt;/i&gt; in both the cases, and since we can’t have duplicate SPNs; kerberos&amp;nbsp;may not&amp;nbsp;work for either of the applications. We need to then either use the same Application Pool identity or separate host headers for the web sites and set SPNs accordingly. NOTE: This issue is taken care of in IIS 7.0 with Kernal mode authentication. 
&lt;p&gt;Again,if you are using two web sites with same name but different ports like &lt;b&gt;&lt;i&gt;&lt;u&gt;http://servername:81&lt;/u&gt;&lt;/i&gt;&lt;/b&gt; and &lt;i&gt;&lt;b&gt;&lt;u&gt;http://servername:82&lt;/u&gt;&lt;/b&gt;&lt;/i&gt;; by default IE will request a ticket for the same SPN &lt;b&gt;&lt;i&gt;HTTP/servername&lt;/i&gt;&lt;/b&gt;. 
&lt;/p&gt;&lt;p&gt;We would then need an hotfix for the client machines, Refer to &lt;a href="http://support.microsoft.com/kb/908209" target="_blank" mce_href="http://support.microsoft.com/kb/908209"&gt;this&lt;/a&gt;. 
&lt;/p&gt;&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;When do we have Duplicate SPNs leading to kerberos not working? &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Duplicate SPN arises from the fact that the same SPN is mapped to multiple accounts, it may be a machine or an user account. Doesn't matter. Mapping to multiple accounts will lead to duplicate SPNs!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;*Remember: You can have multiple different SPNs registered under the same account but not vice-versa, i.e. you should *not* have the same SPN registered under multiple accounts.&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;IIS uses NTLM credentials when accessing a resource for a local request coming to it (i.e. client say IE, and IIS are on the same box). It may use Kerberos or NTLM from a separate client machine depending on the setup.The best way to check if delegation is working is from a client machine which is not same as the IIS server. NTLM doesn't support delegation. Kerberos does!&lt;/li&gt;&lt;/ul&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At times making sure all the settings on the client, IIS, AD, back-end (if any) to make kerberos work properly doesn't help, and in such cases make sure that we purge all the kerberos tickets using Klist or Kerbtray on the client. In fact if possible logoff and re-login to the client machine from where you are testing the web application for kerberos authentication so that the client is issued a fresh ticket.&lt;/li&gt;&lt;/ul&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;*Check the following &lt;a href="http://blogs.msdn.com/saurabh_singh/archive/tags/Kerberos/default.aspx" target="_blank" mce_href="http://blogs.msdn.com/saurabh_singh/archive/tags/Kerberos/default.aspx"&gt;link&lt;/a&gt; for my other posts related to Kerberos.&lt;/p&gt;
&lt;p&gt;Till next time...&lt;img src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/martini.gif" alt="Martini Glass" mce_src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/martini.gif"&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9102793" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Kerberos/default.aspx">Kerberos</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>How to achieve a feature similar to single logon for multiple web applications using Basic authentication</title><link>http://blogs.msdn.com/saurabh_singh/archive/2007/08/09/single-logon-for-multiple-web-applications-using-basic-authentication.aspx</link><pubDate>Fri, 10 Aug 2007 01:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4314728</guid><dc:creator>Saurabh Singh</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/saurabh_singh/comments/4314728.aspx</comments><wfw:commentRss>http://blogs.msdn.com/saurabh_singh/commentrss.aspx?PostID=4314728</wfw:commentRss><wfw:comment>http://blogs.msdn.com/saurabh_singh/rsscomments.aspx?PostID=4314728</wfw:comment><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is something which I recently figured out. This may be very simple to&amp;nbsp;many but thought&amp;nbsp;of sharing it for a wider audience.&amp;nbsp; 
&lt;P&gt;Let's say you have two ASP.Net web applications running on two different servers.&lt;BR&gt;Now, assuming you have a constraint wherein you cannot use Windows integrated authentication (in cases where in you have some JSP application running on Websphere and another Asp.Net app on IIS server or any multi-platform scenarios), and you want to access the 2nd web app internally from the 1st web app for authenticated users. Now since you cannot use windows integrated authentication (e.g. Websphere doesn't support windows integrated authentication) the only option is to use Basic authentication which is supported across multiple platforms. 
&lt;P&gt;So here Windows integrated and anonymous authentication are out of picture and you are left with Basic authentication. Now if you want to access the 2nd Web app internally from the 1st web app and since both are configured for Basic authentication what will you do. IIS prompts for basic authentication and since you are trying to access it internally from the 1st web app you may get into issues wherein IIS will throw 401 Unauthorized error. 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1st Web app&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ---&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 2nd Web app&amp;nbsp;&lt;BR&gt;(Basic Authentication)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Basic Authentication) 
&lt;P&gt;Had Windows integrated authentication been supported we could have gone ahead with Kerberos but now that is out of picture. 
&lt;P&gt;This is what I figured out. If a user is authenticated using basic authentication, an Authorization header is passed (after user enters the credentials and is authenticated) to the server as part of the request header. Now this header will remain the same for a combination of username and password. Web server recognizes the future requests for the same user using the same header. 
&lt;P&gt;Now if you try to call the 2nd web app URL through the 1st web app using &lt;EM&gt;httpwebrequest&lt;/EM&gt; you will get 401 unauthorized. This is because the web request from the 1st web app does not send the Basic authentication token to the destination by default. It sends a new request to the 2nd web app and since 2nd web app is configured for basic authentication only and no anonymous authentication it will fail with 401. 
&lt;P&gt;To avoid getting into such issues you can modify your code in the 1st web app such that it also appends the Authorization header (which it gets during the first basic authentication done by the 1st server) along with the new http request to the 2nd web app (now all this assuming the user is allowed to access both the websites on both the servers). 
&lt;P&gt;Here is code snippet on the 1st web app which calls the 2nd web app internally. 
&lt;P&gt;Default.aspx&lt;BR&gt;==============&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_1.png" mce_href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_1.png" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=328 alt=image src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb_1.png" width=909 border=0 mce_src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Default.aspx.cs&lt;BR&gt;===============&lt;BR&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_3.png" mce_href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_3.png" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=250 alt=image src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb_3.png" width=818 border=0 mce_src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Assuming web app2 being&amp;nbsp;&lt;A href="http://shrek:8080/default.aspx" mce_href="http://shrek:8080/default.aspx"&gt;http://shrek:8080/default.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Here is the error thrown on the browser: 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image.png" mce_href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image.png" atomicselection="true"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=437 alt=image src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb.png" width=876 border=0 mce_src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb.png"&gt;&lt;/A&gt; 
&lt;P&gt;Now try adding the following lines and browse to the page in web app1. You should be able to access the web app2 without any issues. 
&lt;P&gt;Default.aspx.cs&lt;BR&gt;=============== 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_4.png" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=399 alt=image src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb_4.png" width=813 border=0 mce_src="http://blogs.msdn.com/blogfiles/saurabh_singh/WindowsLiveWriter/691103fa9d55_221D/image_thumb_4.png"&gt;&lt;/A&gt; 
&lt;P&gt;If you notice we are resending the authorization header that we got during the 1st web app authentication process. The same authorization header when accessing the 2nd web app nullifies the requirement for a new authentication handshake between IIS and the its client request. If we did not pass the authorization header to the 2nd web request IIS has to renegotiate a new authentication process with its client in order to get the necessary credentials for allowing access to its contents. Thereby throwing error 401 in our case since we are calling the 2nd web app internally in the code. The above scenario can work for N number of websites which can easily be greater than 2. 
&lt;P&gt;Do remember to add resp.close() and reader.close() in the above code section at the end. 
&lt;P&gt;If IIS is&amp;nbsp;configured for basic authentication only it will look for Basic Authorization header before serving the request. 
&lt;P&gt;Also remember if you use just a response.redirect from 1st web app to 2nd web app it will work just fine but you will be prompted twice for basic authentication. This is because you get&amp;nbsp;prompted for credentials the first time when you access the 1st web app and then again&amp;nbsp;when a new request is sent for the 2nd web app&amp;nbsp;through response.redirect it doesn't have the authorization header by default (Remember response.redirect cause a new request to be sent to the server from the&amp;nbsp;client's end). So IIS again prompts you for credentials. 
&lt;P&gt;If it doesn't find an authorization header it will send a 401 response back asking the client to resend the request with a valid authorization header. Here above we are adding an authorization header along with the request in the first place so that IIS need not send 401 response. 
&lt;P&gt;***Basic authentication sends credentials in clear text and is base64 encoded. So it can be easily decoded by a &lt;A href="http://www.webopedia.com/TERM/S/sniffer.html" mce_href="http://www.webopedia.com/TERM/S/sniffer.html"&gt;sniffer&lt;/A&gt;. So its recommended to use SSL with basic authentication.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4314728" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Basic+Authentication/default.aspx">Basic Authentication</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Code+Sample/default.aspx">Code Sample</category></item><item><title>Troubleshooting Anonymous authentication failures in IIS</title><link>http://blogs.msdn.com/saurabh_singh/archive/2007/07/01/troubleshooting-anonymous-authentication-failures-in-iis.aspx</link><pubDate>Sun, 01 Jul 2007 21:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3645776</guid><dc:creator>Saurabh Singh</dc:creator><slash:comments>20</slash:comments><comments>http://blogs.msdn.com/saurabh_singh/comments/3645776.aspx</comments><wfw:commentRss>http://blogs.msdn.com/saurabh_singh/commentrss.aspx?PostID=3645776</wfw:commentRss><wfw:comment>http://blogs.msdn.com/saurabh_singh/rsscomments.aspx?PostID=3645776</wfw:comment><description>&lt;p&gt;Recently&amp;nbsp;I was checking MSDN and KBs for a quick check on troubleshooting anonymous authentication, and sadly&amp;nbsp;I could not find a single article devoted to it (that's strictly my personal experience). We often get&amp;nbsp;calls on&amp;nbsp;issues related to Anonymous authentication failures&amp;nbsp;and this is something which I feel a&amp;nbsp;user can fix&amp;nbsp;oneself without requiring our support.&amp;nbsp;My aim in this post is to ensure people have a good troubleshooting strategy&amp;nbsp;for anonymous authentication failures.&lt;/p&gt;
&lt;p&gt;As with all my posts I won't get into much of concept building stuffs here on anonymous authentication in IIS; reason again being the same, you will find tonnes of articles on the Net talking about it and I don't want to be another one.&lt;/p&gt;
&lt;p&gt;So in brief Anonymous authentication in IIS is a type of access wherein any user can freely access the site. It's like a public website open to all. &lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So let's get started....&lt;/p&gt;
&lt;p&gt;Anonymous authentication uses a&amp;nbsp;local or domain account when user tries to access a webpage in IIS (By default it is of the form IUSR_&amp;lt;machinename&amp;gt;).&lt;/p&gt;
&lt;p&gt;All the webpages which have anonymous authentication will use an account in order to access a page, and depending upon whether the account has permission or not the page will be rendered. Typically if anonymous authentication fails, you will see 401.1 in the error page shown by IIS. This means that Anonymous user account for that page doesn't have necessary permissions to&amp;nbsp;the page or else some other settings like Domain or local policy is restricting the access.&lt;/p&gt;
&lt;p&gt;If you have set only anonymous authentication for your web resource (that means no other authentication like Windows integrated or Basic ), and it fails then you will be shown 401.1 directly without any challenge which&amp;nbsp;generally prompts to enter credentials.&lt;/p&gt;
&lt;p&gt;Wanna know how IIS negotiates an authentication, check &lt;a href="http://support.microsoft.com/kb/264921/en-us" title="How IIS authenticates browser clients" mce_href="http://support.microsoft.com/kb/264921/en-us"&gt;this&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;If you want to check the anonymous username being used for a website or a virtual directory, type in this command at the following location:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;cscript.exe adsutil.vbs get w3svc/anonymoususername&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;or, &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;&lt;/b&gt;cscript.exe adsutil.vbs get w3svc/&amp;lt;Website Identifier&amp;gt;/Anonymoususername&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;or, &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;&lt;/b&gt;cscript.exe adsutil.vbs get w3svc/&amp;lt;Website Identifier&amp;gt;/&amp;lt;Virtual directory&amp;gt;/anonymoususername&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;[If you get the result like: &lt;i&gt;The parameter "anonymoususername" is not set at this node&lt;/i&gt;, it means it is inheriting the settings from its parent level.]&lt;/p&gt;
&lt;p&gt;If you want to check where all Anonymous username is set at a webserver level, you can type in:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;&lt;/b&gt;cscript.exe adsutil.vbs&amp;nbsp;find anonymoususername&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Typically the Anonymous username is in the form of IUSR_&amp;lt;machinename&amp;gt;, wherein machinename is the server name.&lt;/p&gt;
&lt;p&gt;Although you can set it to a different value by manually changing it. It can be a local account to the server or a domain account.&lt;/p&gt;
&lt;p&gt;A&amp;nbsp;caveat here, it's a security risk if you make anonymous username as part of an Administrator group (remember it allows access to everyone on the net without&amp;nbsp;asking&amp;nbsp;for credentials).&lt;/p&gt;
&lt;p&gt;To set an anonymous username at a website level, you can type in:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;&lt;/b&gt;cscript.exe adsutil.vbs set w3svc/anonymoususername &amp;lt;your desired username&amp;gt; &lt;/b&gt;(Remember to include quotes around the username). [This setting is at the global level, i.e. for all the websites in the server provided you don't manually override the settings at a specific website or Virtual directory level]&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;cscript.exe adsutil.vbs set w3svc/&amp;lt;Website Identifier&amp;gt;/anonymoususername &amp;lt;your desired username&amp;gt; &lt;/b&gt;[At a specific website level]&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;cscript.exe adsutil.vbs set w3svc/&amp;lt;Website Identifier&amp;gt;/&amp;lt;Virtual directory&amp;gt;/anonymoususername &amp;lt;your desired username&amp;gt;&amp;nbsp;&lt;/b&gt; [At a specific Virtual directory level in a specific website]&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I will move forward with specific issues one by one:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Anonymous user account is locked out:&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Ensure that the account is not locked, disabled or expired.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Password Synchronization issues&lt;/u&gt;:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I have seen a lot of&amp;nbsp;support calls&amp;nbsp;(I mean a LOT) where password synchronization has been the issue, and this is very very simple to fix.&lt;/p&gt;
&lt;p&gt;Anonymous username's password are stored in two places in IIS 6.0: In the IIS metabase and in the SAM database.&lt;/p&gt;
&lt;p&gt;If the password at these places are not synchronized (not same), anonymous authentication will fail. They have to be same.&lt;/p&gt;
&lt;p&gt;So do this as the first step in troubleshooting:&lt;/p&gt;
&lt;p&gt;1) Find out how many places we have the anonymousername set by following&amp;nbsp;the command&amp;nbsp;I mentioned above. Here I mention it again:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;&lt;/b&gt;cscript.exe adsutil.vbs&amp;nbsp;find anonymoususername&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;2) If you have it set at multiple places, find out the specific site you are having problem with. Check the anonymous username for it and then check the password. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;&lt;/b&gt;cscript.exe adsutil.vbs get w3svc/&amp;lt;Website Identifier&amp;gt;/anonymoususerpass&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;[You may find the password in encrypted format like ************. In such a case you need to modify the adsutil.vbs file to get the exact password. Open Adsutil.vbs in notepad from the above location and search for the function "IsSecureProperty(ObjectParameter,MachineName)".&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;In this function IsSecureProperty(ObjectParameter,MachineName), you will find the following code:&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Function IsSecureProperty(ObjectParameter,MachineName) &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;On Error Resume Next&lt;br&gt;Dim PropObj,Attribute&lt;br&gt;Set PropObj = GetObject("IIS://" &amp;amp; MachineName &amp;amp; "/schema/" &amp;amp; ObjectParameter)&lt;br&gt;If (Err.Number &amp;lt;&amp;gt; 0) Then&lt;br&gt;ReportError ()&lt;br&gt;WScript.Echo "Error trying to get the property: " &amp;amp; err.number&lt;br&gt;WScript.Quit (Err.Number)&lt;br&gt;End If&lt;br&gt;Attribute = PropObj.Secure&lt;br&gt;If (Attribute = True) Then&lt;br&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;IsSecureProperty = True&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;--------&lt;br&gt;&lt;/b&gt;Else&lt;br&gt;IsSecureProperty = False&lt;br&gt;End If&lt;br&gt;End Function&lt;/i&gt; 
&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;In the highlighted line above, change the value to False, save&amp;nbsp;and now rerun the adsutil.vbs command and you should see the actual password]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;or if you have it set at the&amp;nbsp;global level only,&amp;nbsp;check this:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&amp;lt;Systemdrive&amp;gt;\Inetpub\Adminscripts&amp;gt;&lt;/b&gt;cscript.exe adsutil.vbs get w3svc/anonymoususerpass&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Copy the password from here and go to Computer management-&amp;gt;System Tools-&amp;gt;Local Users and Groups-&amp;gt;Users&lt;/p&gt;
&lt;p&gt;You should find the username (By&amp;nbsp;default, IUSR_&amp;lt;machinename&amp;gt;&amp;nbsp;is used by IIS)&amp;nbsp;[Unless you have Domain controller and Web server running on the same box.&amp;nbsp;In such a case you need to look for the domain user name under Active Directory Users and Computers. I will talk about DC and IIS&amp;nbsp;running on the same box later, this is really important!]&lt;/p&gt;
&lt;p&gt;Change the password for Username (or, IUSR_&amp;lt;machinename&amp;gt;), by pasting the password that you got from metabase.&lt;/p&gt;
&lt;p&gt;Ideally, if the&amp;nbsp;issue was with Password synchronization your&amp;nbsp;problem should get resolved at this point :) If not, then move on....&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;NTFS permission for the requested web resource:&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;NTFS permissions not set properly for the content can also cause 401.1 (although you should typically see 401.3 Access denied due to ACL). Ensure that the page we are trying to access has necessary NTFS permissions for Anonymous username (or the group that anonymous username belongs to). Ensure that Anonymous user account is part of the Users group.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Policy settings:&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;If your issue did not get resolved by Password synchronization, then Local security policy (or, Domain security policy) can be a very probable reason. Please follow the following articles religiously.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/812614/en-us" mce_href="http://support.microsoft.com/kb/812614/en-us"&gt;Default permissions and user rights for IIS 6.0 &lt;/a&gt;&amp;nbsp;(IIS 6.0)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/271071/en-us" mce_href="http://support.microsoft.com/kb/271071/en-us"&gt;How to set required NTFS permissions and user rights for an IIS 5.0 Web server &lt;/a&gt;(IIS 5.x)&lt;/p&gt;
&lt;p&gt;Check this too.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/909887/en-us" mce_href="http://support.microsoft.com/kb/909887/en-us"&gt;Error message when you try to view a Web site that is hosted on Internet Information Server 6.0 by using anonymous access: "401.1 Unauthorized: Logon failed" &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Typical reasons being:&lt;/p&gt;
&lt;p&gt;- Anonymous username being a part of Guests group (During IIS installation, IUSR_&amp;lt;machinename&amp;gt; is added to the Guests group by default), and Guests group being denied access to some web folders and/or&amp;nbsp;denied access because&amp;nbsp;of&amp;nbsp;local/domain policy).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Suggestion:&lt;/b&gt;&lt;/i&gt; Make sure that either you remove the anonymous username from the Guests group and/or&amp;nbsp;remove&amp;nbsp;the Anonymous username from any of the Deny policy settings (You can do this by going to the Local Security policy-&amp;gt;Local Policies-&amp;gt; User rights assignment).&lt;/p&gt;
&lt;p&gt;- The account is corrupted because of some reason like corrupted SID, moving the server from one domain to another&amp;nbsp;etc.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Suggestion:&lt;/i&gt;&lt;/b&gt; First try adding the Anonymous username to the Administrators group to check whether you can access the web page or not. If it works it means it's an issue most likely with the permission for that account. If it still does not work, then there is some thing wrong..may be Policy settings or a corrupted account. Change the Anonymous user account to a different account and see if it works (be sure to make that account part of IIS_WPG group). If it works then it's a corrupted&amp;nbsp;account.&amp;nbsp;Recreate the IUSR and IWAM accounts (you can recreate by deleting existing IUSR_machine and IWAM _machine and then doing an IISRESET. IISRESET will recreate the IUSR and IWAM accounts for you) or manually creating a new user.&lt;/p&gt;
&lt;p&gt;- Check this &lt;a href="http://support.microsoft.com/kb/922730/en-us" mce_href="http://support.microsoft.com/kb/922730/en-us"&gt;The account that is used for anonymous access may be unexpectedly locked out in IIS 6.0 or in IIS 5.0 &lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;At times you may see that HTML pages are running fine but not ASP pages. They might throw error like 401.3 etc. Check whether Users group has permission on ASP.dll at the &amp;lt;systemdrive&amp;gt;\wind*\system32\inetsrv folder.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Account Lockout:&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Now something that creates confusion among a lot of people. At times people see their anonymous account getting locked intermittently and there seems to be no valid explanations for it. &lt;/p&gt;
&lt;p&gt;&lt;u&gt;Scenario&lt;/u&gt;: You have set anonymous username at multiple levels in&amp;nbsp;IIS. &lt;/p&gt;
&lt;p&gt;Let's say you have different usernames at the following level:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Global Web Sites level&lt;/i&gt;&amp;nbsp; {IUSR_m1}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;i&gt;Website 1&lt;/i&gt;&amp;nbsp;&amp;nbsp; {IUSR_m2}&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;i&gt;VD1&lt;/i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{IUSR_m3}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;VD2&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {IUSR_m2}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;VD3&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {IUSR_m2}&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Website 2&lt;/i&gt;&amp;nbsp; {IUSR_m2}&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Now,&amp;nbsp;let's assume you have different passwords at&amp;nbsp;different levels. Now in the SAM database you can have only one instance of an account and hence only one password for it. Let's say you accidentally change the password for IUSR_m2 in the metabase at Website1 -&amp;gt;VD2 level and forget to change the password at the Website1, Website1-&amp;gt;VD3&amp;nbsp;and/or Website2 level. Now since the password has to match in the SAM metabase too, only one of these will work. Also by mistake a wrong password can be set at a given level.&lt;/p&gt;
&lt;p&gt;1) If you changed IUSR_m2's password in the SAM database to reflect Website1-&amp;gt;VD2, then Anonymous authentication works fine when you access a resource from Website1-&amp;gt;VD2. Although now, anonymous authentication will fail when you access&amp;nbsp;a resource&amp;nbsp;from any of Website1, Website1-&amp;gt;VD3&amp;nbsp;or Website2 levels.&lt;/p&gt;
&lt;p&gt;2) If you&amp;nbsp;have the IUSR_m2's password in the SAM metabase reflecting the&amp;nbsp;password set&amp;nbsp;at any of Website1, Website1-&amp;gt;VD3 and Website2 (assuming all of them have same password for simplicity sake), then anonymous authentication will&amp;nbsp;succeed when you access a resource from any of the above levels, but will fail when you access a resource from Website1-&amp;gt;VD2 level.&lt;/p&gt;
&lt;p&gt;Now most servers have an Account lockout policy after certain invalid logon attempts. So if&amp;nbsp;users try to access the Web resources from different levels, at one point of time because of multiple attempts Anonymous user account will get locked out and this will block access from all the levels irrespective of the matching passwords in Metabase and SAM database.&lt;/p&gt;
&lt;p&gt;So IUSR_m2 might get locked intermittently because of the above scenario and will give unpredictable results. That's why&amp;nbsp;I recommend to use a single Anonymous username at the global level only and let all the websites inherit from there,or else use completely distinct accounts at various levels (it again finally depends upon your requirement specific to the system).&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;IIS and Domain Controller (DC) on the same server:&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Also, if your IIS server is a DC then you need to check:&lt;/p&gt;
&lt;p&gt;&amp;lt;Anonymous useraccount&amp;gt;--&amp;gt;Properties--&amp;gt;Account--&amp;gt;Logon Hours..., [Ensure we have Logon Hours permitted for the account]&lt;/p&gt;
&lt;p&gt;and &amp;lt;Anonymous useraccount&amp;gt;--&amp;gt;Properties--&amp;gt;Account--&amp;gt;Log On To..., [Ensure we have Logon to the machine enabled]&lt;/p&gt;
&lt;p&gt;Please keep this &lt;a href="http://support.microsoft.com/kb/332097/en-us" title="DCPROMO does not retain permissions on some IIS folders" mce_href="http://support.microsoft.com/kb/332097/en-us"&gt;handy&lt;/a&gt; when you are troubleshooting issues on a DC for IIS authentication.&lt;/p&gt;
&lt;p&gt;Generally, DCs are very restricted when it comes to Permissions and access policies. Hence we have seen a lot of issues related to anonymous authentication failures on DCs.&amp;nbsp;Microsoft recommends not to use a machine both as a DC and an IIS server from Security and Performance perspective.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3645776" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Client Certificate revisited....How to troubleshoot client certificate related issues</title><link>http://blogs.msdn.com/saurabh_singh/archive/2007/06/09/client-certificate-revisited-how-to-troubleshoot-client-certificate-related-issues.aspx</link><pubDate>Sat, 09 Jun 2007 19:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3185914</guid><dc:creator>Saurabh Singh</dc:creator><slash:comments>20</slash:comments><comments>http://blogs.msdn.com/saurabh_singh/comments/3185914.aspx</comments><wfw:commentRss>http://blogs.msdn.com/saurabh_singh/commentrss.aspx?PostID=3185914</wfw:commentRss><wfw:comment>http://blogs.msdn.com/saurabh_singh/rsscomments.aspx?PostID=3185914</wfw:comment><description>&lt;p&gt;Well, I am back to Client certificate again, guess the reason being a lot of support calls that we getting off late&amp;nbsp;are related to any of the following four errors, especially the first two.&lt;/p&gt;
&lt;p&gt;403.7&lt;/p&gt;
&lt;p&gt;403.13&lt;/p&gt;
&lt;p&gt;403.16 &lt;/p&gt;
&lt;p&gt;403.17 ( I will cover .16 and .17 very briefly since they are very self-explanatory and easy to troubleshoot)&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/saurabh_singh/archive/2007/04/14/how-to-setup-iis-and-ad-for-client-certificate-setup-and-authentication.aspx" mce_href="http://blogs.msdn.com/saurabh_singh/archive/2007/04/14/how-to-setup-iis-and-ad-for-client-certificate-setup-and-authentication.aspx"&gt;Earlier I had discussed the setup of the client certificate with IIS and AD for authentication mapping etc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here I will discuss the troubleshooting strategies on client certificate related errors that are listed above.&lt;/p&gt;
&lt;p&gt;To understand how Client certificate is used while accessing a resource on the server, you may prefer to look at this&amp;nbsp;brief but&amp;nbsp;quite explanatory&amp;nbsp;KB by David Dietz&amp;nbsp;from IIS support.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/907274/en-us" title="http://support.microsoft.com/kb/907274/en-us" mce_href="http://support.microsoft.com/kb/907274/en-us"&gt;http://support.microsoft.com/kb/907274/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So here we go...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1) 403.7&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;We see that 403.7 can be thrown by IIS when Client certificate is required and the browser is not sending the client certificate details to the web server (IIS). Either the client did not send the certificate for some reason or else the client did not have a certificate issued by a CA that was also trusted by IIS server. If the client sends a certificate which is not mutually trusted by both client and the server you may see this error.&lt;/p&gt;
&lt;p&gt;You may get a meaningful error like this in the browser:&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;HTTP Error 403 403.7 Forbidden: &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;Client&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;certificate&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; required &lt;br&gt;This error occurs when the resource you are attempting to access requires your browser to have a &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;client&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; Secure Sockets Layer (SSL) &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;certificate&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; that the server recognizes. This is used for authenticating you as a valid user of the resource. &lt;br&gt;Please contact the Web server's administrator to obtain a valid &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;client&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;certificate&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;.&lt;/font&gt; &lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To start with, follow this KB &lt;a href="http://support.microsoft.com/kb/332077/en-us" title="http://support.microsoft.com/kb/332077/en-us" mce_href="http://support.microsoft.com/kb/332077/en-us"&gt;http://support.microsoft.com/kb/332077/en-us&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need to make sure that the client certificate is issued by a CA which is in the trusted root CA store on both the server and the client machine. Confirm whether the trusted root CA is part of CTL. The reason being that if your certificate's CA is not in the CTL; although present in the trusted root CA store in the server machine, you may still see the error.&lt;/li&gt;&lt;/ul&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A CTL is a list of trusted certification authorities (CAs) that can be used for client authentication for a particular Web site . You can use CTLs to configure your Web server to accept certificates from a specific list of CAs, and automatically verify client certificates against this list. Only users with a client certificate that is issued by a CA in the CTL can gain access to the server. &lt;br&gt;Each Web site on your server can be configured to accept certificates from a different CTL. You may want to do this if you need a different list of trusted CAs for each Web site. 
&lt;/p&gt;&lt;p&gt;If CTL is present, this is the&amp;nbsp;list which is actually used to check for CA's which can issue client certificate to a user. If it is disabled then root CA store will be used for the above. Also make sure that the certificate is a valid client certificate. Make sure it is intended for user authentication.&lt;/p&gt;
&lt;p&gt;Check the certificate for "Ensures the identity of a remote computer" and Enhanced Key usage says &lt;a&gt;Client&lt;/a&gt; Authentication.&lt;/p&gt;
&lt;p&gt;Also Using &amp;gt;Certutil -verify -urlfetch should show:&lt;/p&gt;
&lt;p&gt;Verified Application Policies:&lt;br&gt;1.3.6.1.5.5.7.3.2 Client Authentication&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You may also see 403.7 due to an update to the trusted Root CA list. This creates a list that&amp;nbsp;is too large based on the size limit we enforce, the result being truncation of the list when this is sent to the &lt;a&gt;client&lt;/a&gt; during the &lt;a&gt;client&lt;/a&gt;&amp;nbsp;&lt;a&gt;certificate&lt;/a&gt; handshake. The limit is based on data size not CA count so there is no way to say this happens at a certain count of trusted CA’s.&lt;br&gt;To resolve this we need to delete some of the expired and unused/unknown trusted root certificates from the Trusted Root Certification Authorities list until it is working again.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The problem can also be identified when the following entry is logged on the Web server. It is quite explanatory in itself.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;Event Type: Warning&lt;br&gt;Event Source: Schannel&lt;br&gt;Event Category: None&lt;br&gt;Event ID: 36885&lt;br&gt;Date: 2/9/2007&lt;br&gt;Time: 9:32:44 AM&lt;br&gt;User: N/A&lt;br&gt;Computer: USMASVGDOIM259&lt;br&gt;Description:&lt;br&gt;When asking for &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;client&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; authentication, this server sends a list of trusted &lt;br&gt;&lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;certificate&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; authorities to the &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;client&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;. The &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;client&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; uses this list to choose a &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;client&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;certificate&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; that is trusted by the server. Currently, this server trusts so many &lt;br&gt;&lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;certificate&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; authorities that the list has grown too long. This list has thus been &lt;br&gt;truncated. The administrator of this machine should review the &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;certificate&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;authorities trusted for &lt;/font&gt;&lt;a&gt;&lt;font color="#ff0000"&gt;client&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; authentication and remove those that do not really &lt;br&gt;need to be trusted.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Related articles:&lt;/p&gt;
&lt;p&gt;Trusted root certificates that are required by Windows Server 2003, by Windows XP, &lt;br&gt;and by Windows 2000&lt;br&gt;&lt;a href="http://support.microsoft.com/kb/293781" mce_href="http://support.microsoft.com/kb/293781"&gt;http://support.microsoft.com/kb/293781&lt;/a&gt;&lt;br&gt;931125 Microsoft root &lt;a&gt;certificate&lt;/a&gt; program members (January 2007)&lt;br&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;931125" mce_href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;931125"&gt;http://support.microsoft.com/default.aspx?scid=kb;EN-US;931125&lt;/a&gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2) 403.13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The error you may see in the browser will be as shown below:&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;HTTP 403.13 Forbidden: Client certificate revoked &lt;br&gt;The page requires a valid client certificate &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;For an understanding of this error message check KB 248058.&lt;/p&gt;
&lt;p&gt;This error message means that the client sent a certificate, but either the certificate shows up as revoked in the issuing authority's Certificate Revocation List or the server could not retrieve a CRL from the issuing authority.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need to crosscheck whether the client certificate is revoked or not with the respective CA. 
&lt;/li&gt;&lt;li&gt;If CA&amp;nbsp;confirms the certificate as valid and not revoked then the issue could be with IIS being unable to retrieve CRL from the CA.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;IIS , by default retrieves a CRL whenever it receives a client cert to make sure that cert is not revoked as long as local cache&amp;nbsp;is expired. For this it contacts the CA to get the CRL which is a list of revoked certificates and compares the list with the presented client cert. If for any reason it cannot retrieve the CRL, it will go ahead and throw error message as 403.13 even if cert is valid and not revoked.&amp;nbsp; This can happen in cases where some Proxy/firewall may block access to CDP to get the CRLs.&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If a CDP extension is present in a certificate that is part of the certification path, &lt;a&gt;IIS&lt;/a&gt; must be able to download at least one of the CRLs. If &lt;a&gt;IIS&lt;/a&gt; is unable to resolve the CRL, it returns the HTTP 403.13 error. In this case, we cannot access the above CDP so we fail. Prior to MS04-011 Win2k did not limit validation based on this. However, we now require that the CDP be reachable when validating a certificate chain.&lt;br&gt;To work around this we must either use a reachable CDP in the client certificate or disable CertCheckMode on the &lt;a&gt;IIS&lt;/a&gt; server, thus preventing it from doing any revocation checking.&lt;/p&gt;
&lt;p&gt;So, if we are getting Client certificate revoked errors, then check to see if the server can get to the CRL distribution point specified in the client certificate and if it can and is still giving this error, then download the Root and Subordinate CA CRLs and install&amp;nbsp;them on the IIS server so that it can get to it locally. 
&lt;/p&gt;&lt;p&gt;Also there is a metabase key in IIS called certcheckmode, which if disabled will stop IIS from trying to retrieve CRL&amp;nbsp;checking. In such a case client cert will be accepted even if the cert is revoked. Disabling CRL checking is a quick way to test the cause. &lt;/p&gt;
&lt;p&gt;The CertCheckMode property enables or disables Certificate Revocation List (CRL) checking. When CertCheckMode is set to a value greater than 0 (CertCheckMode&amp;gt;0), the CRL does not search for certificates that have been revoked. When CertCheckMode is equal to 0 (CertCheckMode=0), the CRL searches for certificates that have been revoked. 
&lt;/p&gt;&lt;p&gt;With CertCheckMode disabled, &lt;a&gt;IIS&lt;/a&gt; will no longer try to verify revocation of incoming client certificate requests. The client certificates will still need to be within their valid dates and still must be trusted by the &lt;a&gt;IIS&lt;/a&gt; server (the &lt;a&gt;IIS&lt;/a&gt;&amp;nbsp;server must trust the issuing CA). 
&lt;/p&gt;&lt;p&gt;We disable the Certcheckmode key by setting it to 1.&lt;/p&gt;
&lt;p&gt;&amp;gt;&lt;b&gt;C:\Inetpub\Adminscript\cscript.exe adsutil.vbs Set W3SVC&lt;/b&gt;&lt;a&gt;&lt;b&gt;&lt;font color="#000000"&gt;/&amp;lt;Website identifier&amp;gt;/CertCheckMode&lt;/font&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt; 1&lt;/b&gt;&amp;nbsp; 
&lt;/p&gt;&lt;p&gt;I had seen an interesting case where 2 of the websites were accepting the same client cert whereas another one was not accepting it on the same web server. 
&lt;/p&gt;&lt;p&gt;Checking the metabase.xml for the server showed this: 
&lt;/p&gt;&lt;p&gt;Non-Working site: 
&lt;/p&gt;&lt;p&gt;================= 
&lt;/p&gt;&lt;p&gt;&amp;lt;IIsWebServer Location ="/LM/W3SVC/690402" 
&lt;/p&gt;&lt;p&gt;AuthFlags="0" 
&lt;/p&gt;&lt;p&gt;LogPluginClsid="{FF160663-DE82-11CF-BC0A-00AA006111E0}" 
&lt;/p&gt;&lt;p&gt;SSLCertHash="8bcfc28e346bb9ec49374d87479021354349cf85" 
&lt;/p&gt;&lt;p&gt;SSLStoreName="MY" 
&lt;/p&gt;&lt;p&gt;SecureBindings="XX.XX.XX.X:443:" 
&lt;/p&gt;&lt;p&gt;ServerAutoStart="TRUE" 
&lt;/p&gt;&lt;p&gt;ServerBindings="XX.XX.XX.X:80:" 
&lt;/p&gt;&lt;p&gt;ServerComment="CDB" 
&lt;/p&gt;&lt;p&gt;&amp;gt; 
&lt;/p&gt;&lt;p&gt;&amp;lt;/IIsWebServer&amp;gt; 
&lt;/p&gt;&lt;p&gt;Working Site: 
&lt;/p&gt;&lt;p&gt;============= 
&lt;/p&gt;&lt;p&gt;&amp;lt;IIsWebServer Location ="/LM/W3SVC/90326589" 
&lt;/p&gt;&lt;p&gt;AuthFlags="0" 
&lt;/p&gt;&lt;p&gt;&lt;b&gt;CertCheckMode="1"&lt;/b&gt; 
&lt;/p&gt;&lt;p&gt;LogPluginClsid="{FF160663-DE82-11CF-BC0A-00AA006111E0}" 
&lt;/p&gt;&lt;p&gt;SSLCertHash="a640634e38ff20ebd8c29c32aae635e5575e57f6" 
&lt;/p&gt;&lt;p&gt;SSLStoreName="MY" 
&lt;/p&gt;&lt;p&gt;SecureBindings="XX.XX.XX.Y:443:"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;&lt;p&gt;ServerAutoStart="TRUE" 
&lt;/p&gt;&lt;p&gt;ServerBindings="XX.XX.XX.Y:80:wcdb" 
&lt;/p&gt;&lt;p&gt;ServerComment="WCDB" 
&lt;/p&gt;&lt;p&gt;&amp;gt; 
&lt;/p&gt;&lt;p&gt;&amp;lt;/IIsWebServer&amp;gt; 
&lt;/p&gt;&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Look at the difference between them. You see CertCheckMode is absent in the Non-working site, and absence of this key is equivalent to it being enabled. So once we put the CertCheckMode set to "1" for non-working site we should be able to resolve the issue. But this means that CRL chekcing is disabled. You may downlaod the CRL on to the server or else open up the relevant ports in order to allow CRL to be retrieved. 
&lt;/p&gt;&lt;p&gt;Check the KB 294305. 
&lt;/p&gt;&lt;p&gt;You may also check KB 841632 if IIS 5.0 is in picture. 
&lt;/p&gt;&lt;p&gt;There was an interesting case, where users were getting 403.13 even when client cert was not revoked and&amp;nbsp;we were able to access the get the CRL from the CDP for the client cert by accessing it through&amp;nbsp;a browser. Yet after a lot of tracing and monitoring we found that there was a 4-level hierarchy in the certificate chain, with let's say Root CA1 -&amp;gt;Subordinate Root CA2-&amp;gt;Subordinate Root CA3 -&amp;gt; Client certificate and one of the subordinate root CA's crl was not accessible. There are tools like certutil or SSLspy that can come handy. We ran certutil.exe -verify -urlfetch &amp;lt;location of the client cert.cer&amp;gt; on the IIS server and found that&amp;nbsp;CRL retrieval for&amp;nbsp;Subordinate&amp;nbsp;Root CA2 was failing, and hence the issue. 
&lt;/p&gt;&lt;p&gt;&lt;b&gt;So remember that we need to make sure that the CDPs for all the subordinate CAs certifcates in the chain should also be reachable.&lt;/b&gt; 
&lt;/p&gt;&lt;p&gt;Let's say for&amp;nbsp;my client certificate, the Certification path shows: 
&lt;/p&gt;&lt;p&gt;&lt;b&gt;Microsoft Corporate Root CA&lt;/b&gt; 
&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;Microsoft Corp Enterprise CA 2&lt;/b&gt; 
&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;Saurabh Singh&lt;/b&gt; 
&lt;/p&gt;&lt;p&gt;Here&amp;nbsp;is the information for certificate "&lt;i&gt;&lt;b&gt;Saurabh singh&lt;/b&gt;&lt;/i&gt;" 
&lt;/p&gt;&lt;p&gt;CRL Distribution Points (Under Details-&amp;gt;Field)&amp;nbsp;shows: 
&lt;/p&gt;&lt;p&gt;[1]CRL Distribution Point&lt;br&gt;Distribution Point Name:&lt;br&gt;Full Name:&lt;br&gt;URL=ldap:///CN=Microsoft%20Corp%20Enterprise%20CA%202(4),CN=CRL,CN=CDP,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=corp,DC=microsoft,DC=com?certificateRevocationList?base?objectClass=cRLDistributionPoint&lt;br&gt;URL=&lt;a href="http://corppki/crl/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crl" mce_href="http://corppki/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl"&gt;http://corppki/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl&lt;/a&gt;&lt;br&gt;URL=&lt;a href="http://crl.microsoft.com/pki/mscorp/crl/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crl" mce_href="http://crl.microsoft.com/pki/mscorp/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl"&gt;http://crl.microsoft.com/pki/mscorp/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;Authority Information Access shows: 
&lt;/p&gt;&lt;p&gt;[1]Authority Info Access&lt;br&gt;Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)&lt;br&gt;Alternative Name:&lt;br&gt;URL=&lt;a href="http://corppki/aia/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crt" mce_href="http://corppki/aia/Microsoft%20Corp%20Enterprise%20CA%202(4).crt"&gt;http://corppki/aia/Microsoft%20Corp%20Enterprise%20CA%202(4).crt&lt;/a&gt;&lt;br&gt;[2]Authority Info Access&lt;br&gt;Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)&lt;br&gt;Alternative Name:&lt;br&gt;URL=&lt;a href="http://www.microsoft.com/pki/mscorp/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crt" mce_href="http://www.microsoft.com/pki/mscorp/Microsoft%20Corp%20Enterprise%20CA%202(4).crt"&gt;http://www.microsoft.com/pki/mscorp/Microsoft%20Corp%20Enterprise%20CA%202(4).crt&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;Here&amp;nbsp;is the information for certificate&amp;nbsp; "&lt;i&gt;&lt;b&gt;Microsoft Corp Enterprise CA 2&lt;/b&gt;&lt;/i&gt;": 
&lt;/p&gt;&lt;p&gt;CRL Distribution Points (Under Details-&amp;gt;Field)&amp;nbsp;shows: 
&lt;/p&gt;&lt;p&gt;[1]CRL Distribution Point&lt;br&gt;Distribution Point Name:&lt;br&gt;Full Name:&lt;br&gt;URL=&lt;a href="http://corppki/crl/mscrca.crl" mce_href="http://corppki/crl/mscrca.crl"&gt;http://corppki/crl/mscrca.crl&lt;/a&gt;&lt;br&gt;URL=&lt;a href="http://crl.microsoft.com/pki/mscorp/crl/mscrca.crl" mce_href="http://crl.microsoft.com/pki/mscorp/crl/mscrca.crl"&gt;http://crl.microsoft.com/pki/mscorp/crl/mscrca.crl&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;Authority Information Access shows: 
&lt;/p&gt;&lt;p&gt;[1]Authority Info Access&lt;br&gt;Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)&lt;br&gt;Alternative Name:&lt;br&gt;URL=&lt;a href="http://corppki/aia/mscrca.crt" mce_href="http://corppki/aia/mscrca.crt"&gt;http://corppki/aia/mscrca.crt&lt;/a&gt;&lt;br&gt;[2]Authority Info Access&lt;br&gt;Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)&lt;br&gt;Alternative Name:&lt;br&gt;URL=&lt;a href="http://www.microsoft.com/pki/mscorp/mscrca.crt" mce_href="http://www.microsoft.com/pki/mscorp/mscrca.crt"&gt;http://www.microsoft.com/pki/mscorp/mscrca.crt&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;Now runnning the Certutil.exe as shown below: 
&lt;/p&gt;&lt;p&gt;cmd prompt&amp;gt; certutil.exe -verify -urlfetch &lt;b&gt;cert.cer&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;-------the client certificate 
&lt;/p&gt;&lt;p&gt;Here is the output: 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;Issuer:&lt;br&gt;CN=Microsoft Corp Enterprise CA 2&lt;br&gt;Subject:&lt;br&gt;CN=Saurabh Singh&lt;br&gt;Cert Serial Number: 258a555c0004008b1c42 &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;dwFlags = CA_VERIFY_FLAGS_DUMP_CHAIN (0x40000000)&lt;br&gt;ChainFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT (0x40000000)&lt;br&gt;HCCE_LOCAL_MACHINE&lt;br&gt;CERT_CHAIN_POLICY_BASE&lt;br&gt;-------- CERT_CHAIN_CONTEXT --------&lt;br&gt;ChainContext.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)&lt;br&gt;ChainContext.dwRevocationFreshnessTime: 176 Days, 6 Hours, 5 Minutes, 17 Seconds &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;SimpleChain.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)&lt;br&gt;SimpleChain.dwRevocationFreshnessTime: 176 Days, 6 Hours, 5 Minutes, 17 Seconds &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;CertContext[0][0]: dwInfoStatus=102 dwErrorStatus=0&lt;br&gt;Issuer: CN=Microsoft Corp Enterprise CA 2&lt;br&gt;Subject: CN=Saurabh Singh&lt;br&gt;Serial: 258a555c0004008b1c42&lt;br&gt;Template: AutoEnrolled Client Auth&lt;br&gt;48 b7 48 da 00 51 21 77 b3 e1 3a ce 98 7d 35 2f b7 e8 0c 1c&lt;br&gt;Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)&lt;br&gt;Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)&lt;br&gt;---------------- Certificate AIA ----------------&lt;br&gt;Verified "Certificate (0)" Time: 1&lt;br&gt;[0.0] &lt;/font&gt;&lt;a href="http://corppki/aia/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crt" mce_href="http://corppki/aia/Microsoft%20Corp%20Enterprise%20CA%202(4).crt"&gt;&lt;font color="#8000ff"&gt;http://corppki/aia/Microsoft%20Corp%20Enterprise%20CA%202(4).crt&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;Verified "Certificate (0)" Time: 1&lt;br&gt;[1.0] &lt;/font&gt;&lt;a href="http://www.microsoft.com/pki/mscorp/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crt" mce_href="http://www.microsoft.com/pki/mscorp/Microsoft%20Corp%20Enterprise%20CA%202(4).crt"&gt;&lt;font color="#8000ff"&gt;http://www.microsoft.com/pki/mscorp/Microsoft%20Corp%20Enterprise%20CA%202(4).crt&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;---------------- Certificate CDP ----------------&lt;br&gt;Verified "Base CRL (821)" Time: 0&lt;br&gt;[0.0] ldap:///CN=Microsoft%20Corp%20Enterprise%20CA%202(4),CN=CRL,CN=CDP,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=corp,DC=microsoft,DC=com?certificateRevocationList?base?objectClass=cRLDistributionPoint &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;Verified "Base CRL (821)" Time: 0&lt;br&gt;[1.0] &lt;/font&gt;&lt;a href="http://corppki/crl/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crl" mce_href="http://corppki/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl"&gt;&lt;font color="#8000ff"&gt;http://corppki/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;Verified "Base CRL (821)" Time: 1&lt;br&gt;[2.0] &lt;/font&gt;&lt;a href="http://crl.microsoft.com/pki/mscorp/crl/Microsoft%20Corp%20Enterprise%20CA%202%284%29.crl" mce_href="http://crl.microsoft.com/pki/mscorp/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl"&gt;&lt;font color="#8000ff"&gt;http://crl.microsoft.com/pki/mscorp/crl/Microsoft%20Corp%20Enterprise%20CA%202(4).crl&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;---------------- Base CRL CDP ----------------&lt;br&gt;No URLs "None" Time: 0&lt;br&gt;--------------------------------&lt;br&gt;CRL 821:&lt;br&gt;Issuer: CN=Microsoft Corp Enterprise CA 2&lt;br&gt;fd 19 3c 2f 0c 24 ea 1c 4a 5d df c4 26 2a b0 1b 98 48 ef 99&lt;br&gt;Application[0] = 1.3.6.1.5.5.7.3.2 Client Authentication &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;CertContext[0][1]: dwInfoStatus=102 dwErrorStatus=0&lt;br&gt;Issuer: CN=Microsoft Corporate Root CA, O=Microsoft Corporation&lt;br&gt;Subject: CN=Microsoft Corp Enterprise CA 2&lt;br&gt;Serial: 610d1de0000000000019&lt;br&gt;Template: SubCA&lt;br&gt;17 0a 7b 9d 52 85 07 7e 74 1a f5 a0 6b db 05 78 9e bc f1 8d&lt;br&gt;Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)&lt;br&gt;Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)&lt;br&gt;---------------- Certificate AIA ----------------&lt;br&gt;No CRL "Certificate (0)" Time: 0&lt;br&gt;[0.0] &lt;/font&gt;&lt;a href="http://corppki/aia/mscrca.crt" mce_href="http://corppki/aia/mscrca.crt"&gt;&lt;font color="#8000ff"&gt;http://corppki/aia/mscrca.crt&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;No CRL "Certificate (0)" Time: 1&lt;br&gt;[1.0] &lt;/font&gt;&lt;a href="http://www.microsoft.com/pki/mscorp/mscrca.crt" mce_href="http://www.microsoft.com/pki/mscorp/mscrca.crt"&gt;&lt;font color="#8000ff"&gt;http://www.microsoft.com/pki/mscorp/mscrca.crt&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;---------------- Certificate CDP ----------------&lt;br&gt;Verified "Base CRL (18)" Time: 0&lt;br&gt;[0.0] &lt;/font&gt;&lt;a href="http://corppki/crl/mscrca.crl" mce_href="http://corppki/crl/mscrca.crl"&gt;&lt;font color="#8000ff"&gt;http://corppki/crl/mscrca.crl&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;Verified "Base CRL (18)" Time: 0&lt;br&gt;[1.0] &lt;/font&gt;&lt;a href="http://crl.microsoft.com/pki/mscorp/crl/mscrca.crl" mce_href="http://crl.microsoft.com/pki/mscorp/crl/mscrca.crl"&gt;&lt;font color="#8000ff"&gt;http://crl.microsoft.com/pki/mscorp/crl/mscrca.crl&lt;/font&gt;&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;---------------- Base CRL CDP ----------------&lt;br&gt;No URLs "None" Time: 0&lt;br&gt;--------------------------------&lt;br&gt;CRL 18:&lt;br&gt;Issuer: CN=Microsoft Corporate Root CA, O=Microsoft Corporation&lt;br&gt;0e 70 65 69 a7 4c f9 7d 9f 50 7b db 9c e1 b8 27 9e 53 ba f4 &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;CertContext[0][2]: dwInfoStatus=10c dwErrorStatus=0&lt;br&gt;Issuer: CN=Microsoft Corporate Root CA, O=Microsoft Corporation&lt;br&gt;Subject: CN=Microsoft Corporate Root CA, O=Microsoft Corporation&lt;br&gt;Serial: 443c2a54b59cd69d4c09b18a9b02eb55&lt;br&gt;d2 d3 8e ba 60 ca a1 c1 20 55 a2 e1 c8 3b 15 ad 45 01 10 c2&lt;br&gt;Element.dwInfoStatus = CERT_TRUST_HAS_NAME_MATCH_ISSUER (0x4)&lt;br&gt;Element.dwInfoStatus = CERT_TRUST_IS_SELF_SIGNED (0x8)&lt;br&gt;Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)&lt;br&gt;---------------- Certificate AIA ----------------&lt;br&gt;No URLs "None" Time: 0&lt;br&gt;---------------- Certificate CDP ----------------&lt;br&gt;No URLs "None" Time: 0&lt;br&gt;-------------------------------- &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;&lt;font color="#8000ff"&gt;Exclude leaf cert:&lt;br&gt;8a cf e9 23 e2 d7 cd d1 f0 bb 05 6e 63 b5 31 95 6e 46 0d ad&lt;br&gt;Full chain:&lt;br&gt;5b fa 04 32 34 21 49 11 92 56 b3 ee 41 94 b4 b8 f3 f6 44 f2&lt;br&gt;------------------------------------&lt;br&gt;Verified Issuance Policies: None&lt;br&gt;Verified Application Policies:&lt;br&gt;1.3.6.1.5.5.7.3.2 Client Authentication&lt;br&gt;Leaf certificate revocation check passed&lt;br&gt;CertUtil: -verify command completed successfully.&lt;/font&gt; 
&lt;/p&gt;&lt;p&gt;If you notice the Certutil.exe tries to check the CRL accessibility by accessing the CRL Distribution points.&amp;nbsp;The above command ouptput should give you an idea regarding the cause. You&amp;nbsp;may see an error in accessing the CRL in the output above in cases where you get the above errors. 
&lt;/p&gt;&lt;p&gt;Here is something similar when you get an error: 
&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;----------------&amp;nbsp; Certificate CDP&amp;nbsp; ----------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Failed "CDP" Time: 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error retrieving URL: The specified network resource or device is no longer available. 0x80070037 (WIN32: 55)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldap:///CN=CRL1, CN=xxxx, OU=xxxx, OU=xxxx. by ref. (limits liab.), O=xxxx, C=US?certificateRevocationList;binary,authorityRevocationList;binary,deltaRevocationList;binary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Failed "CDP" Time: 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error retrieving URL: The server name or address could not be resolved 0x80072ee7 (WIN32: 12007)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.some_company.net/CRL/net1.crl"&gt;&lt;font color="#0000ff"&gt;http://www.some_company.net/CRL/net1.crl&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; --------------------------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Application[0] = 1.3.6.1.5.5.7.3.4 Secure Email&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Application[1] = 1.3.6.1.5.5.7.3.1 Server Authentication&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Application[2] = 1.3.6.1.5.5.7.3.2 Client Authentication&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Application[3] = 1.3.6.1.5.5.7.3.3 Code Signing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;Exclude leaf cert:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; 14 4c 46 42 11 66 a4 a9 42 70 ad b6 e0 1e 23 ca d4 9b 24 0e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;Full chain:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; fe 37 4a cf 76 3e 01 14 21 a6 c7 25 35 14 97 e5 91 87 e3 b7&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Issuer: CN=A company, OU=&lt;st1:place w:st="on"&gt;&lt;st1:City w:st="on"&gt;PKI&lt;/st1:City&gt;, &lt;st1:State w:st="on"&gt;DC&lt;/st1:State&gt;&lt;/st1:place&gt;=company, DC=com&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Subject: OID.0.9.2342.19200300.100.1.1=ZALDI001, OU=People, OU=SAP, DC=company, DC=com&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; Serial: 42c550de&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp; 6e 33 5f 13 e1 67 ad 41 71 02 96 17 c7 57 c9 91 ea cb 1d 24&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;The revocation function was unable to check revocation because the revocation server was offline. 0x80092013 (-2146885613)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;------------------------------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;Revocation check skipped -- server offline&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;Cert is an End Entity certificate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;ERROR: Verifying leaf certificate revocation status returned The revocation function was unable to check revocation because the revocation server was offline. 0x80092013 (-2146885613)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;CertUtil: The revocation function was unable to check revocation because the revocation server was offline.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ensure that &lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif';"&gt;the necessary firewall/network configuration changes to allow the IIS server to access ALL of the external CDP’s listed in the client cert’s revocation chain, or&amp;nbsp;d&lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif';"&gt;ownload the CRL(s) to the IIS server manually and set CertCheckMode to MD_CERT_CACHE_RETRIEVAL_ONLY (see this link &lt;a href="http://technet2.microsoft.com/windowsserver/en/library/173427fd-eb90-44ef-8a9c-d7bb4ff41ab81033.mspx?mfr=true"&gt;http://technet2.microsoft.com/windowsserver/en/library/173427fd-eb90-44ef-8a9c-d7bb4ff41ab81033.mspx?mfr=true&lt;/a&gt; ).&amp;nbsp; That will tell IIS to look at the CRL in its local store and not try to attempt to access the CRL via the CDP entries specified in the client cert.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;One more confusing point that should be clarified here: 
&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;b&gt;If you have a certificate chain, let's say: Root CA -&amp;gt; Intermediate CA1 -&amp;gt; Intermediate CA2 -&amp;gt;..... -&amp;gt;&amp;lt;Your Client ceritficate&amp;gt;, then CRL checking will be done for all the Certificates in the hierarchy&amp;nbsp;except the Root CA.&lt;/b&gt;&lt;/i&gt; 
&lt;/p&gt;&lt;p&gt;If you are really interested to dig further as to how Certificate Revocation etc. works at a lower level, here is a real exhaustive link to check it out.&amp;nbsp; 
&lt;/p&gt;&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/af1e419e-ede5-8c4b-bf6e-1fb17658a99d.aspx" title="http://technet.microsoft.com/en-us/library/af1e419e-ede5-8c4b-bf6e-1fb17658a99d.aspx" mce_href="http://technet.microsoft.com/en-us/library/af1e419e-ede5-8c4b-bf6e-1fb17658a99d.aspx"&gt;http://technet.microsoft.com/en-us/library/af1e419e-ede5-8c4b-bf6e-1fb17658a99d.aspx&lt;/a&gt; 
&lt;/p&gt;&lt;h3&gt;&lt;b&gt;&lt;u&gt;Another issue that pops up from time to time is:&amp;nbsp;&lt;/u&gt;&lt;/b&gt; &lt;/h3&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;/b&gt;&lt;/i&gt;
&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;b&gt;"Choose a digital certificate"&lt;/b&gt;&lt;/i&gt; popup window in Internet Explorer is blank when attempting to use client certificates to authenticate against IIS. 
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;This can happen in situations as explained earlier too in cases where: &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The total size of the certificates in the Trusted Root Certification Authorities store on the IIS server was too large to send to the client. The list was truncated as a result. &lt;/p&gt;
&lt;p&gt;The following event was written to the System log:&lt;br&gt;&lt;font color="#ff0000"&gt;Event Type: Warning &lt;br&gt;Event Source: Schannel &lt;br&gt;Event ID: 36885 &lt;br&gt;Description: When asking for client authentication, this server sends a list of trusted certificate authorities to the client. The client uses this list to choose a client certificate that is trusted by the server. Currently, this server trusts so many certificate authorities that the list has grown too long. This list has thus been truncated. The administrator of this machine should review the certificate authorities trusted for client authentication and remove those that do not really need to be trusted.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;Resolution would be to Remove unused certificates from the Trusted Root Certification Authorities store on the IIS server, reducing the number of certificates.&amp;nbsp;&lt;/font&gt; 
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Also another cause may be when the any of the Subordinate CAs-&amp;gt;certificate-&amp;gt;Details-&amp;gt;Edit Properties button has Client Authentication disabled in the intended purposes. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Also this should be of help at times &lt;a href="http://support.microsoft.com/kb/285069/" title="http://support.microsoft.com/kb/285069/" mce_href="http://support.microsoft.com/kb/285069/"&gt;http://support.microsoft.com/kb/285069/&lt;/a&gt;&amp;nbsp; 
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Also if we have certificate trust list(CTL) enabled,&amp;nbsp;CTL that IIS sends&amp;nbsp;is what the client uses to know if it has a client cert it can use. 
&lt;/li&gt;&lt;li&gt;Also&amp;nbsp;there is a &amp;lt;12kb&amp;gt; limit on this and if the customer has applied the Trusted Root CA update, then we may not send the full list of trusted CA’s. Make sure that CA is in CTL as well as the size limit. You may want to revisit the article
&lt;a href="http://support.microsoft.com/kb/933430" title="KB" target="_blank" mce_href="http://support.microsoft.com/kb/933430"&gt;http://support.microsoft.com/kb/933430&lt;/a&gt;. Either install the hotfix if it
is applicable or try deleting/moving to other store some of the unused/junk CAs from
the Trusted Root Certificate Authority Store on the IIS server. That
could do the trick for you!&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Refer to one of our finest Escalation engineer&amp;nbsp;(Andreas&amp;nbsp;Klein)'s&amp;nbsp;blog which talks about limiting the list of CA's allowed for Client authentication, without&amp;nbsp;deleting the CAs from the store. 
&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/andrekl/archive/2005/04/19/409682.aspx" title="http://blogs.msdn.com/andrekl/archive/2005/04/19/409682.aspx" mce_href="http://blogs.msdn.com/andrekl/archive/2005/04/19/409682.aspx"&gt;http://blogs.msdn.com/andrekl/archive/2005/04/19/409682.aspx&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;Also while&amp;nbsp;you may&amp;nbsp;have the certificate in your personal store (using the mmc snap-in it shows up properly), you may not see it in the IE browser. If&amp;nbsp;you go through &lt;b&gt;Internet Options-&amp;gt;Content &lt;/b&gt;and click Certificates, it doesn’t show up at all. Open&amp;nbsp;the certificate MMC and check whether the cert has a Private key or not. 
&lt;/p&gt;&lt;p&gt;If the General tab on the cert properties does not say at the bottom that you have a Private Key corresponding to this cert then you don’t, and this may lead to the above problem.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;403.16 - Client certificate is untrusted or invalid. &lt;/b&gt;
&lt;/p&gt;&lt;p&gt;This error message is primarily generated when the certificate that the client provided is improperly formed. It can also be generated if there are intermediate certification authorities in the certificate chain that are not trusted by the Web server. 
&lt;/p&gt;&lt;p&gt;&lt;b&gt;403.17 - Client certificate has expired or is not yet valid &lt;/b&gt;
&lt;/p&gt;&lt;p&gt;This error message is fairly self-explanatory. It means that the current date on the server is not within the valid date ranges that are presented in the client certificate. You may also want to ensure that the client certificate and its issuing CAs (including Intermediate CAs) are not expired or invalid.&lt;br&gt; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3185914" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Client+Certificate/default.aspx">Client Certificate</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/SSL/default.aspx">SSL</category><category domain="http://blogs.msdn.com/saurabh_singh/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item></channel></rss>