<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/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>Manu Cohen-Yashar&amp;#39;s Blog</title><link>http://blogs.microsoft.co.il/blogs/applisec/</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>The Identity and Access tool was updated</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/05/07/the-identity-and-access-tool-was-updated.aspx</link><pubDate>Tue, 07 May 2013 21:52:19 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:2006641</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=2006641</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/05/07/the-identity-and-access-tool-was-updated.aspx#comments</comments><description>&lt;p&gt;I worked on a customer machine and used the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/e21bf653-dfe1-4d81-b3d3-795cb104066e"&gt;identity and access tool&lt;/a&gt; to enable Identity Federation. When I looked at the config that was produced by the tool I saw something strange.&lt;/p&gt;  &lt;p&gt;Instead of the good old configuration:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;issuerNameRegistry &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;type&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, &lt;br /&gt;        System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
     &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;trustedIssuers&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;thumbprint&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;9B74CB2F320F7AAFC156E1252270B1DC01EF40D0&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;name&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;LocalSTS&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;/&amp;gt;
     &amp;lt;/&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;trustedIssuers&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;issuerNameRegistry&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The tool produced the following:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;issuerNameRegistry &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;type&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, &lt;br /&gt;                           System.IdentityModel.Tokens.ValidatingIssuerNameRegistry&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;authority &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;name&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;LocalSTS&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;keys&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;thumbprint&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;9B74CB2F320F7AAFC156E1252270B1DC01EF40D0&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;/&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;keys&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;validIssuers&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;name&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;LocalSTS&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;/&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;validIssuers&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
   &amp;lt;/&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;authority&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;
 &amp;lt;/&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;issuerNameRegistry&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Well it turns out that identity and access tool was upgraded and the new issuerNameRegistry configuration provide better token validation.&lt;/p&gt;

&lt;p&gt;More details can be found at &lt;b&gt;Vittorio Bertocci&lt;/b&gt;&amp;#160;&lt;a href="http://www.cloudidentity.com/blog/2013/03/25/a-refresh-of-the-identity-and-access-tool-for-vs-2012/"&gt;blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The update can be found &lt;a href="http://visualstudiogallery.msdn.microsoft.com/e21bf653-dfe1-4d81-b3d3-795cb104066e"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope this helps&lt;/p&gt;

&lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=2006641" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Identity/default.aspx">Identity</category></item><item><title>My Talk in the SDP 2013</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/05/06/my-talk-in-the-sdp-2013.aspx</link><pubDate>Mon, 06 May 2013 18:06:56 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:2001008</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=2001008</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/05/06/my-talk-in-the-sdp-2013.aspx#comments</comments><description>&lt;p&gt;Today I spoke about web identities and about Azure data sync.&lt;/p&gt;  &lt;p&gt;In the web identities talk I spoke about the identity concept and about the open ID, SAML and OAuth standards.&lt;/p&gt;  &lt;p&gt;In the Azure data sync talk I spoke about the value of sync, the Microsoft synchronization framework (MSF) and the Azure data sync service (which is based on MSF)&lt;/p&gt;  &lt;p&gt;Tomorrow I will speak about cryptography in .Net and explore different types of encryption algorithms and signing APIs.&lt;/p&gt;  &lt;p&gt;You can find the slide deck here: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/WebIdentities.zip"&gt;Web Idenytities&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/AzureDataSyncServices.zip"&gt;Azure Data Sync&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/CrypographyInC#.zip"&gt;Cryptography in .Net&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can find the code demo of the cryptography talk &lt;a href="http://blogs.microsoft.co.il/blogs/applisec/CryptographyDemo.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Hope you enjoyed the show&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=2001008" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Identity/default.aspx">Identity</category></item><item><title>Subscribe to Windows Azure Using Your Organization ID</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/29/subscribe-to-windows-azure-using-your-organization-id.aspx</link><pubDate>Mon, 29 Apr 2013 20:12:07 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1975574</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1975574</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/29/subscribe-to-windows-azure-using-your-organization-id.aspx#comments</comments><description>&lt;p&gt;Until recently, you could only sign up for a new Windows Azure subscription using your Microsoft account (LiveID) It means that your administration account is governed by a private user account. &lt;/p&gt;  &lt;p&gt;This is a major security threat. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The account credentials are simple user name and password (which could be easily stolen)&lt;/li&gt;    &lt;li&gt;No “Multi factor authentication” is possible&lt;/li&gt;    &lt;li&gt;No policy and management is enforced on the administration identity&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;All this is changing now with Windows Azure Active Directory (&lt;a href="http://www.windowsazure.com/en-us/manage/services/identity/what-is-windows-azure-active-directory/"&gt;WAAD&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Now you can &lt;a href="https://account.windowsazure.com/organization"&gt;Sign-In&lt;/a&gt; to windows Azure as an organization !!! &lt;/p&gt;  &lt;p&gt;After you sign up to Azure as an organization, a cloud based &lt;a href="http://technet.microsoft.com/en-us/library/jj573650"&gt;tenant&lt;/a&gt; is automatically provisioned in WAAD to represent your organization.&lt;/p&gt;  &lt;p&gt;Once this tenant has been created, an admin can then issue organizational accounts to each of its employees and assign licenses that will enable them to login to Windows Azure.   &lt;br /&gt;The tenant identities can be synchronized with your on-premises AD and managed as a directory in the cloud.&lt;/p&gt;  &lt;p&gt;It means that you can use your home authentication method (for example: smart-card with a pin number) to authenticate to Azure. You can revoke users from a single location and enforce password policies.&lt;/p&gt;  &lt;p&gt;The following &lt;a href="https://login.microsoftonline.com/login.srf?wa=wsignin1.0&amp;amp;rpsnv=2&amp;amp;ct=1367265815&amp;amp;rver=6.1.6206.0&amp;amp;wp=SAPI_LONG&amp;amp;wreply=https:%2F%2Fmanage.windowsazure.com:443%2F%3Fwhr%3Dazure.com&amp;amp;lc=1033&amp;amp;id=500879&amp;amp;cbcxt=azu&amp;amp;whr=azure.com&amp;amp;cbcxt=azu"&gt;login&lt;/a&gt; page can be used to sign-in to azure with your organization account.&lt;/p&gt;  &lt;p&gt;A good place to start learning about WAAD can be found &lt;a href="http://www.windowsazure.com/en-us/manage/services/identity/"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1975574" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/WAAD/default.aspx">WAAD</category></item><item><title>How to Encode a Certificate</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/22/how-to-encode-a-certificate.aspx</link><pubDate>Mon, 22 Apr 2013 18:42:45 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1939165</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1939165</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/22/how-to-encode-a-certificate.aspx#comments</comments><description>&lt;p&gt;It is common to upload / transfer certificates as base64 strings.    &lt;br /&gt;A common example is Azure Management API &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee460817.aspx"&gt;Add Service Certificate&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;To encode a certificate all you have to do is simply encode the certificate file.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;encodedClientCert = &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Convert&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.ToBase64String(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;File&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.ReadAllBytes(&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;Client.Cer&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;));&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;To create a certificate out of base64 string is as easy:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;str = &lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;base64string representing a certificate&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;;
&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;psw = &lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;password for certificates with a private key&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;;
&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;cert = &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;X509Certificate2&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Convert&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.FromBase64String(str), psw);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Hope this helps&lt;/p&gt;

&lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1939165" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category></item><item><title>Uploading Large Files to Blob Storage</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/22/uploading-large-files-to-blob-storage.aspx</link><pubDate>Mon, 22 Apr 2013 18:18:10 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1939076</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1939076</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/22/uploading-large-files-to-blob-storage.aspx#comments</comments><description>&lt;p&gt;It you will try to upload a large file (2Mb and larger) to blob storage it is likely that you will get the following timeout exception: “StorageServerException : Operation could not be completed within the specified time.”&lt;/p&gt;  &lt;p&gt;The solution is to do things in parallel.&lt;/p&gt;  &lt;p&gt;Fortunately blob storage has a simple API for parallel upload.   &lt;br /&gt;&lt;span style="background:white;color:black;"&gt;     &lt;br /&gt;blobClient.ParallelOperationThreadCount = 20;&lt;/span&gt;&lt;/p&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;p&gt;To use it it is required to open the max number of outgoing connection using &lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:white;color:#2b91af;"&gt;ServicePointManager&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.DefaultConnectionLimit&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The following method will demonstrate that:&lt;/p&gt;

&lt;div id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:90f69d5b-da8f-4820-921d-f7e0c5282e72" class="wlWriterEditableSmartContent" style="float:none;padding-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;"&gt;
&lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt;
&lt;li&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; LoadLargeBlob(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; storageAccountName, &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; storageAccountKey)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;ServicePointManager&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.DefaultConnectionLimit = 20;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; storageConnectionString = &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.Format(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;DefaultEndpointsProtocol=https;AccountName={&lt;/span&gt;&lt;span style="background:#ffffff;color:#3cb371;"&gt;0}&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;;AccountKey={&lt;/span&gt;&lt;span style="background:#ffffff;color:#3cb371;"&gt;1}&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;storageAccountName, storageAccountKey);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;CloudStorageAccount&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; account = &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;CloudStorageAccount&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.Parse(storageConnectionString);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; blobClient = account.CreateCloudBlobClient();&lt;/span&gt;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;blobClient.ParallelOperationThreadCount = 20;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; container = blobClient.GetContainerReference(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;myContainer&amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;container.CreateIfNotExist();&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; blob = container.GetBlobReference(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;largeblob&amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;blob.UploadFile(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;largefile&amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Hope this helps&lt;/p&gt;

&lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1939076" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category></item><item><title>How To Find a Certificate in the Certificate Store</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/21/how-to-find-a-certificate-in-the-certificate-store.aspx</link><pubDate>Sun, 21 Apr 2013 12:48:18 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1932351</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1932351</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/21/how-to-find-a-certificate-in-the-certificate-store.aspx#comments</comments><description>&lt;p&gt;I wrote a nice helper class that helps me find certificates installed on my machine.&lt;/p&gt;  &lt;p&gt;Here is the code:&lt;/p&gt;  &lt;div id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:740de49b-76fc-4dd2-943f-568a24fafb64" class="wlWriterEditableSmartContent" style="float:none;padding-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;CertificateHelper&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="background:#ffffff;color:#000000;"&gt;{&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Certificate2&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; FindCertificateByThumbprint(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; certificateThumbprint)&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;{&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; res = FindCertificateByThumbprint(certificateThumbprint, &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Store&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;(&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreName&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.My, &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreLocation&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.CurrentUser)) ??&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                      &lt;span style="background:#ffffff;color:#000000;"&gt;FindCertificateByThumbprint(certificateThumbprint, &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Store&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;(&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreName&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.My, &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreLocation&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.LocalMachine));&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; (res == &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;throw&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;Exception&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.Format(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;No certificate found with the thumbprint {&lt;/span&gt;&lt;span style="background:#ffffff;color:#3cb371;"&gt;0}&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt; &amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;, certificateThumbprint));&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; res;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;}&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Certificate2&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; FindCertificateByName(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; subjectName)&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;{&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; res = FindCertificateByName(subjectName, &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Store&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;(&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreName&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.My, &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreLocation&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.CurrentUser)) ??&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                      &lt;span style="background:#ffffff;color:#000000;"&gt;FindCertificateByName(subjectName, &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Store&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;(&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreName&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.My, &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;StoreLocation&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.LocalMachine));&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; (res == &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;throw&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;Exception&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.Format(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;No certificate found with the subjectName {&lt;/span&gt;&lt;span style="background:#ffffff;color:#3cb371;"&gt;0}&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt; &amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;, subjectName));&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; res;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;}&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Certificate2&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; FindCertificateByThumbprint(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; certificateThumbprint, &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Store&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; store)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;{&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Certificate2Collection&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; certCollection = &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Open the certificate store for the current user.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;store.Open(&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;OpenFlags&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.ReadOnly);&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Find the certificate with the specified thumbprint.&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;certCollection = store.Certificates.Find(&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509FindType&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.FindByThumbprint,&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;certificateThumbprint,&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;false&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;);&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Close the certificate store.&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;store.Close();&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Check to see if a matching certificate was found.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; (0 == certCollection.Count)&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// A matching certificate was found.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; certCollection[0];&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;}&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Certificate2&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; FindCertificateByName(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; subjectName, &lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Store&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; store)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;{&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509Certificate2Collection&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; certCollection = &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Open the certificate store for the current user.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;store.Open(&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;OpenFlags&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.ReadOnly);&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Find the certificate with the specified thumbprint.&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;certCollection = store.Certificates.Find(&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;X509FindType&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.FindBySubjectDistinguishedName,&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;subjectName,&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;false&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;);&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Close the certificate store.&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;store.Close();&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// Check to see if a matching certificate was found.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; (0 == certCollection.Count)&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#008000;"&gt;// A matching certificate was found.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; certCollection[0];&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;        &lt;span style="background:#ffffff;color:#000000;"&gt;}&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="background:#ffffff;color:#000000;"&gt;}&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Hope this helps&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1932351" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category></item><item><title>Upload a Certificate Authority to Azure WebRole</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/21/upload-a-certificate-authority-to-azure-webrole.aspx</link><pubDate>Sun, 21 Apr 2013 12:40:40 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1932322</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1932322</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/21/upload-a-certificate-authority-to-azure-webrole.aspx#comments</comments><description>&lt;p&gt;If you want to use a client certificate as a client credential you have to make sure the role machine knows your client’s certificate issuer. If your client certificate was created by a self signed CA (Certificate Authority) it means that you have to upload the CA itself to the role’s trusted root certificate authority certificate store.&lt;/p&gt;  &lt;p&gt;The problem is that for some reason uploading a certificate to the trusted root certificate authority certificate store is NOT supported for web roles.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_1E954FDB.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_35C008B2.png" width="709" height="227" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The solution is simply: Upload the CA certificate to the “My” certificate store and then copy it manually to the trusted root certificate authority certificate store.&lt;/p&gt;  &lt;p&gt;Here is the code that execute the copy certificate process. I run this code from WebRole.cs&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;private void &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;InstallCACertInRootCA(&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;thumbprint)
{
   &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;try
   &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;{
      &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;cert = &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;CertificateHelper&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.FindCertificateByThumbprint(thumbprint);

      &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;X509Store &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;store = &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;X509Store&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;StoreName&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.Root, &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;StoreLocation&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.LocalMachine);
      store.Open(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;OpenFlags&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.ReadWrite);
      store.Add(&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;X509Certificate2&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(cert));
      store.Close();
    }
    &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;catch &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Exception &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;ex)
    {
       &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Logger&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.Error(ex);
    }       
 }&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The certificateHelper is a simple helper I wrote to load the certificate from the “My” certificate store. Once I have the certificate I just copy it to the Root Certificate Authorities store. (I will post the details in a future &lt;a href="http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/21/how-to-find-a-certificate-in-the-certificate-store.aspx"&gt;post&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;One last thing: The code has to run in elevated mode.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;Runtime &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;executionContext&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;elevated&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Hope this helps&lt;/p&gt;

&lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1932322" width="1" height="1"&gt;</description></item><item><title>Client Certificates in Windows Azure</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/07/client-certificates-in-windows-azure.aspx</link><pubDate>Sun, 07 Apr 2013 20:34:20 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1869301</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1869301</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/07/client-certificates-in-windows-azure.aspx#comments</comments><description>&lt;p&gt;A simple method to authenticate customers is by using client certificates. Smart card and enterprise customers are just two basic scenarios.&lt;/p&gt;  &lt;p&gt;Lets describe how to implement client certificate authentication in a simple Web API service deployed in Windows Azure.&lt;/p&gt;  &lt;p&gt;The first thing we need to do is to establish an SSL channel. Client certificates can only be attached to a SSL request. To do that we need to create an SSL certificate and sign it by a trusted CA (Certificate Authority). We can create a certificate request using IIS and send it to the CA. (see figure)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_6AB1DAC6.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_2273F91D.png" width="649" height="103" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;or create a self signed CA, install it to our trusted certificate store and then use it to create our SSL certificates.&lt;/p&gt;  &lt;p&gt;Lets create a CA certificate:&lt;/p&gt; &lt;em&gt;&lt;font size="3" face="Consolas"&gt;@echo off      &lt;br /&gt;echo delete old CA certificate       &lt;br /&gt;certutil -delstore root &amp;quot;My CA&amp;quot;del MyCA.*       &lt;br /&gt;echo create My CA certificate       &lt;br /&gt;makecert -r -pe -n &amp;quot;CN=My CA&amp;quot; -ss CA -a sha1 -sky signature -cy authority -sv myCA.pvk myCA.cer       &lt;br /&gt;pvk2pfx -pvk myCA.pvk -spc myCA.cer -pfx myCA.pfx -po password echo install My CA certificatecertutil.exe -addstore root myCA.cer&lt;/font&gt;&lt;/em&gt;   &lt;p&gt;Now its time to create a new SSL certificate using our CA:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="3" face="Consolas"&gt;Echo off        &lt;br /&gt;del server.*         &lt;br /&gt;Echo Create SSL certificate         &lt;br /&gt;makecert -pe -n &amp;quot;CN=server&amp;quot; -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1         &lt;br /&gt;&amp;#160; -ic myCA.cer -iv myCA.pvk –sp&amp;#160; &amp;quot;Microsoft RSA SChannel Cryptographic Provider&amp;quot;         &lt;br /&gt;&amp;#160; -sy 12 -sv server.pvk server.cer         &lt;br /&gt;pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx -po 123456&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The final step is to create a client certificate using our CA. This certificate will be used by clients to authenticate.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="3" face="Consolas"&gt;echo off        &lt;br /&gt;echo delete existing Client certificate         &lt;br /&gt;del ClientCert.*certutil -delstore my &amp;quot;ClientCert&amp;quot;         &lt;br /&gt;echo create Client certificate         &lt;br /&gt;makecert -pe -n &amp;quot;CN=ClientCert&amp;quot; -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.2         &lt;br /&gt;&amp;#160; -ic myCA.cer -iv myCA.pvk -sv ClientCert.pvk ClientCert.cerpvk2pfx         &lt;br /&gt;&amp;#160; -pvk ClientCert.pvk -spc ClientCert.cer -pfx ClientCert.pfx -po password         &lt;br /&gt;certutil -addstore -user my ClientCert.cer&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Now we need to configure IIS to accept our client certificates. By default IIS will ignore incoming client certificates and the certificates will not be accessible in our code. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_5FA48817.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_25756F9E.png" width="387" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is very simple on a on-premises server yet in Azure it can be quite tricky. As Azure developers we are used to configure our machine using start up task. The problem is that SSL Settings configurations are enforced on existing web sites. When startup tasks are running the web site of our application was not yet created so the tasks will fail. The solution is to configure IIS in code. Fortunately the NuGet package “Microsoft.Web.Administration” provides all the API we need.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;using &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;serverManager = &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;ServerManager&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;())
{
   &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;try
   &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;{
       &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;siteName = &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;RoleEnvironment&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.CurrentRoleInstance.Id + &lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;_Web&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;;
       &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;config = serverManager.GetApplicationHostConfiguration();
       &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;accessSection = config.GetSection(&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;system.webServer/security/access&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;, siteName);
       accessSection[&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;sslFlags&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;] = &lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;@&amp;quot;SslNegotiateCert&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;;

       serverManager.CommitChanges();
&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;   }
   &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;catch &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Exception &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;ex)
   {
        ...&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;
   }
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Calling this code from our role’s OnStart method will do the job as long as we run in elevated execution: 
  &lt;br /&gt;&lt;span style="background:white;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;Runtime &lt;/span&gt;&lt;span style="background:white;color:red;"&gt;executionContext&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;=&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;elevated&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Now we need to upload both CA certificate (to trusted certificate authorities) and our SSL certificate (to the personal store) and configure an SSL endpoint&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_7652E82C.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_6A11226B.png" width="624" height="165" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Details about uploading and installing the CA certificate in the web role machine can be found in a post I wrote &lt;a href="http://blogs.microsoft.co.il/blogs/applisec/archive/2013/04/21/upload-a-certificate-authority-to-azure-webrole.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_5DCF5CAA.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_21171273.png" width="527" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The certificates must be uploaded independently to the hosted service using the portal or the management &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee460817.aspx"&gt;API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now we can create a delegation handler that will authenticate all incoming requests and plug it into the ASP.NET WEB API pipeline.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;public class &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;CertificateAuthHandler &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;: &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;DelegatingHandler
&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;{
  &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;public &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;CertificateAuthHandler()
  &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;protected override &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;System.Threading.Tasks.&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Task&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;HttpResponseMessage&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;gt;
            SendAsync(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;HttpRequestMessage &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;request, System.Threading.&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;CancellationToken &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;cancellationToken)
  {
      &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;X509Certificate2 &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;certificate = request.GetClientCertificate();
      &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(certificate == &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;null &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;|| !CertificateValidator.IsValid(certificate))
      {
         &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Logger&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.Warn(&lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;No certificate was found or it is invalid&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;);
         &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Task&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;HttpResponseMessage&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;&amp;gt;.Factory.StartNew(
                    () =&amp;gt; request.CreateResponse(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;HttpStatusCode&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.Unauthorized));

      }
       &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;Thread&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.CurrentPrincipal = CertificateValidator.GetPrincipal(certificate);
            &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;return base&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.SendAsync(request, cancellationToken);
  }
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;to plug the delegation handler let us update WebApiConfig.cs&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;public static class &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;WebApiConfig
&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;{
   &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;public static void &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;Register(&lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;HttpConfiguration &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;config)
   {
      config.Routes.MapHttpRoute(
         name: &lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;DefaultApi&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;,
         routeTemplate: &lt;/span&gt;&lt;span style="background:white;color:#a31515;"&gt;&amp;quot;api/{controller}/{id}&amp;quot;&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;,
         defaults: &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;{ id = &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;RouteParameter&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;.Optional },
         constraints: &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;null &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;);

       config.EnableQuerySupport();
       config.MessageHandlers.Add(&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:white;color:#2b91af;"&gt;CertificateAuthHandler&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;());

    &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;}
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;Now we are ready to call our service on an SSL REST endpoint which is protected by a client certificate.&lt;/p&gt;

&lt;p&gt;Hope this helps&lt;/p&gt;

&lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1869301" width="1" height="1"&gt;</description></item><item><title>New Azure Improvements</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/12/24/new-azure-improvements.aspx</link><pubDate>Mon, 24 Dec 2012 14:10:57 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1588517</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1588517</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/12/24/new-azure-improvements.aspx#comments</comments><description>&lt;p&gt;On December 21th Microsoft released important improvements for its Azure services which include the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Mobile Services: Job scheduler support, Europe Region Support, Command Line Support&lt;/li&gt;    &lt;li&gt;Web Sites: Ability to scale up to 6 shared instances and 10 reserved VMs, integrated source control in custom create wizard&lt;/li&gt;    &lt;li&gt;SQL Data Sync: Now supported in the new HTML portal&lt;/li&gt;    &lt;li&gt;ACS Management: Now supported in the new HTML portal&lt;/li&gt;    &lt;li&gt;Media Services: New job and task management, blob storage support, reserved compute&lt;/li&gt;    &lt;li&gt;Virtual Network: Simplified workflow for custom scenarios&lt;/li&gt;    &lt;li&gt;Windows Azure Store: Now available in more countries&lt;/li&gt;    &lt;li&gt;Subscription Filtering Support &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More information can be found at Kirill Gavrylyuk blog &lt;a href="http://weblogs.asp.net/scottgu/archive/2012/12/21/great-updates-to-windows-azure-mobile-services-web-sites-sql-data-sync-acs-media-more.aspx"&gt;post&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1588517" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category></item><item><title>Visual Studio Identity Support Works with .Net 4.5 Only</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/11/21/visual-studio-identity-support-works-with-net-4-5-only.aspx</link><pubDate>Wed, 21 Nov 2012 07:29:48 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1463895</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1463895</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/11/21/visual-studio-identity-support-works-with-net-4-5-only.aspx#comments</comments><description>&lt;p&gt;Visual Studio has an Identity and Access tool extension which enables simple integration of claim based identity authentication into a web project (WCF and ASP.Net)&lt;/p&gt;  &lt;p&gt;It turns out that the tool depends on Windows Identity Framework (WIF) 4.5 which was integrated into the .Net framework and is not compatible with WIF 4.0.&lt;/p&gt;  &lt;p&gt;For &lt;strong&gt;.Net 4.5 only&lt;/strong&gt; applications you will see the following when you right click the project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_371D19B0.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_79408233.png" width="301" height="415" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;“&lt;strong&gt;Enable Windows Azure Authentication&lt;/strong&gt;” integrate your project with Windows Azure Active Directory (WAAD).&amp;#160; “&lt;strong&gt;Identity and Access&lt;/strong&gt;” integrate your project with Windows Azure Access Control Service (ACS) or any other STS (Identity Provider) including a test STS which will run on your development machine.&lt;/p&gt;  &lt;p&gt;If you install the Identity and Access tool extension and you don’t see the above option just change your framework to 4.5.&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1463895" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/WIF/default.aspx">WIF</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/ACS/default.aspx">ACS</category></item><item><title>Where is Azure’s previous portal?</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/11/07/where-is-azure-s-previous-portal.aspx</link><pubDate>Wed, 07 Nov 2012 17:12:23 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1421340</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1421340</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/11/07/where-is-azure-s-previous-portal.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;Few days ago the new portal was upgraded. The service bus was maid available (and few other new features) but the CTP announcements and the link to the previous portal was removed.&lt;/p&gt;    &lt;p&gt;Unfortunately as for today not all Azure features are available in the new portal, so the previous portal is still required. For example to use ACS or Data Sync we have to use the previous portal.&lt;/p&gt;    &lt;p&gt;To access the previous portal click on your name:&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_263A17F8.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_24894C24.png" width="678" height="29" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then a new menu will be opened, and a nice menu item will point you to the previous portal.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_49A69690.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_6E57AE07.png" width="294" height="365" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1421340" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx">Azure</category></item><item><title>Concurrency Profiler on Visual Studio 2012 was moved</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/10/17/concurrency-profiler-on-visual-studio-2012-was-moved.aspx</link><pubDate>Thu, 18 Oct 2012 03:07:01 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1360576</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1360576</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/10/17/concurrency-profiler-on-visual-studio-2012-was-moved.aspx#comments</comments><description>&lt;p&gt;I wanted to run a concurrency profiling on my app so I activated the performance wizard and chose the last option (concurrency) but the results where nothing like I expected. The report I got looked similar to the sampling report presenting information about contention.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_44ED59A6.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_433C8DD2.png" width="377" height="326" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I looked around and found that the good old concurrency profiling is now called “Concurrency Visualizer”.    &lt;br /&gt;Click it and you’ll get all the concurrency reports.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_75BFEB44.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_18347A00.png" width="577" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1360576" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category></item><item><title>Moles in Visual Studio 2012 – The new Fake feature</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/10/11/moles-in-visual-studio-2012-the-new-fake-feature.aspx</link><pubDate>Thu, 11 Oct 2012 17:25:57 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1346059</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1346059</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/10/11/moles-in-visual-studio-2012-the-new-fake-feature.aspx#comments</comments><description>&lt;p&gt;Unit testing is not easy. One of the greatest challenges is to identify external dependencies and provide mock objects and behaviors. Few years ago Microsoft Research came out with an infrastructure called “&lt;a href="http://research.microsoft.com/en-us/projects/moles/"&gt;moles&lt;/a&gt;” designed to solve this problem. With moles is was extremely easy to inject mock behavior and functionality to existing code (including code we don’t own such as the .net framework itself)&lt;/p&gt;  &lt;p&gt;Well In Visual Studio 2012 moles was adopted and introduced as the “Fake” feature.   &lt;br /&gt;Now all we need to do to inject mock behavior to external code is create a fake assembly by right clicking the referenced assembly and choosing “Add Fake Assembly”. Now all left to do is to inject mock behavior to the new mock objects and use it in our test.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_69463DE7.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_60E26890.png" width="341" height="260" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The details about using the fake objects and injecting mock functionality can be found &lt;a href="http://msdn.microsoft.com/en-us/library/hh549175.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1346059" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category></item><item><title>Connecting Cloud Services to Azure Virtual Network</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/10/10/connecting-cloud-services-to-azure-virtual-network.aspx</link><pubDate>Wed, 10 Oct 2012 14:53:23 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1343784</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1343784</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/10/10/connecting-cloud-services-to-azure-virtual-network.aspx#comments</comments><description>&lt;p&gt;A customer asked me if it is possible to connect cloud services to azure virtual network.&lt;/p&gt;  &lt;p&gt;When creating a new virtual machine we specify the network to be used but when creating a new cloud service the portal does not provide a method to connect the new cloud service to an existing virtual network.&lt;/p&gt;  &lt;p&gt;Well It is possible !!!   &lt;br /&gt;Michael Washam wrote a nice &lt;a href="http://michaelwasham.com/2012/08/06/connecting-web-or-worker-roles-to-a-simple-virtual-network-in-windows-azure/"&gt;blog&lt;/a&gt; about it.&lt;/p&gt;  &lt;p&gt;The Idea is to put &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/jj157100.aspx"&gt;NetWorkConfiguration&lt;/a&gt; in the config file (.cscfg) of your deployment.&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1343784" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/dev/default.aspx">dev</category></item><item><title>Discover Identity Providers from ACS</title><link>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/09/19/discover-identity-providers-from-acs.aspx</link><pubDate>Thu, 20 Sep 2012 02:13:32 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1295591</guid><dc:creator>Manu Cohen-Yashar</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/applisec/rsscomments.aspx?PostID=1295591</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/09/19/discover-identity-providers-from-acs.aspx#comments</comments><description>&lt;p&gt;A customer asked me how to dynamically discover the identity providers of a certain namespace in ACS.&lt;/p&gt;  &lt;p&gt;The request is simple:    &lt;br /&gt;Let’s assume we have an application (RP) in http:\\localhost\myApp&lt;/p&gt;  &lt;p&gt;If will send the following request to acs:   &lt;br /&gt;&lt;a title="https://mocdemo.accesscontrol.windows.net:443/v2/metadata/IdentityProviders.js?protocol=wsfederation&amp;amp;realm=http%3a%2f%2flocalhost&amp;amp;version=1.0" href="https://xxx.accesscontrol.windows.net:443/v2/metadata/IdentityProviders.js?protocol=wsfederation&amp;amp;realm=http%3a%2f%2flocalhost%2fmyapp%2f&amp;amp;version=1.0"&gt;https://xxx.accesscontrol.windows.net:443/v2/metadata/IdentityProviders.js?protocol=wsfederation&amp;amp;realm=http%3a%2f%2flocalhost%2fmyapp%2f&amp;amp;version=1.0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;we will get the following json in the response&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color:#ffff00;"&gt;[{&amp;quot;Name&amp;quot;:&amp;quot;Windows Live™ ID&amp;quot;,&amp;quot;LoginUrl&amp;quot;:&amp;quot;&lt;/font&gt;&lt;a href="https://login.live.com/login.srf?wa=wsignin1.0&amp;amp;wtrealm=https%3a%2f%2faccesscontrol.windows.net%2f&amp;amp;wreply=https%3a%2f%2fxxx.accesscontrol.windows.net%3a443%2fv2%2fwsfederation&amp;amp;wp=MBI_FED_SSL&amp;amp;wctx=cHI9d3NmZWRlcmF0aW9uJnJtPWh0dHAlM2ElMmYlMmZsb2NhbGhvc3Q1&amp;quot;,&amp;quot;LogoutUrl&amp;quot;:&amp;quot;https://login.live.com/login.srf?wa=wsignout1.0&amp;quot;,&amp;quot;ImageUrl&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;EmailAddressSuffixes&amp;quot;:[]}"&gt;&lt;font style="background-color:#ffff00;"&gt;https://login.live.com/login.srf?wa=wsignin1.0&amp;amp;wtrealm=https%3a%2f%2faccesscontrol.windows.net%2f&amp;amp;wreply=https%3a%2f%2fxxx.accesscontrol.windows.net%3a443%2fv2%2fwsfederation&amp;amp;wp=MBI_FED_SSL&amp;amp;wctx=cHI9d3NmZWRlcmF0aW9uJnJtPWh0dHAlM2ElMmYlMmZsb2NhbGhvc3Q1&amp;quot;,&amp;quot;LogoutUrl&amp;quot;:&amp;quot;https://login.live.com/login.srf?wa=wsignout1.0&amp;quot;,&amp;quot;ImageUrl&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;EmailAddressSuffixes&amp;quot;:[]}&lt;/font&gt;&lt;/a&gt;&lt;font style="background-color:#ffff00;"&gt;,     &lt;br /&gt;&lt;/font&gt;&amp;#160;&lt;font style="background-color:#cccccc;"&gt;{&amp;quot;Name&amp;quot;:&amp;quot;Google&amp;quot;,&amp;quot;LoginUrl&amp;quot;:&amp;quot;https://www.google.com/accounts/o8/ud?openid.ns=http%3a%2f%2fspecs.openid.net%2fauth%2f2.0&amp;amp;openid.mode=checkid_setup&amp;amp;openid.claimed_id=http%3a%2f%2fspecs.openid.net%2fauth%2f2.0%2fidentifier_select&amp;amp;openid.identity=http%3a%2f%2fspecs.openid.net%2fauth%2f2.0%2fidentifier_select&amp;amp;openid.realm=https%3a%2f%2fxxx.accesscontrol.windows.net%3a443%2fv2%2fopenid&amp;amp;openid.return_to=https%3a%2f%2fxxx.accesscontrol.windows.net%3a443%2fv2%2fopenid%3fcontext%3dcHI9d3NmZWRlcmF0aW9uJnJtPWh0dHAlM2ElMmYlMmZsb2NhbGhvc3QmcHJvdmlkZXI9R29vZ2xl0&amp;amp;openid.ns.ax=http%3a%2f%2fopenid.net%2fsrv%2fax%2f1.0&amp;amp;openid.ax.mode=fetch_request&amp;amp;openid.ax.required=email%2cfullname%2cfirstname%2clastname&amp;amp;openid.ax.type.email=http%3a%2f%2faxschema.org%2fcontact%2femail&amp;amp;openid.ax.type.fullname=http%3a%2f%2faxschema.org%2fnamePerson&amp;amp;openid.ax.type.firstname=http%3a%2f%2faxschema.org%2fnamePerson%2ffirst&amp;amp;openid.ax.type.lastname=&lt;/font&gt;&lt;font style="background-color:#cccccc;"&gt;http%3a%2f%2faxschema.org%2fnamePerson%2flast&amp;quot;,&amp;quot;LogoutUrl&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;ImageUrl&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;&lt;/font&gt;&lt;font style="background-color:#cccccc;"&gt;EmailAddressSuffixes&amp;quot;:[]},&lt;/font&gt;&lt;font style="background-color:#dd8484;"&gt;{&amp;quot;&lt;/font&gt;&lt;font style="background-color:#dd8484;"&gt;Name&amp;quot;:&amp;quot;Yahoo!&amp;quot;,&amp;quot;LoginUrl&amp;quot;:&amp;quot;https://open.login.yahooapis.com/openid/op/auth?openid.ns=http%3a%2f%2fspecs.openid.net%2fauth%2f2.0&amp;amp;openid.mode=checkid_setup&amp;amp;openid.claimed_id=http%3a%2f%2fspecs.openid.net%2fauth%2f2.0%2fidentifier_select&amp;amp;openid.identity=http%3a%2f%2fspecs.openid.net%2fauth%2f2.0%2fidentifier_select&amp;amp;openid.realm=https%3a%2f%2fxxx.accesscontrol.windows.net%3a443%2fv2%2fopenid&amp;amp;openid.return_to=https%3a%2f%2fxxx.accesscontrol.windows.net%3a443%2fv2%2fopenid%3fcontext%3dcHI9d3NmZWRlcmF0aW9uJnJtPWh0dHAlM2ElMmYlMmZsb2NhbGhvc3QmcHJvdmlkZXI9WWFob28h0&amp;amp;openid.ns.ax=http%3a%2f%2fopenid.net%2fsrv%2fax%2f1.0&amp;amp;openid.ax.mode=fetch_request&amp;amp;openid.ax.required=email%2cfullname%2cfirstname%2clastname&amp;amp;openid.ax.type.email=http%3a%2f%2faxschema.org%2fcontact%2femail&amp;amp;openid.ax.type.fullname=http%3a%2f%2faxschema.org%2fnamePerson&amp;amp;openid.ax.type.firstname=http%3a%2f%2faxschema.org%2fnamePerson%2ffirst&amp;amp;openid.ax.type.lastname=http%3a%2f%2faxschema.org%2fnamePerson%2flast&amp;quot;,&amp;quot;LogoutUrl&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;ImageUrl&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;EmailAddressSuffixes&amp;quot;:[]}]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color:#ffffff;"&gt;Now &lt;/font&gt;we can use (http get) the &lt;strong&gt;LoginUrl&lt;/strong&gt; of each provider which will send us directly to its login page.&lt;/p&gt;  &lt;p&gt;If we call ACS with: &lt;a title="https://mocdemo.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&amp;amp;wtrealm=http%3a%2f%2flocalhost:2858%2f" href="https://xxx.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&amp;amp;wtrealm=http%3a%2f%2flocalhost%2fmyapp%2f"&gt;https://xxx.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&amp;amp;wtrealm=http%3a%2f%2flocalhost%2fmyapp%2f&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We will get the good old identity providers list from ACS from which the user can choose his identity provider.&lt;/p&gt;  &lt;p&gt;these links can be easily found in the portal application integration –&amp;gt; login page integration &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_34803E96.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_3D209722.png" width="636" height="386" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1295591" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/ACS/default.aspx">ACS</category><category domain="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Identity/default.aspx">Identity</category></item></channel></rss>