<?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>Alik Levin's : Deployment Phase</title><link>http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx</link><description>Tags: Deployment Phase</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Use FREE Tools From IIS Resource Kit To Warm Up Your ASP.NET 1.1 Application By Batch Compilation</title><link>http://blogs.msdn.com/alikl/archive/2008/07/20/use-free-tools-from-iis-resource-kit-to-warm-up-your-asp-net-1-1-application-by-batch-compilation.aspx</link><pubDate>Sun, 20 Jul 2008 18:24:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8758682</guid><dc:creator>alikl</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8758682.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8758682</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8758682</wfw:comment><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Have you noticed that when ASP.NET web application is accessed for the first time the response is slow? The reason for such behavior is batch compilation that occurs on the first hit.&lt;/p&gt;  &lt;p&gt;ASP.NET batch compilation is the process of compiling ASP.NET markup (content of aspx files) into temporary dll’s. Compilation requires invoking compiler (csc.exe for C#) – that is pretty heavy activity. &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx" target="_blank"&gt;Process Explorer&lt;/a&gt; shows it clearly:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_2.png"&gt;&lt;img title="ASP.NET Batch compilation" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" alt="ASP.NET Batch compilation" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_thumb.png" width="550" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;ASP.NET batch compilation occurs on per folder basis. Said that, if your application divided into multiple sub-folders that contain ASP.NET pages each time any of the folders accessed for the first time the batch compilation is invoked.&lt;/p&gt;  &lt;p&gt;Note that starting with &lt;font color="#ff0000"&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163675.aspx" target="_blank"&gt;ASP.NET 2.0 compilation model&lt;/a&gt;&lt;/font&gt; has changed. Also, there is a tool &lt;a href="http://msdn.microsoft.com/en-us/library/ms229863(VS.80).aspx" target="_blank"&gt;Aspnet_compiler.exe&lt;/a&gt; that allows pre-compile your ASP.NET web application to improve performance.&lt;/p&gt;  &lt;h3&gt;Customer’s case study&lt;/h3&gt;  &lt;p&gt;Customer’s web application is built with ASP.NET 1.1. It is divided into multiple subfolders reflecting logical modules that are hosted across about 20 application pools. The application connects to Oracle database. &lt;/p&gt;  &lt;p&gt;QA team complains that the application responds slowly each time any of the modules (subfolders) accessed for the first time.&lt;/p&gt;  &lt;p&gt;Using Process Explorer and profiler we identified three main latency points:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Creating the application pool – w3wp.exe. &lt;/li&gt;    &lt;li&gt;Batch compiling the application for each subfolder. &lt;/li&gt;    &lt;li&gt;Creating Oracle connection pool when Oracle is accessed for the first time. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;The solution&lt;/h3&gt;  &lt;p&gt;We decided to create a Warmer – solution that will hit each subfolder’s page in unattended manner thus warming up the application before the first user hits it.&lt;/p&gt;  &lt;p&gt;For the solution we used free tools from &lt;font color="#ff0000"&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=56FC92EE-A71A-4C73-B628-ADE629C89499&amp;amp;displaylang=en" target="_blank"&gt;IIS resource&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt; kit:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en" target="_blank"&gt;LogPrser.exe&lt;/a&gt;&lt;/strong&gt; to identify the URL’s of the pages to hit. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/993a8a36-5761-448f-889e-9ae58d072c09.mspx?mfr=true" target="_blank"&gt;TinyGet.exe&lt;/a&gt;&lt;/strong&gt; to actually hit the pages identified by LogParser. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To identify what pages to hit we took IIS log files from QA environment and than we ran the following query using LogParser:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;LogParser.exe &amp;quot;SELECT DISTINCT STRCAT('XXX', cs-uri-stem) AS cs-uri-stem-strcat INTO 'C:\result.txt' FROM 'C:\yourIISlogFile.log' WHERE INDEX_OF(cs-uri-stem, 'aspx') &amp;gt; 0&amp;quot; -o:w3c&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Notice XXX – it has nothing to do with XXX rated content rather it is a placeholder to replace it with tinyget command.&lt;/p&gt;  &lt;p&gt;Open resulting yourIISlogFile.log file in Notepad, hit Ctrl+H for “Replace” and replace all occurrences of XXX with the following command:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;tinyget -srv:www.YourServer.com -uri:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_10.png"&gt;&lt;img title="ASP.NET Batch Compilation" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="193" alt="ASP.NET Batch Compilation" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_thumb_4.png" width="365" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;yourIISlogFile.log before the Replace:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_6.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="158" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_thumb_2.png" width="271" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;yourIISlogFile.log after the Replace:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_8.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ASP.1BatchCompilationWarmYourWebApplicat_11CE0/image_thumb_3.png" width="584" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Remove the header and save the file with BAT extension&amp;#160; - your Warmer is ready for action. Run it each time you deploy new version.&lt;/p&gt;  &lt;p&gt;Do not forget to remove old temporary files in ASP.NET temporary folder:&lt;/p&gt;  &lt;p&gt;C:\Windows\Microsoft.NET\Framework\&amp;lt;&amp;lt;NET FX VERSION&amp;gt;&amp;gt;\Temporary ASP.NET Files\&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;CAUTION&lt;/em&gt;.&lt;/strong&gt; This action may potentially corrupt your application if you do not provide proper exception handling. On one hand it is good check to make. on other hand – be aware of it and do not do it on production sites unless you are completely sure it will not corrupt the application.&lt;/p&gt;  &lt;h3&gt;Related materials&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx"&gt;Don’t run production ASP.NET Applications with debug=”true” enabled&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/tess/archive/2006/04/13/575364.aspx"&gt;ASP.NET Memory: If your application is in production… then why is debug=true&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/03/09/stress-test-asp-net-web-application-with-free-wcat-tool.aspx"&gt;Stress Test ASP.NET Web Application With Free WCAT Tool&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/04/21/free-performance-tool-analyze-iis-logs-like-a-pro-with-funnel-web-analyzer.aspx" target="_blank"&gt;Free Performance Tool - Analyze IIS Logs Like A Pro With Funnel Web Analyzer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/11/02/identify-asp-net-web-services-and-wcf-performance-issues-by-examining-iis-logs.aspx"&gt;Identify ASP.NET, Web Services, And WCF Performance Issues By Examining IIS Logs&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8758682" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Performance Sin - Chatty Database Access And Loops (Plus Another Free Performance Tool)</title><link>http://blogs.msdn.com/alikl/archive/2008/04/28/performance-sin-chatty-database-access-and-loops-plus-another-free-performance-tool.aspx</link><pubDate>Mon, 28 Apr 2008 15:31:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8435254</guid><dc:creator>alikl</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8435254.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8435254</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8435254</wfw:comment><description>&lt;p&gt;Chatty database access is the surefire way for slow performance caused by&amp;#160; resources starvation that might&amp;#160; even lead to denial of service. Following is a real world case.&lt;/p&gt;  &lt;h3&gt;Customer &lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/55f71614-ef1b-4015-b9c8-a42c1e700c25.mspx?mfr=true" target="_blank"&gt;Service Unavailable&lt;/a&gt; message is consistently observed when there are more than 150 users access the web site. We think IIS cannot handle more than 150 users. What would you suggest?&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Support&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;Let's see what &amp;quot;Service Unavailable&amp;quot; means. &amp;quot;IIS cannot start any new worker processes because of limited system resources...&amp;quot;. Let's see the code.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&lt;strong&gt;The code&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;The code was calling on DB Access function that was put inside &lt;em&gt;for&lt;/em&gt; loop that was called inside event handler. The event handler was called on each GridVew's row creation. Meaning, DB access in nested loop. In case of small GridVew of 10 rows and 10 cells the database would be accessed 100 times for each request. 150 concurrent users would create significant load of 15,000 connections:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProfilerforMicrosoftSQLServer2005Express_CD84/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="115" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProfilerforMicrosoftSQLServer2005Express_CD84/image_thumb_1.png" width="496" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;SQL Server Profiler&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;After running SQL Server profiler it became clear that database access should be significantly improved. Following is the number of SQL Commands performed as a result of single request:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProfilerforMicrosoftSQLServer2005Express_CD84/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="272" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProfilerforMicrosoftSQLServer2005Express_CD84/image_thumb.png" width="377" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;For improved performance avoid chatty data base access. Apply caching techniques instead.&lt;/p&gt;  &lt;h3&gt;More free performance tools&lt;/h3&gt;  &lt;p&gt;If you use SQL Server 2005 Express which does not come with built-in profiler you might find useful the following free tool:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sqlprofiler.googlepages.com/" target="_blank"&gt;Profiler for Microsoft SQL Server 2005 Express Edition&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;My related posts&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/ace_team/archive/2008/04/21/iis7-admin-pack-offers-built-in-performance-analysis-reports.aspx" target="_blank"&gt;IIS7 Admin Pack Offers Built In Performance Analysis Reports&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/ace_team/archive/2008/03/11/improve-net-applications-performance-effectively-and-efficiently.aspx" target="_blank"&gt;Improve .Net Applications Performance Effectively And Efficiently&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/04/21/free-performance-tool-analyze-iis-logs-like-a-pro-with-funnel-web-analyzer.aspx"&gt;Free Performance Tool - Analyze IIS Logs Like A Pro With Funnel Web Analyzer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/03/09/stress-test-asp-net-web-application-with-free-wcat-tool.aspx"&gt;Stress Test ASP.NET Web Application With Free WCAT Tool&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/28/performance-testing-for-the-masses.aspx"&gt;Performance Testing For The Masses&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/02/02/performance-sin-using-exceptions-to-control-flow.aspx"&gt;Performance Sin - Using Exceptions To Control Flow&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8435254" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Securing IIS7 - Windows Server 2008 Security Guide</title><link>http://blogs.msdn.com/alikl/archive/2008/02/28/securing-iis7-windows-server-2008-security-guide.aspx</link><pubDate>Thu, 28 Feb 2008 22:09:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7936911</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/7936911.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=7936911</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=7936911</wfw:comment><description>&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc264463.aspx" target="_blank"&gt;Windows Server 2008 Security Guide&lt;/a&gt; is out.&lt;/p&gt;  &lt;p&gt;It covers many crucial aspects but my favorite of course is IIS7 chapter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;a name="_Toc191716753"&gt;Chapter 6: Hardening&lt;/a&gt;&lt;a name="_Idx118"&gt;&lt;/a&gt; Web Services&lt;/h4&gt;    &lt;p&gt;This chapter provides prescriptive guidance for hardening&lt;a name="_Idx119"&gt;&lt;/a&gt; the Web Server role. The chapter discusses how the Web server role installs Microsoft&amp;#174; Internet Information Services&lt;a name="_Idx120"&gt;&lt;/a&gt; (IIS) 7.0, which has been redesigned into forty modular components that you can choose to install as needed.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It points to the following resources:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/dbaadb7c-433d-4c88-ab7f-1575258131dc1033.mspx" target="_blank"&gt;IIS 7.0: Configuring Authentication in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/2464e39e-2a21-4c7b-907c-ed8b4b4f3d031033.mspx" target="_blank"&gt;IIS 7.0: Configuring IPv4 Address and Domain Name Rules&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/ec81dd52-8ddc-41d3-984f-9f710c21add91033.mspx" target="_blank"&gt;IIS 7.0: Configuring URL Authorization Rules in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/bf4afb4c-4ce3-40e1-bd4b-d7df6daeb9b61033.mspx" target="_blank"&gt;IIS 7.0: Configuring Server Certificates in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/8ddc1f85-27fb-439d-a3da-ced11f7dcf031033.mspx" target="_blank"&gt;IIS 7.0: Configuring ISAPI and CGI Restrictions in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/70c33ea8-4192-4110-be70-a11e11984f1e1033.mspx" target="_blank"&gt;IIS 7.0: Configuring Secure Sockets Layer in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/7b4d4d2b-780f-47d5-bc6c-514c65754c521033.mspx" target="_blank"&gt;IIS 7.0: Configuring Request Filters&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/b0a91b50-1582-44b5-b61e-7207e6e1c2d11033.mspx" target="_blank"&gt;IIS 7.0: Configuring Shared Configuration&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=103904" target="_blank"&gt;How to Setup SSL on IIS7&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=94165" target="_blank"&gt;How to Use Request Filtering&lt;/a&gt;&lt;a name="_Idx1510"&gt;&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=86769" target="_blank"&gt;Improving Web Application Security: Threats and Countermeasures&lt;/a&gt;&lt;a name="_Idx1511"&gt;&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/windowsserver2008/en/library/939d621e-c023-48f8-9503-47f24a6be7211033.mspx?mfr=true" target="_blank"&gt;IIS 7.0: Configure Web Server Security&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=99832" target="_blank"&gt;Server Core Installation Option of Windows Server 2008 Step-By-Step Guide&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=3655" target="_blank"&gt;Windows Management Instrumentation&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=89710" target="_blank"&gt;Windows Server 2008 Technical Library&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=100617" target="_blank"&gt;Understanding IIS7 URL Authorization&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7936911" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Inspection/default.aspx">Deployment Inspection</category><category domain="http://blogs.msdn.com/alikl/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category></item><item><title>ASP.NET 2.0 Internet Security Reference Implementation - Have It Handy</title><link>http://blogs.msdn.com/alikl/archive/2007/11/21/asp-net-2-0-internet-security-reference-implementation-have-it-handy.aspx</link><pubDate>Wed, 21 Nov 2007 13:04:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6452996</guid><dc:creator>alikl</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/alikl/comments/6452996.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=6452996</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=6452996</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2006/07/20/asp-net-2-0-internet-security-reference-implementation.aspx" target="_blank"&gt;JD Meier writes in his blog&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The &lt;a href="http://codegallery.gotdotnet.com/ASPNETv2RefImp"&gt;ASP.NET 2.0 Internet Security Reference Implementation&lt;/a&gt; is a sample application complete with code and guidance.&amp;nbsp; Our purpose was to show &lt;a href="http://msdn.com/SecurityGuidance"&gt;patterns &amp;amp; practices security&amp;nbsp;guidance&lt;/a&gt; in the context of an application scenario. We used &lt;a href="http://msdn.microsoft.com/library/en-us/dnbda/html/bdasamppet4.asp"&gt;Pet Shop 4&lt;/a&gt; as the baseline application and tailored it for an internet facing scenario.&amp;nbsp; The application uses forms authentication with users and roles stored in SQL.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;It is master piece, nothing less. Simple to get a grip, practical, and focused.&lt;/p&gt; &lt;p&gt;Now that GotDotNet is down I thought it would be useful to have it handy somewhere else that is on.&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/36103/download.aspx" target="_blank"&gt;&lt;strong&gt;Download&lt;/strong&gt; &lt;em&gt;ASP.NET 2.0 Internet Security Reference Implementation Document here&lt;/em&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/36125/download.aspx" target="_blank"&gt;&lt;strong&gt;Download&lt;/strong&gt; &lt;em&gt;ASP.NET 2.0 Internet Security Reference Implementation Code here&lt;/em&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6452996" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Practices/default.aspx">Practices</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Inception+Phase/default.aspx">Inception Phase</category></item><item><title>Composite Application Block (CAB) Programming Essentials - Crucial For CAB Performance</title><link>http://blogs.msdn.com/alikl/archive/2007/10/29/composite-application-block-cab-programming-essentials-crucial-for-cab-performance.aspx</link><pubDate>Mon, 29 Oct 2007 23:30:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5770532</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/5770532.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=5770532</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=5770532</wfw:comment><description>&lt;p&gt;&lt;a href="http://richnewman.wordpress.com/" target="_blank"&gt;Rich Newman&lt;/a&gt;&lt;font color="#666666"&gt;&amp;nbsp;&lt;/font&gt; posted awesome guides for Composite Application Block (CAB) programming:&lt;/p&gt; &lt;blockquote&gt; &lt;h5&gt;&lt;a href="http://richnewman.wordpress.com/intro-to-cab-toc/" target="_blank"&gt;Table of Contents: Introduction to CAB/SCSF&lt;/a&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/07/14/an-introduction-to-the-smart-client-software-factory-and-composite-application-block-part-1-modules-and-shells/" target="_blank"&gt;Part 1 Modules and Shells&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/07/14/an-introduction-to-the-smart-client-software-factory-and-composite-application-block-part-2-workitems/" target="_blank"&gt;Part 2 WorkItems&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/07/21/introduction-to-dependency-injection-introduction-to-cabscsf-part-3/" target="_blank"&gt;Part 3 Introduction to Dependency Injection&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/08/04/an-aside-on-inversion-of-control-dependency-inversion-and-dependency-injection-introduction-to-cabscsf-part-4/" target="_blank"&gt;Part 4 An Aside on Inversion of Control, Dependency Inversion and Dependency Injection&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/08/05/dependency-injection-and-the-composite-application-block-introduction-to-cabscsf-part-5/" target="_blank"&gt;Part 5 Dependency Injection and the Composite Application Block&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/09/04/constructor-injection-in-the-cab-introduction-to-the-cabscsf-part-6/" target="_blank"&gt;Part 6 Constructor Injection in the Composite Application Block&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/09/08/introduction-to-services-in-the-cab-introduction-to-the-cabscsf-part-7/" target="_blank"&gt;Part 7 Introduction to Services in the Composite Application Block&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/09/09/creating-and-using-services-in-the-cab-introduction-to-the-cabscsf-part-8/" target="_blank"&gt;Part 8 Creating and Using Services in the Composite Application Block&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/09/15/the-command-design-pattern-introduction-to-the-cabscsf-part-9/" target="_blank"&gt;Part 9 The Command Design Pattern&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/09/16/commands-in-the-cab-introduction-to-cabscsf-part-10/" target="_blank"&gt;Part 10 Commands in the Composite Application Block&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/09/22/introduction-to-events-in-the-cab-introduction-to-cabscsf-part-11/" target="_blank"&gt;Part 11 Introduction to Events in the Composite Application Block&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/09/23/events-in-the-cab-introduction-to-cabscsf-part-12/" target="_blank"&gt;Part 12 Events in the Composite Application Block&lt;/a&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://richnewman.wordpress.com/2007/10/13/introduction-to-uiextensionsites-introduction-to-the-cabscsf-part-13/" target="_blank"&gt;Part 13 Introduction to UIExtensionSites&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;It is important to understand these core principles. Recently I was involved with a project where CAB was used extensively. Too extensively... The application was actually over-CAB'ed causing performance hit. When we ran the &lt;a href="http://www.jetbrains.com/profiler/" target="_blank"&gt;profiler&lt;/a&gt; we saw that many functions calls were empty while adding up to execution time. The only solution was redesigning the application and CAB usage.&lt;/p&gt; &lt;p&gt;Lessons Learned:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Do not over CAB&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Load modules on demand&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Cache static data&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Related resources:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/eugeniop/archive/2006/08/23/716037.aspx" target="_blank"&gt;Notes on (extreme) Performance requirements for CAB&lt;/a&gt;&lt;/strong&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=f9176708-9f57-4c0f-97fb-f9c65a9bbf22&amp;amp;displaylang=en" target="_blank"&gt;Mobile Client Software Factory&lt;/a&gt;&amp;nbsp;(includes includes CABgen and OBgen for NGEN'ing CAB modules)  &lt;li&gt;&lt;a href="http://staff.southworks.net/blogs/matiaswoloski/archive/2006/02/26/CABModulesOnDemand.aspx" target="_blank"&gt;How To: load CAB modules on demand&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5770532" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category></item><item><title>Examining WCF Diagnostic Traces Using Service Trace Viewer Tool (SvcTraceViewer.exe)</title><link>http://blogs.msdn.com/alikl/archive/2007/10/23/examining-wcf-diagnostic-traces-using-service-trace-viewer-tool-svctraceviewer-exe.aspx</link><pubDate>Tue, 23 Oct 2007 16:52:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5624225</guid><dc:creator>alikl</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/alikl/comments/5624225.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=5624225</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=5624225</wfw:comment><description>&lt;p&gt;Service Trace Viewer Tool (SvcTraceViewer.exe) tool comes with &lt;a href=" http://www.microsoft.com/downloads/details.aspx?familyid=C2B1E300-F358-4523-B479-F53D234CDCCF&amp;amp;displaylang=en" target="_blank"&gt;Microsoft® Windows® Software Development Kit for Windows Vista™ and .NET Framework 3.0 Runtime Components&lt;/a&gt;. It allows to view WCF diagnostics traces in very convenient way. "&lt;a href="http://msdn2.microsoft.com/en-us/library/aa751795.aspx" target="_blank"&gt;Using Service Trace Viewer for Viewing Correlated Traces and Troubleshooting&lt;/a&gt;" article explains how.&lt;/p&gt; &lt;p&gt;Specifically I used it for two scenarios&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt; when implementing &lt;a href="http://msdn2.microsoft.com/en-us/library/ms735117.aspx" target="_blank"&gt;Message Security with a Windows Client without Credential Negotiation&lt;/a&gt;. Using SvcTraceViewer.exe I spotted the following error message: &lt;em&gt;"&lt;font color="#d90000"&gt;The security timestamp is invalid because its creation time ('9/19/2007 5:43:39 PM') is in the future. Current time is '9/19/2007 8:43:42 AM' and allowed clock skew is '00:05:00'."&lt;/font&gt;&lt;/em&gt;&lt;font color="#d90000"&gt; &lt;/font&gt;I immediately understood that machines clocks are out of sync - which is super important for Kerberos to work properly.  &lt;li&gt;&lt;strong&gt;Examining message sizes&lt;/strong&gt; with different protection mechanisms and &lt;a href="http://msdn2.microsoft.com/en-us/library/Aa347692.aspx" target="_blank"&gt;levels&lt;/a&gt;. I needed to understand the impact of data protection mechanisms on general performance. See &lt;a href="http://msdn2.microsoft.com/en-us/library/ms733137.aspx" target="_blank"&gt;How Message and Transport Security compare&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Related posts&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/07/26/wcf-security-in-intranet-scenario-thoughts-on-cons-and-pros.aspx"&gt;WCF Security In Intranet Scenario : Thoughts On Cons and Pros&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5624225" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Auditing+and+Logging/default.aspx">Auditing and Logging</category></item><item><title>Authentication And Identity Flow When ASP Page Consumes ASP.NET Web Service</title><link>http://blogs.msdn.com/alikl/archive/2007/09/05/authentication-and-identity-flow-when-asp-page-consumes-asp-net-web-service.aspx</link><pubDate>Wed, 05 Sep 2007 19:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4765827</guid><dc:creator>alikl</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/alikl/comments/4765827.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=4765827</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=4765827</wfw:comment><description>&lt;P&gt;"Classic" ASP has&amp;nbsp;application isolation that is different from ASP.NET. Here is one of the&amp;nbsp;real world scenarios&amp;nbsp;where it might matter.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=178 alt=image src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image_thumb.png" width=408 border=0 mce_src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;There is a legacy web application written in ASP and hosted on Win2K3 box (IIS 6.0). It is of course in the process of migration to ASP.NET. As part of the migration process there were several ASP.NET web services factored out of the classic ASP app. These web services are hosted on another Win2K3 box and require windows authentication. Classic ASP must consume these web services while satisfying the requirement of windows authentication. ASP page consumes the web service via .Net COM interop invoking .Net component:&lt;/P&gt;
&lt;P&gt;The question here is what is this account that ASP page authenticates to ASP.NET web service&amp;nbsp;on another machine?&lt;/P&gt;
&lt;P&gt;It is common mistake assuming that the account is the application pool's one. ASP does not run in the context of the application pool. In case of anonymous access It runs in the context of what defined for anonymous user:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image_1.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image_1.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=333 alt=image src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image_thumb_1.png" width=279 border=0 mce_src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IdentityFlowWhenASPPageCon.NETWebService_CB38/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Said that, in order to let ASP page authenticate to ASP.NET web service based on windows authentication one needs to define domain account in above property page for virtual directory where ASP resides. This is the account that will hit the ASP.NET web service.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4765827" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category></item><item><title>Client Certificates Authentication - Dirty Trick To Disable CRL Check. For Demos Only!</title><link>http://blogs.msdn.com/alikl/archive/2007/08/14/client-certificates-authentication-dirty-trick-to-disable-crl-check-for-demos-only.aspx</link><pubDate>Tue, 14 Aug 2007 18:12:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4384599</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/4384599.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=4384599</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=4384599</wfw:comment><description>&lt;p&gt;My &lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/29/how-i-setup-lab-domain-using-vpc-2007.aspx"&gt;lab domain&lt;/a&gt;&amp;nbsp;has MS CA installed in it so I am able to issue certificates to the left and to the right. Recently I spent some time to understand why client certificates authentication does not work. More precisely the certificates dialog box was offering no client certificate to chose,&amp;nbsp;as depicted below:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ClientCertificatesAuthenticationDirtyTri_C6B3/image.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 20px; border-right-width: 0px" height="262" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ClientCertificatesAuthenticationDirtyTri_C6B3/image_thumb.png" width="303" align="left" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I first thought it is something on the client machine but after some investigation it&amp;nbsp;turned out that it is IIS' part. IIS was unable to verify CRL. I was not in the mood of deploying CRL's so I decided to look into how to disable this feature. Here it is:&lt;/p&gt; &lt;p&gt;&lt;a href="http://forums.iis.net/t/1100044.aspx" target="_blank"&gt;http://forums.iis.net/t/1100044.aspx&lt;/a&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; Set oWeb = GetObject("IIS://localhost/W3SVC")&lt;br&gt;&amp;nbsp;&amp;nbsp; oWeb.CertCheckMode = 1&lt;br&gt;&amp;nbsp;&amp;nbsp; oWeb.SetInfo&lt;br&gt;&amp;nbsp;&amp;nbsp; Set oWeb = Nothing  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Open notepad paste the code above and save with vbs extension. Run it by double clicking it. Your IIS now do not give a damn about CRL.  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;NOT&lt;/strong&gt; THE BEST OPTION FOR PRODUCTION ENVIRONMENT.&lt;/font&gt;  &lt;p&gt;Good enough for demos.  &lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4384599" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Authentication/default.aspx">Authentication</category></item><item><title>Web Services Over SSL - Is It Really That Slow Like They Say?</title><link>http://blogs.msdn.com/alikl/archive/2007/08/01/web-services-over-ssl-is-it-really-that-slow-like-they-say.aspx</link><pubDate>Wed, 01 Aug 2007 17:35:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4169341</guid><dc:creator>alikl</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/alikl/comments/4169341.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=4169341</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=4169341</wfw:comment><description>&lt;p&gt;My answer is &lt;strong&gt;"no"&lt;/strong&gt;.  &lt;p&gt;I am working on&amp;nbsp;solution where there is no Windows Active Directory Domain so we cannot utilize our &lt;a href="http://blogs.msdn.com/alikl/archive/2007/07/04/t-shooting-kerberos.aspx" target="_blank"&gt;beloved Kerberos&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/alikl/archive/2007/04/11/authentication-hub.aspx" target="_blank"&gt;Windows Integrated Authentication&lt;/a&gt; saving big on configuration and management while taking advantage of increased security it offers.  &lt;p&gt;Other technique that we thought that could give us a lots of benefits in terms of strong authentication, transport level protection, and interoperability was using Client Certificates.  &lt;p&gt;Here is the scenario.  &lt;p&gt;ASP.NET web page calls on ASP.NET Web Service on separate machine. Think of scenario where Internet facing ASP.NET web site calls on Web Service deployed in internal zone:  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/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="311" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/image_thumb.png" width="524" border="0"&gt;&lt;/a&gt;  &lt;p&gt;The other scenario would be so called B2B scenario where intranet facing ASP.NET web site calls on Web Service over the Internet:  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/image_1.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="307" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/image_thumb_1.png" width="522" border="0"&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;Another scenario would be calling Java Web Service.  &lt;p&gt;Not that friendly for Windows Integrated Authentication.  &lt;p&gt;The question we asked ourselves was - will it be fast enough? The following post&amp;nbsp;by my colleague Eddie -&amp;nbsp;&lt;a href="http://blogs.msdn.com/ace_team/archive/2006/07/03/655536.aspx" target="_blank"&gt;Fast and Secured: Performance Impact of SSL&lt;/a&gt;&amp;nbsp;gave us a lots of hope. But it discussed SSL between Web Browser and the Web Server. Web Browser (IE) has nice feature of caching SSL state so&amp;nbsp;what depicted below&amp;nbsp;happens less thus improving performance (think of OLEDB Connection pooling and you got the idea):  &lt;p&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer/en/library/2a9816ef-70bf-4bd7-a043-9ba721595e271033.mspx?mfr=true " target="_blank" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/image_4.png" width="340" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Well,&amp;nbsp;our beloved Internet Explorer does a great job, what about .Net?  &lt;p&gt;After some research we happily discovered the following:  &lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest.aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest.aspx&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/clip_image001_2.gif" atomicselection="true"&gt;&lt;img height="10" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/clip_image001_thumb.gif" width="10" border="0"&gt;&lt;/a&gt;Note: &lt;/b&gt; &lt;blockquote&gt; &lt;p&gt;The Framework caches SSL sessions as they are created and attempts to reuse a cached session for a new request, if possible. When attempting to reuse an SSL session, the Framework uses the first element of &lt;a href="http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest.clientcertificates.aspx"&gt;ClientCertificates&lt;/a&gt; (if there is one), or tries to reuse an anonymous sessions if &lt;b&gt;ClientCertificates&lt;/b&gt; is empty.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;That was encouraging and&amp;nbsp;I decided&amp;nbsp;I need to see it my eyes, so I set sample code and deployed to my &lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/29/how-i-setup-lab-domain-using-vpc-2007.aspx" target="_blank"&gt;lab domain&lt;/a&gt;. I also have used diagnostics technique described in &lt;a href="http://blogs.msdn.com/alikl/archive/2007/07/16/use-sysinternals-debugview-to-diagnose-the-application.aspx"&gt;Use Sysinternals DebugView To Diagnose The Application&lt;/a&gt;. When I fired up DebugView this is what&amp;nbsp;I saw:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/image_5.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SSLSessionCachingThinkOfOLEDBConnectionP_15058/image_thumb_4.png" width="485" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Each pair of records reflects on single Web page access telling me how many milliseconds was spent on each action to complete during the page processing.&lt;/p&gt; &lt;p&gt;Notice first two records - one for Web Service proxy creating and adding certificate to it:&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;a href="http://blogs.msdn.com/jmeier/archive/2006/12/05/timing-managed-code-in-net-2-0.aspx"&gt;START STOPWATCH&lt;/a&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Stopwatch&lt;/span&gt; stopwatch = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Stopwatch&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;stopwatch.Start();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//GET HOLD ON CERT&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;X509Store&lt;/span&gt; store = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;X509Store&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;StoreName&lt;/span&gt;.My, &lt;span style="color: #2b91af"&gt;StoreLocation&lt;/span&gt;.CurrentUser);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;store.Open(&lt;span style="color: #2b91af"&gt;OpenFlags&lt;/span&gt;.ReadOnly);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;X509Certificate2Collection&lt;/span&gt; certs = store.Certificates.Find(&lt;span style="color: #2b91af"&gt;X509FindType&lt;/span&gt;.FindBySubjectName, &lt;span style="color: #a31515"&gt;"w3w1"&lt;/span&gt;, &lt;span style="color: blue"&gt;true&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;X509Certificate2&lt;/span&gt; cert = certs[0];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//CREATE WEB SERVICE PROXY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Service1&lt;/span&gt; proxy = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Service1&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;proxy.ClientCertificates.Add(cert);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"Web Service Proxy Created: "&lt;/span&gt; + stopwatch.ElapsedMilliseconds.ToString());&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;font face="Trebuchet MS"&gt;and the second one is actual Web Service call:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;// CALL ON WEB SERVICE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; result = proxy.HelloWorld(cert.Subject);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"Web Service Call Completed: "&lt;/span&gt; + stopwatch.ElapsedMilliseconds.ToString());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 7pt; line-height: 115%"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%"&gt;&lt;o:p&gt;Notice that all subsequent calls are pretty fast. It should prove that SSL session caching is in place also with .Net as promised. Cool.&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%"&gt;&lt;o:p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%"&gt;&lt;o:p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%"&gt;&lt;o:p&gt;While these numbers have been taken on lab environment for super simple scenario it can serve as talking point when considering &lt;a href="http://blogs.msdn.com/alikl/archive/2007/07/30/man-in-the-middle-attack-protecting-http-traffic-with-ssl-might-be-not-enough-consider-protecting-sql-traffic-too.aspx"&gt;applying SSL to protect your sensitive data&lt;/a&gt; to its way to downstream servers. Also client certificate authentication should be considered as a strongest authentication available today when Kerberos is not available.&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4169341" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Authentication/default.aspx">Authentication</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category></item><item><title>Man-In-The-Middle-Attack: Protecting Http Traffic With SSL Might Be Not Enough - Consider Protecting SQL Traffic Too</title><link>http://blogs.msdn.com/alikl/archive/2007/07/30/man-in-the-middle-attack-protecting-http-traffic-with-ssl-might-be-not-enough-consider-protecting-sql-traffic-too.aspx</link><pubDate>Mon, 30 Jul 2007 17:06:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4131546</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/4131546.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=4131546</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=4131546</wfw:comment><description>&lt;p&gt;Think configuring SSL for your web site is enough to protect against prying eyes?&lt;/p&gt; &lt;p&gt;Here is how the sensitive data can be exposed by sniffing your SQL traffic.&lt;/p&gt; &lt;p&gt;Consider common simple 3 tier web architecture for data driven web site. The Web and DB server (it really does not matter what vendor it is) are physical separate machines as depicted below:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_2.png" atomicselection="true"&gt;&lt;img height="223" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_thumb_2.png" width="438" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;It is common practice to apply SSL for web traffic so that bad guy won't be able to easily see what runs on the wire. It is less common practice to apply network protection to the traffic that goes between the Web and DB server. In some cases it is possible to pretty easily sniff&amp;nbsp; that traffic, or as they call it to launch &lt;a href="http://en.wikipedia.org/wiki/Man_in_the_middle_attack" target="_blank"&gt;Man-In-The-Middle-Attack&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;One of techniques&amp;nbsp;to sniff the traffic is first launch &lt;a href="http://en.wikipedia.org/wiki/ARP_spoofing" target="_blank"&gt;ARP poisoning&lt;/a&gt; attack and then just fire up any network protocol analyzer. For ARP poisoning&amp;nbsp;the tools can be found freely here - &lt;a href="http://www.insecure.org" target="_blank"&gt;www.insecure.org&lt;/a&gt;&amp;nbsp;- and&amp;nbsp;I used &lt;a href="http://www.oxid.it/cain.html" target="_blank"&gt;Cain and Abel&lt;/a&gt;. &lt;a href="http://port25.technet.com/default.aspx" target="_blank"&gt;Linux friends&lt;/a&gt; will probably use &lt;a href="http://ettercap.sourceforge.net/"&gt;Ettercap&lt;/a&gt;&amp;nbsp;(&lt;a href="http://www.openmaniak.com/ettercap_arp.php" target="_blank"&gt;what a nice "how to" they have&lt;/a&gt;&amp;nbsp;) and I used&amp;nbsp;new shiny and freely available &lt;a href="http://blogs.technet.com/netmon" target="_blank"&gt;Microsoft Network Monitor&lt;/a&gt;&amp;nbsp;for protocol analyzing.&lt;/p&gt; &lt;p&gt;Here is how my web site looks (I just returned some sample data from AdventureWorks database over SSL):&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_4.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_thumb_4.png" width="510" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And here is what I&amp;nbsp;fished in my net using MS Netmon&amp;nbsp;while sniffing the traffic between the Web and DB server:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_5.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="215" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_thumb_5.png" width="631" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And here is how it looks after pasting it into my favorite tool - Notepad:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_7.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="172" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ProtectingHttpTrafficWithSSLMayNotBeEnou_17C/image_thumb_7.png" width="578" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Go back to the first image and compare.&lt;/p&gt; &lt;p&gt;This is just email address, now think about a bit more sensitive data like your bank account balance or credentials. Is it secure on&amp;nbsp;its way from the Web server to DB server?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Conclusion and Countermeasures&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To build more secure system it is not enough to apply SSL or IPSEC here and there - it is about the holistic approach &lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/07/security-engineering-big-rocks.aspx"&gt;through the whole development process&lt;/a&gt;. Specifically for the case at hand consider the following resources when designing, building, and deploying your next system:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/technet/solutionaccelerators/wssra/raguide/webapplicationservices/default.mspx" target="_blank"&gt;WSSRA (Windows Server System Reference Architecture) blueprints for Web Application Services&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/technet/solutionaccelerators/wssra/raguide/DataServices/igdsbp_2.mspx" target="_blank"&gt;WSSRA Enterprise Design for Data Services&lt;/a&gt;  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/aa302414.aspx" target="_blank"&gt;How To: Use SSL to Secure Communication with SQL Server 2000&lt;/a&gt;  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/aa302366.aspx" target="_blank"&gt;How To: Use IPSec for Filtering Ports and Authentication&lt;/a&gt;  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/aa302413.aspx" target="_blank"&gt;How To: Use IPSec to Provide Secure Communication Between Two Servers&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This post was inspired after watching presentation by Marcus Murray he has given during Microsoft Tech·Ed 2007 in Orlando - &lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032340737%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e" target="_blank"&gt;Why I Can Hack Your Network in a Day! [A live demonstration of techniques and tools used by hackers to compromise your network]&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I&amp;nbsp;am curious (or should I say I am freaked out) who else was inspired to do what after watching it?.....&lt;/p&gt; &lt;p&gt;It is scary presentation - do not watch it before you go to sleep. Especially if you are responsible for your org's IT in some way...&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4131546" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category></item><item><title>WCF Security In Intranet Scenario : Thoughts On Cons and Pros</title><link>http://blogs.msdn.com/alikl/archive/2007/07/26/wcf-security-in-intranet-scenario-thoughts-on-cons-and-pros.aspx</link><pubDate>Thu, 26 Jul 2007 15:54:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4064637</guid><dc:creator>alikl</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/alikl/comments/4064637.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=4064637</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=4064637</wfw:comment><description>&lt;p&gt;I am researching on best practices with WCF security in terms of "YOU SHOUD" vs "YOU CAN". While it is great to have "How to" stuff I am also interested in "Why" angle. I have common simple scenario of WinForms client consuming WCF service inside corp walls with Active Directory deployed. Here is what I came up with while looking at &lt;a href="http://msdn2.microsoft.com/en-us/library/ms730158.aspx" target="_blank"&gt;Hosting Services&lt;/a&gt;&amp;nbsp;and &lt;a href="http://msdn2.microsoft.com/en-us/library/ms730301.aspx" target="_blank"&gt;Common Security Scenarios&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I have built simple Hello World WCF service that accepts Person object/message and echoes back "Hello, " + Person.FirstName. I was using &lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/08/servicestation/default.aspx" target="_blank"&gt;DataContract serialization&lt;/a&gt;. I think it really does not matter what it does in terms of biz logic. What really matters for me is how to &lt;em&gt;&lt;strong&gt;host&lt;/strong&gt;&lt;/em&gt; it, what &lt;strong&gt;&lt;em&gt;binding &lt;/em&gt;&lt;/strong&gt;to apply, and what &lt;strong&gt;&lt;em&gt;security &lt;/em&gt;&lt;/strong&gt;settings to configure.&lt;/p&gt; &lt;p&gt;For my intranet scenario "&lt;a href="http://msdn2.microsoft.com/ms735117.aspx"&gt;Message Security with a Windows Client without Credential Negotiation&lt;/a&gt;" would fit most I think. It utilizes Active Directory for authentication and message protection in transit as well saving me from messing with certs, transport level protection SSL, IPSEC style and plain vanilla UserName and Passwords. I think it is great and apparently it is a &lt;strong&gt;pro&lt;/strong&gt; part from security stand. &lt;/p&gt; &lt;p&gt;Since it uses wsHttpBinding binding&amp;nbsp;I thought it would be natural choice to host it in IIS rather self hosted as it shows up in the example. Here I earn what IIS has to offer vs what&amp;nbsp;I can write in C#...&lt;/p&gt; &lt;p&gt;I also&amp;nbsp;implemented&amp;nbsp;scenario where I used &lt;a href="http://msdn2.microsoft.com/en-us/library/ms731361.aspx" target="_blank"&gt;basicHttpBinding&lt;/a&gt;&amp;nbsp;with security set to None...&lt;/p&gt; &lt;p&gt;I fired up &lt;a href="http://fiddler2.com/fiddler2/version.asp" target="_blank"&gt;Fiddler2&lt;/a&gt;&amp;nbsp;to see what runs on the wire in both cases. The difference was pretty notable in terms of response time and payload size. Of course all these goodies that come from using Kerberos from my Active Directory friend - authentication and message protection - have their cost in terms of performance. I guess it is &lt;strong&gt;cons&lt;/strong&gt; part from performance stand.&amp;nbsp;I presume the time is spent for negotiation with Domain Controller and for cryptographic operations - encryption and signing - for message protection. The other &lt;strong&gt;cons&lt;/strong&gt; part would be message size that naturally inflates when encrypted.&lt;/p&gt; &lt;p&gt;&amp;nbsp;All my experiments are done with my &lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/29/how-i-setup-lab-domain-using-vpc-2007.aspx" target="_blank"&gt;demo lab domain that is totally based on VPC 2007&lt;/a&gt;&amp;nbsp;so the numbers should be taken with caution but I presume that it can give some food for thoughts.&amp;nbsp;Consider simple message as follows:&lt;/p&gt; &lt;p&gt;&amp;lt;s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;lt;s:Body&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SayHello xmlns="http://tempuri.org/"&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;person xmlns:a="......." xmlns:i="....."&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a:FirstName&amp;gt;Alik&amp;lt;/a:FirstName&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a:LastName&amp;gt;Levin&amp;lt;/a:LastName&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/person&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;/SayHello&amp;gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/s:Body&amp;gt;  &lt;p&gt;&amp;lt;/s:Envelope&amp;gt;  &lt;p class="MsoNormal"&gt;Here is what&amp;nbsp;I captured using Fiddler:&lt;/p&gt; &lt;table class="MsoTableLightShadingAccent1" style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse; mso-border-top-alt: solid #4f81bd 1.0pt; mso-border-top-themecolor: accent1; mso-border-bottom-alt: solid #4f81bd 1.0pt; mso-border-bottom-themecolor: accent1; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" cellspacing="0" cellpadding="0" border="1" unselectable="on"&gt; &lt;tbody&gt; &lt;tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: #4f81bd 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid; mso-border-top-themecolor: accent1; mso-border-bottom-themecolor: accent1" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 5"&gt;&lt;b&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: #4f81bd 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid; mso-border-top-themecolor: accent1; mso-border-bottom-themecolor: accent1" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 1"&gt;&lt;b&gt;&lt;span style="font-size: 13pt; color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: #4f81bd 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid; mso-border-top-themecolor: accent1; mso-border-bottom-themecolor: accent1" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 1"&gt;&lt;b&gt;&lt;span style="font-size: 13pt; color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;wsHttpBinding&lt;/span&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 0"&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 68"&gt;&lt;b&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Message Encryption&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center; mso-yfti-cnfc: 64" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center; mso-yfti-cnfc: 64" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;V&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 1"&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 4"&gt;&lt;b&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Message Signing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;V&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 2"&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 68"&gt;&lt;b&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Bites sent&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center; mso-yfti-cnfc: 64" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;584&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center; mso-yfti-cnfc: 64" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;8,014&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 3"&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 4"&gt;&lt;b&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Bites received&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;420&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: medium none" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;5,286&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid; mso-border-bottom-themecolor: accent1; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="mso-yfti-cnfc: 68"&gt;&lt;b&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Time to last byte&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid; mso-border-bottom-themecolor: accent1; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center; mso-yfti-cnfc: 64" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;20 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #d3dfee; padding-bottom: 0in; border-left: medium none; width: 110.7pt; padding-top: 0in; border-bottom: #4f81bd 1pt solid; mso-border-bottom-themecolor: accent1; mso-background-themecolor: accent1; mso-background-themetint: 63" valign="top" width="148"&gt; &lt;p class="MsoNormal" style="text-align: center; mso-yfti-cnfc: 64" align="center"&gt;&lt;span style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;231 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;When designing my next WCF solution for intranet scenario I will sure try to utilize current IT investment like AD and IIS to provide first class security and hosting services while saving on maintenance costs. On other hand I must take into account performance part, this consideration should reflect on message size - for example, &lt;a href="http://blogs.msdn.com/alikl/archive/2007/07/06/typed-dataset-potential-performance-and-security-risk.aspx" target="_blank"&gt;think twice when tempted to use DataSet as DTO&lt;/a&gt;. It should also reflect on hosting options - using IIS 6.0 allows me to utilize Http traffic only.&lt;/p&gt; &lt;p&gt;Here is my take on intranet scenario where Windows 2003 Active Directory and IIS 6.0 deployed:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Utilize AD for message security and authentication.  &lt;li&gt;Host WCF in IIS 6.0. If I had Windows Server 2008 with IIS7 I'd go for WAS hosting for sure since it allows binding other than Http and I presume this should improve performance.  &lt;li&gt;Do not use DataSets for DTO rather carefully design custom most lightweight DTO (yes, invest as much time as needed for that one).  &lt;li&gt;Use DataContract serialization with opt-in approach (allows fine tune what gets&amp;nbsp;to the wires and what is not).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You have better suggestion for me around intranet scenario? If so, do not hesitate and drop me a line.&lt;/p&gt; &lt;p&gt;Here is even more food for thoughts &lt;a href="http://msdn2.microsoft.com/en-us/library/bb310550.aspx" target="_blank"&gt;A Performance Comparison of Windows Communication Foundation (WCF) with Existing Distributed Communication Technologies&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Bon appetite.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4064637" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Ubuntu And Apache Web Server Join My Lab Network</title><link>http://blogs.msdn.com/alikl/archive/2007/07/09/ubuntu-and-apache-web-server-join-my-lab-network.aspx</link><pubDate>Mon, 09 Jul 2007 22:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3785710</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/3785710.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=3785710</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=3785710</wfw:comment><description>&lt;P&gt;I have my lab network,&amp;nbsp;my playground Active Directory Domain(&amp;nbsp;more on it here - &lt;A href="http://blogs.msdn.com/alikl/archive/2007/05/29/how-i-setup-lab-domain-using-vpc-2007.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/05/29/how-i-setup-lab-domain-using-vpc-2007.aspx"&gt;How I Setup Lab Domain Using VPC 2007&lt;/A&gt;&amp;nbsp;).&lt;/P&gt;
&lt;P&gt;I have customers who explore&amp;nbsp;on interoperability between .Net applications and Java application that run on Windows/Linux. They seek for help.&lt;/P&gt;
&lt;P&gt;To get started&amp;nbsp;I decided that I need to have Linux machine on my lab network with Http server. From quick research on the Internet&amp;nbsp;I understood that Ubuntu 6.06 would be the easiest for me to install on my VPC 2007. I followed the instructions from &lt;A href="http://arcanecode.wordpress.com/2006/12/19/installing-ubuntu-on-virtualpc-step-by-step/" target=_blank mce_href="http://arcanecode.wordpress.com/2006/12/19/installing-ubuntu-on-virtualpc-step-by-step/"&gt;Installing Ubuntu on VirtualPC Step by Step&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;After the Linux machine was up and running I needed to install apache web server. To do so I ran the following command line:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;sudo apt-get install apache2&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;but it failed since some packages were not there.&lt;/P&gt;
&lt;P&gt;I consulted with people who are in the know and what was done is the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Add "universe" to resource.list file. It lets Ubuntu get all repositories of updates. 
&lt;LI&gt;Run command &lt;EM&gt;&lt;STRONG&gt;sudo apt-get update&lt;/STRONG&gt;&lt;/EM&gt;. Get all latest updates lists. 
&lt;LI&gt;Run &lt;STRONG&gt;&lt;EM&gt;sudo apt-get install apache2 &lt;/EM&gt;&lt;/STRONG&gt;command again to install apache&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The apache is now installed. Here is the look at it from&amp;nbsp;Ubuntu machine on my lab network (notice "localhost" in Firefox's address bar):&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image.png"&gt;&lt;IMG height=403 alt=image src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image_thumb.png" width=502 mce_src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the look at it from Windows machine on my lab network:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image_1.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image_1.png"&gt;&lt;IMG height=480 alt=image src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image_thumb_1.png" width=493 mce_src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IInstalledApacheOnUbuntu6.06_AAB7/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Next would be&amp;nbsp;starting to build&amp;nbsp;.Net and Java applications and make them interop.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3785710" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Interop/default.aspx">Interop</category></item><item><title>T-Shooting Kerberos</title><link>http://blogs.msdn.com/alikl/archive/2007/07/04/t-shooting-kerberos.aspx</link><pubDate>Thu, 05 Jul 2007 00:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3693997</guid><dc:creator>alikl</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/alikl/comments/3693997.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=3693997</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=3693997</wfw:comment><description>&lt;P&gt;I was delivering&amp;nbsp; "Authentication Explained" session for Security User Group.&lt;/P&gt;
&lt;P&gt;First off&amp;nbsp; - thanks for attending the session!&lt;/P&gt;
&lt;P&gt;The session was based on &lt;A href="http://blogs.msdn.com/alikl/archive/2007/05/31/security-educational-workshop-authentication-explained.aspx" target=_blank mce_href="http://blogs.msdn.com/alikl/archive/2007/05/31/security-educational-workshop-authentication-explained.aspx"&gt;"Authentication Explained" workshop&lt;/A&gt;. During the session I&amp;nbsp;was demoing the following topics:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/alikl/archive/2007/04/06/identity-flow-through-physical-tiers-impersonation.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/04/06/identity-flow-through-physical-tiers-impersonation.aspx"&gt;Identity Flow Through Physical Tiers - Impersonation&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/alikl/archive/2007/04/08/identity-flow-through-physical-tiers-delegation.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/04/08/identity-flow-through-physical-tiers-delegation.aspx"&gt;Identity Flow Through Physical Tiers - Delegation&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/alikl/archive/2007/04/10/identity-flow-through-physical-tiers-protocol-transition.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/04/10/identity-flow-through-physical-tiers-protocol-transition.aspx"&gt;Identity Flow Through Physical Tiers - Protocol Transition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/alikl/archive/2007/05/30/soa-strong-authentication-standard-authorization-cool-solution.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/05/30/soa-strong-authentication-standard-authorization-cool-solution.aspx"&gt;SOA, Strong Authentication, Standard Authorization - Cool Solution&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;During the preparation for the session I struggled a bit with our friend Kerberos and I stumbled on very nice resource on technet:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/security/tkerbdel.mspx" target=_blank mce_href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/security/tkerbdel.mspx"&gt;Troubleshooting Kerberos Delegation&lt;/A&gt;&amp;nbsp;(&lt;A href="http://download.microsoft.com/download/1/e/e/1ee86ce4-8234-4aa1-94f4-a37039837729/Troubleshooting_Kerberos_Delegation.DOC" mce_href="http://download.microsoft.com/download/1/e/e/1ee86ce4-8234-4aa1-94f4-a37039837729/Troubleshooting_Kerberos_Delegation.DOC"&gt;&lt;IMG height=10 alt=Download src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/icon_Word.gif" width=10 vspace=2 border=0 mce_src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/icon_Word.gif"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://download.microsoft.com/download/1/e/e/1ee86ce4-8234-4aa1-94f4-a37039837729/Troubleshooting_Kerberos_Delegation.DOC" mce_href="http://download.microsoft.com/download/1/e/e/1ee86ce4-8234-4aa1-94f4-a37039837729/Troubleshooting_Kerberos_Delegation.DOC"&gt;Kerberos_Delegation.doc&lt;/A&gt;)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/security/tkerberr.mspx" target=_blank mce_href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/security/tkerberr.mspx"&gt;Troubleshooting Kerberos Errors&lt;/A&gt;&amp;nbsp;(&lt;A href="http://download.microsoft.com/download/5/9/c/59c349f5-f0c8-4b9e-9f70-dbc5f2a8c330/Troubleshooting_Kerberos_Errors.DOC" mce_href="http://download.microsoft.com/download/5/9/c/59c349f5-f0c8-4b9e-9f70-dbc5f2a8c330/Troubleshooting_Kerberos_Errors.DOC"&gt;&lt;IMG height=10 alt=Download src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/icon_Word.gif" width=10 vspace=2 border=0 mce_src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/icon_Word.gif"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://download.microsoft.com/download/5/9/c/59c349f5-f0c8-4b9e-9f70-dbc5f2a8c330/Troubleshooting_Kerberos_Errors.DOC" mce_href="http://download.microsoft.com/download/5/9/c/59c349f5-f0c8-4b9e-9f70-dbc5f2a8c330/Troubleshooting_Kerberos_Errors.DOC"&gt;Kerberos_Errors.doc&lt;/A&gt;)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The articles are very comprehensive and detailed - very handy.&lt;/P&gt;
&lt;P&gt;Happy Kerberos t-shooting (troubleshooting)&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Enjoy&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3693997" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Practices/default.aspx">Practices</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Authentication/default.aspx">Authentication</category></item><item><title>IIS 7 Configuration File - applicationHost.config - Password Management</title><link>http://blogs.msdn.com/alikl/archive/2007/04/24/iis-7-configuration-file-applicationhost-config-password-management.aspx</link><pubDate>Tue, 24 Apr 2007 22:52:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2263745</guid><dc:creator>alikl</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/alikl/comments/2263745.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=2263745</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=2263745</wfw:comment><description>&lt;p&gt;From my learning of IIS7 I understand that IIS7's metabase is actually XML configuration file very familiar to me and similar to&amp;nbsp; ASP.NET's web.config. It is called&amp;nbsp;&lt;strong&gt;applicationHost.config&lt;/strong&gt; and sits in &lt;em&gt;C:\Windows\System32\inetsrv\config&lt;/em&gt;&lt;/p&gt; &lt;p&gt;My first interest was to see how&amp;nbsp;it manages passwords when specifying specific accounts for application pool.&lt;/p&gt; &lt;p&gt;I created demo application pool called xxxx, then I created demo account and specified my application pool to run under it. Then I navigated to&amp;nbsp;&lt;em&gt;C:\Windows\System32\inetsrv\config\applicationHost.config&lt;/em&gt; and opened it Notepad. I needed to run Notepad as administrator since UAC prevents from opening it directly into Notepad (I cannot say it about Visual Studio, which opens it gladly without running as Administrator). The following picture depicts what I found there:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IIS7_B2A0/image%7B0%7D%5B3%5D.png" atomicselection="true"&gt;&lt;img height="195" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IIS7_B2A0/image%7B0%7D_thumb%5B1%5D.png" width="530"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Seems like the password encrypted using RSA and the cipher was stored in the config file, not the clear text password.&lt;/p&gt; &lt;p&gt;Very cool.&lt;/p&gt; &lt;p&gt;Where&amp;nbsp;is the key? Digging deeper...&lt;/p&gt; &lt;p&gt;I learned it from:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.iis.net/News/Item.aspx?i=1174" href="http://www.iis.net/News/Item.aspx?i=1174"&gt;&lt;a title="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=992&amp;amp;p=3" href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=992&amp;amp;p=3"&gt;http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=992&amp;amp;p=3&lt;/a&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=992&amp;amp;p=4" href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=992&amp;amp;p=4"&gt;http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=992&amp;amp;p=4&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2263745" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Sensitive+Data/default.aspx">Sensitive Data</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/IIS+7/default.aspx">IIS 7</category></item><item><title>IIS 6.0 Was True Love, New Romance Is About To Begin - IIS 7</title><link>http://blogs.msdn.com/alikl/archive/2007/04/07/iis-6-0-was-true-love-new-romance-is-about-to-begin-iis-7.aspx</link><pubDate>Sun, 08 Apr 2007 00:01:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2047207</guid><dc:creator>alikl</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/alikl/comments/2047207.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=2047207</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=2047207</wfw:comment><description>&lt;p&gt;I just could not hold it back - it is midnight and I am watching &lt;a href="http://blogs.msdn.com/richardt/default.aspx" target="_blank"&gt;Richard Turner's&lt;/a&gt; screencast&amp;nbsp;- &lt;a href="http://blogs.msdn.com/richardt/archive/2007/03/28/new-screencast-how-to-configure-iis7-for-windows-cardspace-sites.aspx" target="_blank"&gt;New Screencast: How to configure IIS7 for Windows CardSpace sites&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It was humiliatingly :) easy to set up test server cert, so I've done it, here is the prove:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IIS.0WasTrueLoveExcitedTowardNewRomanceI_14594/image%7B0%7D%5B25%5D.png" atomicselection="true"&gt;&lt;img height="480" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/IIS.0WasTrueLoveExcitedTowardNewRomanceI_14594/image%7B0%7D_thumb%5B19%5D.png" width="577"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Next he talks about how to configure it for CardSpace - I stopped watching since I know if I continue I may end up watching the sun set together with my laptop.&lt;/p&gt; &lt;p&gt;Richard, good job!!&lt;/p&gt; &lt;p&gt;Good night.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2047207" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.msdn.com/alikl/archive/tags/IIS+7/default.aspx">IIS 7</category></item></channel></rss>