<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dalle &#38; DXter &#187; PKI</title>
	<atom:link href="http://poweradmin.se/blog/tag/pki/feed/" rel="self" type="application/rss+xml" />
	<link>http://poweradmin.se/blog</link>
	<description>The Power Administrators</description>
	<lastBuildDate>Sat, 03 Mar 2012 21:54:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>PKI lockdown for internal Enterprise Roots using CAPolicy.inf</title>
		<link>http://poweradmin.se/blog/2011/11/04/pki-lockdown-for-internal-enterprise-roots-using-capolicy-inf/</link>
		<comments>http://poweradmin.se/blog/2011/11/04/pki-lockdown-for-internal-enterprise-roots-using-capolicy-inf/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 11:35:14 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/11/04/pki-lockdown-for-internal-enterprise-roots-using-capolicy-inf/</guid>
		<description><![CDATA[Sorry for being absence from the blog right now. A lot of time consuming stuff is happening at work right now, but I will better myself, I promise! A very common problem I see regarding ADCS and PKI is that &#8230; <a href="http://poweradmin.se/blog/2011/11/04/pki-lockdown-for-internal-enterprise-roots-using-capolicy-inf/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F11%252F04%252Fpki-lockdown-for-internal-enterprise-roots-using-capolicy-inf%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22PKI%20lockdown%20for%20internal%20Enterprise%20Roots%20using%20CAPolicy.inf%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Sorry for being absence from the blog right now. A lot of time consuming stuff is happening at work right now, but I will better myself, I promise! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Blinkar" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-winkingsmile11.png"></p>
<p>A very common problem I see regarding ADCS and PKI is that many structures “survive them self” and are used for purposes that they were not initially designed for.</p>
<p>Some problems that I run in to are that people initially install an classic “next-next-finish” Enterprise Root “just to issue some internal SSL certificates” and after two or three years, the CA has got Sub-CA’s for other Issuing or NAP CA’s and suddenly we have requirements of publically available CRL’s for IP-HTTPS in DirectAccess, or even worse, external parties are trusting this structure for their usage or Sub-CA!</p>
<p>So I thought that is a good idea to “lock down” a PKI to the intended purpose of what the structure was actually designed for.</p>
<p>This can very, very easily be done by using (creating) the %WINDIR%\CAPolicy.inf <strong><u>before</u></strong> your install your Enterprise Root.</p>
<p>The following CAPolicy.inf is an example of a PKI lockdown for an internal Enterprise Root:</p>
<p><strong>[Version]<br />Signature=”$Windows NT$”</strong></p>
<p><strong>[PolicyStatementExtension]<br />Policies=InternalUseOnly</strong></p>
<p><strong>[InternalUseOnly]<br />OID=2.5.29.32.0<br />Notice=&#8221;This PKI is intended for internal use only.&#8221;</strong></p>
<p><strong>[BasicConstraintsExtension]<br />PathLength=0<br />Critical=Yes</strong></p>
<p><strong>[Certsrv_Server]<br />LoadDefaultTemplates=False</strong></p>
<p>&nbsp;</p>
<p>So what does all this text mean? Well, the <strong>PolicyStatementExtension</strong> section defines the associated policies with the CA. We specify a policy that we call “<strong>InternalUseOnly</strong>”. First when I tested this, the ADCS wizard did not parse the content of that section if didn’t had and OID (I just wanted the populate the User Notice field).</p>
<p>A quick phone call to my dear friend and mentor Hasain Alshakarti @ <a href="http://www.secadmins.com">http://www.secadmins.com</a> confirmed the conclusion that I already had come to. A OID MUST be specified. But since a Root CA have the “All Issuance Policy” by default, Hasain came up with the clever idea that we can simply walk around that problem by simply specifying that OID for our policy. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Blinkar" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-winkingsmile11.png"></p>
<p>The <strong>BasicConstraintsExtension</strong> is a very powerful section and by specifying <strong>PathLength</strong> we can specify how many levels of CA’s we allow underneath the root. A very common configuration that I usually do when I design/implement two tiers is that I have a PathLength=1 on the Root CA and a PathLength=0 on the Issuing CA.</p>
<p>The <strong>LoadDefaultTemplates</strong> part tells the ADCS setup wizard to NOT populate the default list of certificates in the <strong>certificateTemplates </strong>attribute in the <strong>pKIEnrollmentService</strong> object in Enrollment Services under Public Key Services that exists in the Configuration partition in Active Directory. By doing this, we do not enroll any certificates “by accident” and we can ourselves choose the exact templates we want to use on our CA. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Ler" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile19.png"></p>
<p>&nbsp;</p>
<p>Here are some screenshots!</p>
<p>&nbsp;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image560.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb493.png" width="390" height="484"></a></p>
<p><strong>We can clearly see that our critical extension PathLength does not allow any Subordinay CA’s.</strong></p>
<p>&nbsp;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image561.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb494.png" width="390" height="484"></a></p>
<p><strong>We can also see that our notice text is associated with the All Issuance Policy.</strong></p>
<p><strong></strong>&nbsp;</p>
<p>// Fredrik “DXter” Jonsson</p>
<div class="shr-publisher-2775"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F11%2F04%2Fpki-lockdown-for-internal-enterprise-roots-using-capolicy-inf%2F' data-shr_title='PKI+lockdown+for+internal+Enterprise+Roots+using+CAPolicy.inf'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F11%2F04%2Fpki-lockdown-for-internal-enterprise-roots-using-capolicy-inf%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F11%2F04%2Fpki-lockdown-for-internal-enterprise-roots-using-capolicy-inf%2F' data-shr_title='PKI+lockdown+for+internal+Enterprise+Roots+using+CAPolicy.inf'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/11/04/pki-lockdown-for-internal-enterprise-roots-using-capolicy-inf/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ADCS Certificate Expiration Report Tool</title>
		<link>http://poweradmin.se/blog/2011/08/09/adcs-certificate-expiration-report-tool/</link>
		<comments>http://poweradmin.se/blog/2011/08/09/adcs-certificate-expiration-report-tool/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 22:10:31 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[DXter]]></category>
		<category><![CDATA[Power Shell]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/08/09/adcs-certificate-expiration-report-tool/</guid>
		<description><![CDATA[I want to start with a little disclaimer: The real credits for this tool does not really belong to me. This tool is using the really wonderful PSPKI PowerShell module from http://pspki.codeplex.com/ and all credits should go them for making &#8230; <a href="http://poweradmin.se/blog/2011/08/09/adcs-certificate-expiration-report-tool/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F08%252F09%252Fadcs-certificate-expiration-report-tool%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22ADCS%20Certificate%20Expiration%20Report%20Tool%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>I want to start with a little disclaimer: The real credits for this tool does not really belong to me. This tool is using the really wonderful PSPKI PowerShell module from <a title="http://pspki.codeplex.com/" href="http://pspki.codeplex.com/">http://pspki.codeplex.com/</a> and all credits should go them for making this wonderful piece of work public. I just format the output that those cmd-lets provide into a HTML based report.</p>
<p>A very common problem people have with certificates is that they realize that it’s time to renew their certificates… after they have expired! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-winkingsmile10.png"></p>
<p>&nbsp;</p>
<p>To be able to get a web based report of the certificates in an ADCS CA that is about to expire within 30 days, I wrote this small script today on the train on my way to work. It accepts two switches, <strong>–computername </strong>of the CA (which defaults to local computer if not specified) and <strong>–reportfile</strong> (defaults to a HTML-file on the current users desktop).</p>
<p>&nbsp;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image527.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb460.png" width="644" height="321"></a></p>
<p><strong>The script can be run locally on the CA if desired.</strong></p>
<p>&nbsp;</p>
<p>This opens up the report.</p>
<p>&nbsp;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image529.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb462.png" width="644" height="393"></a></p>
<p><strong>The report contains all certificates that are expiring within 30 days. This can be edited in the script.</strong></p>
<p>&nbsp;</p>
<p>I want to thank a small group of people for their input during the day.</p>
<p>&nbsp;</p>
<p>Ludwig “Ludde” Nilsson = for cosmetic input regarding the HTML report.</p>
<p>Stefan Schörling = for his support, thoughts and feedback during the development of this script.</p>
<p>Kerim Sidia = for validation of “intelligent” design.</p>
<p>Niklas Goude = for his clever idea regarding detection of the PSPKI module.</p>
<p>Hasain Alshakarti = for a good note about that the filtering is client based (very large ADCS databases will take longer time to process).</p>
<p>&nbsp;</p>
<p>Please note that this is a simple proof of concept and is not done or complete in any way. I will continue to work on this and include many more switches, etc.… but I wanted to show you guys already now what can be done if people share their knowledge and work together.</p>
<p>&nbsp;</p>
<p>The code to the script is embedded below.</p>
<p>&nbsp;</p>
<p>PKI and ADCS is fun, so go out and play! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-winkingsmile10.png"></p>
<p>&nbsp;</p>
<p>// Fredrik “DXter” Jonsson</p>
<p>&nbsp;</p>
<p><strong>#ADCS Certificate Expiration Report Tool <br />#Made by Fredrik &#8220;DXter&#8221; Jonsson (dxter@poweradmin.se) 2011-08-09 <br />#</strong><a href="http://www.poweradmin.se"><strong>http://www.poweradmin.se</strong></a></p>
<p><strong>#Get input strings <br />param( <br />&nbsp; [string] $computername = &#8220;$ENV:COMPUTERNAME&#8221;, <br />&nbsp; [string] $reportfile = &#8220;$ENV:USERPROFILE\Desktop\acert_certificate_expiration_report.html&#8221; <br />&nbsp;&nbsp; )</strong></p>
<p><strong>#Start stopwatch <br />$totalTime = New-Object -TypeName System.Diagnostics.Stopwatch <br />$totalTime.Start()</strong></p>
<p><strong>#Credits <br />Write-Host <br />Write-Host &#8220;ADCS Certificate Expiration Report Tool &#8221; -ForegroundColor &#8220;Yellow&#8221; <br />Write-Host &#8220;by Fredrik &#8220;&#8221;DXter&#8221;" Jonsson (dxter@poweradmin.se)&#8221; -ForegroundColor &#8220;Yellow&#8221; <br />Write-Host</strong></p>
<p><strong>if(Get-Module -ListAvailable -Name PKI | Where-Object { $_.name -eq &#8220;PKI&#8221; }) <br />{ <br />#Import PSPKI PowerShell module <br />if(Get-Module -Name PKI | Where-Object { $_.name -eq &#8220;PKI&#8221; }) <br />{ <br />Write-Host &#8220;PSPKI PowerShell module already imported&#8230;&#8221; -ForegroundColor &#8220;Yellow&#8221; <br />} <br />else <br />{ <br />Write-Host &#8220;Importing PSPKI PowerShell module&#8230;&#8221; -ForegroundColor &#8220;Yellow&#8221; <br />Import-Module -Name PKI <br />} <br />Write-Host</strong></p>
<p><strong>#Set variables <br />Write-Host &#8220;Setting variables&#8230;&#8221; -ForegroundColor &#8220;Yellow&#8221; <br />Write-Host <br />$caname = $computername.ToLower() <br />$domaindns = $ENV:USERDNSDOMAIN.ToLower() <br />$todaysdate = Get-Date <br />$findaldate = $todaysdate.AddMonths(1) <br />$htmlpre = &#8220;&lt;P&gt;Generated by user: $ENV:USERNAME&lt;/P&gt;&lt;P&gt;The following certificates expire before $findaldate&lt;/P&gt;&#8221; <br />$htmlpost = &#8220;&lt;P&gt;Certificate expiration information retrived from $caname.$domaindns&lt;/P&gt;&#8221; <br />$htmltitle = &#8220;Certificate expiration information from $caname.$domaindns&#8221; <br />$htmlinput = Get-CertificationAuthority &#8220;$caname.$domaindns&#8221; | Get-IssuedRequest -Filter &#8220;NotAfter -ge $(Get-Date)&#8221;, &#8220;NotAfter -le $((Get-Date).AddMonths(1))&#8221;</strong></p>
<p><strong>#Generate report <br />Write-Host &#8220;Generating report&#8230;&#8221; -ForegroundColor &#8220;Yellow&#8221; <br />Write-Host <br />$htmlinput | ConvertTo-Html -Body (Get-Date) &#8220;Report date:&#8221; -Property RequestID,RequesterName,CommonName,NotBefore,NotAfter,SerialNumber -Pre $htmlpre -Post $htmlpost -Title $htmltitle | Out-File -FilePath $reportfile</strong></p>
<p><strong>#Open report <br />Write-Host &#8220;Opening report&#8230;&#8221; -ForegroundColor &#8220;Yellow&#8221; <br />Write-Host <br />Invoke-Item $reportfile</strong></p>
<p><strong>#Warning if PSPKI is not installed <br />} <br />else <br />{ <br />Write-Host &#8220;PSPKI is not installed. Please install it from </strong><a href="http://pspki.codeplex.com/"><strong>http://pspki.codeplex.com/</strong></a><strong> &#8221; -ForegroundColor &#8220;Yellow&#8221; <br />Write-Host <br />}</strong></p>
<p><strong>#Stop stopwatch <br />$totalTime.Stop() <br />$ts = $totalTime.Elapsed <br />$totalTime = [system.String]::Format(&#8220;{0:00}:{1:00}:{2:00}&#8221;,$ts.Hours, $ts.Minutes, $ts.Seconds) <br />Write-Host &#8220;Process total time: $totalTime&#8221; -ForegroundColor Yellow <br />Write-Host</strong></p>
<div class="shr-publisher-2672"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F08%2F09%2Fadcs-certificate-expiration-report-tool%2F' data-shr_title='ADCS+Certificate+Expiration+Report+Tool'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F08%2F09%2Fadcs-certificate-expiration-report-tool%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F08%2F09%2Fadcs-certificate-expiration-report-tool%2F' data-shr_title='ADCS+Certificate+Expiration+Report+Tool'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/08/09/adcs-certificate-expiration-report-tool/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>WINSEC crew @ Microsoft Sommarkollo 2011</title>
		<link>http://poweradmin.se/blog/2011/06/30/winsec-crew-microsoft-sommarkollo-2011/</link>
		<comments>http://poweradmin.se/blog/2011/06/30/winsec-crew-microsoft-sommarkollo-2011/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 08:17:28 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[WinSec]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/06/30/winsec-crew-microsoft-sommarkollo-2011/</guid>
		<description><![CDATA[Yesterday myself, Hasain Alshakarti and Göran Melvås (all three of us are members of Swedish Windows Security User Group) had a live session at Microsoft Sweden about Forefront Identity Manager Certificate Management 2010 (FIM-CM 2010). &#160; I wanted to thank &#8230; <a href="http://poweradmin.se/blog/2011/06/30/winsec-crew-microsoft-sommarkollo-2011/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F06%252F30%252Fwinsec-crew-microsoft-sommarkollo-2011%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22WINSEC%20crew%20%40%20Microsoft%20Sommarkollo%202011%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Yesterday myself, Hasain Alshakarti and Göran Melvås (all three of us are members of Swedish Windows Security User Group) had a live session at Microsoft Sweden about Forefront Identity Manager Certificate Management 2010 (FIM-CM 2010).</p>
<p>&#160;</p>
<p>I wanted to thank all you guys that attended our three hour long session about ADCS, PKI, smartcards, readers and everything related inside and outside FIM-CM in real life. And it was really fun to meet some of you guys from <a href="http://www.itproffs.se">ITProffs</a> as well! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile11.png" /></p>
<p>&#160;</p>
<p>Our presentation and our “how-to-automatically-install-and-configure-adcs-in-7-seconds” PowerShell script will be available on Hasain’s blog on <a href="http://secadmins.com">http://secadmins.com</a>. The recording for yesterday will show up there as well (including the demo we didn’t have time for to complete)</p>
<p>&#160;</p>
<p>Some of you guys may thought that I joked, but I am serious about my challenge! If any of you guys can beat my record and install ADCS in less than 7 seconds, I buy you lunch! It’s a promise! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-winkingsmile9.png" /></p>
<p>&#160;</p>
<p>Here are some pictures from yesterday. The thanks for the pictures goes to my colleague and friend Per “Nimmsis” Sjökvist.</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image523.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb456.png" width="644" height="387" /></a></p>
<p><strong>Myself and Göran Melvås on stage.</strong></p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image524.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb457.png" width="291" height="484" /></a></p>
<p><strong>All three of us live on stage. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile11.png" /></strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p>// Fredrik “DXter” Jonsson</p>
<div class="shr-publisher-2622"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F06%2F30%2Fwinsec-crew-microsoft-sommarkollo-2011%2F' data-shr_title='WINSEC+crew+%40+Microsoft+Sommarkollo+2011'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F06%2F30%2Fwinsec-crew-microsoft-sommarkollo-2011%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F06%2F30%2Fwinsec-crew-microsoft-sommarkollo-2011%2F' data-shr_title='WINSEC+crew+%40+Microsoft+Sommarkollo+2011'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/06/30/winsec-crew-microsoft-sommarkollo-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to issue EV SSL certificates from an Enterprise CA</title>
		<link>http://poweradmin.se/blog/2011/05/22/how-to-issue-ev-ssl-certificates-from-an-enterprise-ca/</link>
		<comments>http://poweradmin.se/blog/2011/05/22/how-to-issue-ev-ssl-certificates-from-an-enterprise-ca/#comments</comments>
		<pubDate>Sun, 22 May 2011 15:54:07 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/05/22/how-to-issue-ev-ssl-certificates-from-an-enterprise-ca/</guid>
		<description><![CDATA[A question that I get all the time, is how to issue internal Extended Validation certificates from an internal Enterprise CA. Even though EV certificates do not provide increased security from a technical point of view, sometimes people just want &#8230; <a href="http://poweradmin.se/blog/2011/05/22/how-to-issue-ev-ssl-certificates-from-an-enterprise-ca/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F05%252F22%252Fhow-to-issue-ev-ssl-certificates-from-an-enterprise-ca%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22How%20to%20issue%20EV%20SSL%20certificates%20from%20an%20Enterprise%20CA%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>A question that I get all the time, is how to issue internal Extended Validation certificates from an internal Enterprise CA. Even though EV certificates do not provide increased security from a technical point of view, sometimes people just want them for the green address bar.</p>
<p>&#160;</p>
<p>So to help all you guys out there that wants to issue EV SSL certificates from your internal CA, here is a complete step by step! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile10.png" /> To simplify stuff, here in my example I will use an Enterprise Root CA running on Windows Server 2008 R2.</p>
<p>&#160;</p>
<p>First, I start by duplicating a certificate template and since I only need the server authentication EKU in the certificate and that I also need to supply information regarding CN/SAN/etc. during the enrollment, I duplicate the Web Server template and make it a V3 (CNG/2008) template (however, this template can be a V2 template if desired).</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image501.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb434.png" width="244" height="151" /></a></p>
<p><strong>We create a new V3 template from our V1 Web Server template by duplicating it.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image502.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb435.png" width="375" height="484" /></a></p>
<p><strong>First we configure the name of the template and the validity period.</strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image503.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb436.png" width="375" height="484" /></a></p>
<p><strong>Then we need to edit the Issuance Policies of the certificate.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image504.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb437.png" width="244" height="167" /></a></p>
<p><strong>We create a completely new Issuance Policy. Now, a unique OID is being generated. Copy this OID, it is very important! (The CPS location URI is optional.)</strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image505.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb438.png" width="211" height="244" /></a></p>
<p><strong>Then we bind the newly created Issuance Policy with this certificate template.</strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image506.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb439.png" width="375" height="484" /></a></p>
<p><strong>Now the certificate template is associated with our newly created Issuance Policy.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image507.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb440.png" width="375" height="484" /></a></p>
<p><strong>We also verify that a computer account (or a security group of computers) has enroll rights on this template.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image508.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb441.png" width="244" height="154" /></a></p>
<p><strong>Now we are done with the template configuration. Now we just bind the template to the Enterprise CA just as usual. Just right click on Certificate Templates in ADCS and choose “New&quot; &gt; &quot;Certificate Template to Issue” and select our new template and press OK.</strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p>Next we need to tell our domain members that the OID that was generated in our issuance policy and comes from our Enterprise CA is trusted for EV certificates and results in a green address bar.</p>
<p>&#160;</p>
<p>First, we create a new group policy object. Of course, if you have an existing GPO for other domain wide PKI configurations like to enable auto enrollment, etc. you can just update your existing GPO with these settings.</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image509.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb442.png" width="644" height="461" /></a></p>
<p><strong>We add the public root certificate of our Enterprise Root to the “Trusted Root Certification Authorities” in Public Key Policies.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image510.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb443.png" width="390" height="484" /></a></p>
<p><strong>We right click on the root certificate and choose properties. Then we go to the Extended Validation tab and add that exact OID that we copied from the Issuance Policy.</strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p>We apply the settings and link it to the domain. After that is done, the group policy processing on all domain members will make all machines to be aware of the new OID.</p>
<p>&#160;</p>
<p>Lets try to issue a EV certificate now! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-openmouthedsmile3.png" /></p>
<p>&#160;</p>
<p>To do this we use the MMC snap-in for the certificate management for the computer account, which is (according to me), the easiest way to handle the request of a certificate on a domain member (at least when you supply information the request your self).</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image511.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb444.png" width="644" height="452" /></a></p>
<p><strong>Since we gave the computer rights to enroll the certificate in the security settings in the template, we see the template as available for enrollment. We will click “configure settings” to supply all information in the request before we send it to the CA (which is the default setting in the Web Server template which we duplicated).</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image512.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb445.png" width="489" height="484" /></a></p>
<p><strong>We supply some information in the request and press OK.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image513.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb446.png" width="644" height="452" /></a></p>
<p><strong>We select our configured template and click enroll.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image514.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb447.png" width="644" height="452" /></a></p>
<p><strong>Then the certificate request is being sent to the CA which signs the request and sends it back to the client which binds the certificate to the private key and the certificate ends up in the local machine personal certificate store.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image515.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb448.png" width="390" height="484" /></a></p>
<p><strong>If we take a look at the certificate, we can see that it has the OID for our new Issuance Policy (which translates to the name of the Issuance Policy when we look at the certificate).</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image516.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb449.png" width="390" height="484" /></a></p>
<p><strong>And an even closer look shows that the certificate also holds all the attributes in the subject field that we chose to submit.</strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image520.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb453.png" width="244" height="134" /></a></p>
<p><strong>Now we bind the certificate to a internal website in IIS.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p>Lets try it out from an other machine to see if it works (you can not try this on the webserver itself, it will be valid but not green)! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile10.png" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image519.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb452.png" width="644" height="462" /></a></p>
<p><strong>It works like a charm! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile10.png" /></strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p>// Fredrik “DXter” Jonsson</p>
<div class="shr-publisher-2580"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F05%2F22%2Fhow-to-issue-ev-ssl-certificates-from-an-enterprise-ca%2F' data-shr_title='How+to+issue+EV+SSL+certificates+from+an+Enterprise+CA'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F05%2F22%2Fhow-to-issue-ev-ssl-certificates-from-an-enterprise-ca%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F05%2F22%2Fhow-to-issue-ev-ssl-certificates-from-an-enterprise-ca%2F' data-shr_title='How+to+issue+EV+SSL+certificates+from+an+Enterprise+CA'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/05/22/how-to-issue-ev-ssl-certificates-from-an-enterprise-ca/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Do not enable SAN certificate requests on your Enterprise CA&#8217;s!</title>
		<link>http://poweradmin.se/blog/2011/05/13/do-not-enable-san-certificate-requests-on-your-enterprise-cas/</link>
		<comments>http://poweradmin.se/blog/2011/05/13/do-not-enable-san-certificate-requests-on-your-enterprise-cas/#comments</comments>
		<pubDate>Fri, 13 May 2011 07:46:34 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/05/13/do-not-enable-san-certificate-requests-on-your-enterprise-cas/</guid>
		<description><![CDATA[Not many people are not aware of the fact that enabling SAN attributes in certificate requests can be a security issue. I have seen many people on different forums that tell other people to enable EDITF_ATTRIBUTESUBJECTALTNAME2 with certutil on Enterprise &#8230; <a href="http://poweradmin.se/blog/2011/05/13/do-not-enable-san-certificate-requests-on-your-enterprise-cas/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F05%252F13%252Fdo-not-enable-san-certificate-requests-on-your-enterprise-cas%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Do%20not%20enable%20SAN%20certificate%20requests%20on%20your%20Enterprise%20CA%26rsquo%3Bs%21%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Not many people are not aware of the fact that enabling SAN attributes in certificate requests can be a security issue. I have seen many people on different forums that tell other people to enable EDITF_ATTRIBUTESUBJECTALTNAME2 with certutil on Enterprise CA’s to be able to request and issue web server certificates containing SAN-certificates. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-sadsmile2.png" /></p>
<p>&#160;</p>
<p>This is not true! SAN attributes can be specified using certificate extensions in the MMC and should be done that way instead of attributes in the request!</p>
<p>&#160;</p>
<p>The problem is, if this is enabled, that a a user can supply any SAN attribute in it’s certificate request and if the certificate is enrolled without any certificate manager approval, the user can issue the certificate to itself and the certificate may contain any SAN attribute, making an impersonation attack possible.</p>
<p>&#160;</p>
<p>More info can be found on: <a title="http://technet.microsoft.com/en-us/library/ff625722(WS.10).aspx" href="http://technet.microsoft.com/en-us/library/ff625722(WS.10).aspx">http://technet.microsoft.com/en-us/library/ff625722(WS.10).aspx</a></p>
<p>&#160;</p>
<p>// Fredrik “DXter” Jonsson</p>
<div class="shr-publisher-2541"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F05%2F13%2Fdo-not-enable-san-certificate-requests-on-your-enterprise-cas%2F' data-shr_title='Do+not+enable+SAN+certificate+requests+on+your+Enterprise+CA%26rsquo%3Bs%21'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F05%2F13%2Fdo-not-enable-san-certificate-requests-on-your-enterprise-cas%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F05%2F13%2Fdo-not-enable-san-certificate-requests-on-your-enterprise-cas%2F' data-shr_title='Do+not+enable+SAN+certificate+requests+on+your+Enterprise+CA%26rsquo%3Bs%21'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/05/13/do-not-enable-san-certificate-requests-on-your-enterprise-cas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goodies from CAPolicy.inf&#8211;LoadDefaultTemplates</title>
		<link>http://poweradmin.se/blog/2011/04/26/goodies-from-capolicy-infloaddefaulttemplates/</link>
		<comments>http://poweradmin.se/blog/2011/04/26/goodies-from-capolicy-infloaddefaulttemplates/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 05:36:04 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/04/26/goodies-from-capolicy-infloaddefaulttemplates/</guid>
		<description><![CDATA[Not many people are aware of a certain available option in CAPolicy.inf that came with Windows Server 2003 SP1. The LoadDefaultTemplates is very useful since it prevents the CA to associate itself with the default list of certificate templates when &#8230; <a href="http://poweradmin.se/blog/2011/04/26/goodies-from-capolicy-infloaddefaulttemplates/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F04%252F26%252Fgoodies-from-capolicy-infloaddefaulttemplates%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Goodies%20from%20CAPolicy.inf%26ndash%3BLoadDefaultTemplates%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Not many people are aware of a certain available option in CAPolicy.inf that came with Windows Server 2003 SP1. The <strong>LoadDefaultTemplates</strong> is very useful since it prevents the CA to associate itself with the default list of certificate templates when we are installation an Enterprise CA.</p>
<p>&#160;</p>
<p>The cool stuff is that this parameter was ignored on Enterprise Issuing CA’s in Windows Server 2003 SP1. Only Enterprise Root’s in Windows Server 2003 SP1 could use this option. However, this changed in Windows Server 2008 and later. This option can now be used on any Enterprise CA in the hierarchy. </p>
<p>&#160;</p>
<p>What happens in reality is that the ADCS wizard does create the certificate templates in the Certificate Templates container in Public Key Services just as usual, but it does NOT assign any certificate templates to the CA.</p>
<p>&#160;</p>
<p>This can be verified by either open the ADCS console and look at Certificate Templates or open the CA’s <strong>pKIEnrollmentService</strong> object in the Enrollment Services container in Public Key Services with adsiedit.msc (look at the data in the <strong>certificateTemplates</strong> attribute, it should be <strong>&lt;not set&gt;</strong>).</p>
<p>&#160;</p>
<p>I personally think that this should be a standard on every Enterprise CA that gets installed, since we can guarantee that no certificate is being issued by “accident”. In other words, we do not issue certificates before we manually assign them to the CA, meaning that we can use all the time we need to configure ADCS in our own pace.</p>
<p>&#160;</p>
<p>If you want to enable this “hidden” feature in the ADCS installation wizard, apply the following (minimum) content to your <strong>%WINDIR%\CAPolicy.inf</strong> file:</p>
<p>&#160;</p>
<p><strong>[Certsrv_Server]      <br />LoadDefaultTemplates = False</strong></p>
<p>&#160;</p>
<p>// Fredrik “DXter” Jonsson</p>
<div class="shr-publisher-2532"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F26%2Fgoodies-from-capolicy-infloaddefaulttemplates%2F' data-shr_title='Goodies+from+CAPolicy.inf%26ndash%3BLoadDefaultTemplates'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F26%2Fgoodies-from-capolicy-infloaddefaulttemplates%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F26%2Fgoodies-from-capolicy-infloaddefaulttemplates%2F' data-shr_title='Goodies+from+CAPolicy.inf%26ndash%3BLoadDefaultTemplates'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/04/26/goodies-from-capolicy-infloaddefaulttemplates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to remotely check if Base CSP is installed</title>
		<link>http://poweradmin.se/blog/2011/04/15/how-to-remotely-check-if-base-csp-is-installed/</link>
		<comments>http://poweradmin.se/blog/2011/04/15/how-to-remotely-check-if-base-csp-is-installed/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 13:15:41 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>
		<category><![CDATA[Power Shell]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/04/15/how-to-remotely-check-if-base-csp-is-installed/</guid>
		<description><![CDATA[At this TechDays 2011 here in Sweden, I got a question when I was standing in the Swedish Windows Security User Group booth about if there was some easy way to determine if the Microsoft Base CSP (KB909520) is installed &#8230; <a href="http://poweradmin.se/blog/2011/04/15/how-to-remotely-check-if-base-csp-is-installed/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F04%252F15%252Fhow-to-remotely-check-if-base-csp-is-installed%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FezNjxb%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22How%20to%20remotely%20check%20if%20Base%20CSP%20is%20installed%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>At this TechDays 2011 here in Sweden, I got a question when I was standing in the Swedish Windows Security User Group booth about if there was some easy way to determine if the Microsoft Base CSP (KB909520) is installed on a machine or not. My instant answer was to try to run pintool.exe since it is a PIN management utility that comes with the Base CSP.</p>
<p>&#160;</p>
<p>However, in Windows Vista and above, even if the Base CSP is included by default, pintool.exe isn’t. This is because this functionality has been merged into the Windows logon screen that is native in Windows.</p>
<p>&#160;</p>
<p>Just for fun, and because of my unusual big amount of spare time a few days ago, I wrote this very small PowerShell script to check if Base CSP is installed on a local or remote machine. The script is doing this regardless if the target computer is running a pre or post Windows Vista operating system, since the script is simply checking if the dll for Base CSP is installed in Windows or not.</p>
<p>&#160;</p>
<p>The reason I am not using the <strong>Get-HotFix</strong> cmd-let that is native in PowerShell is that Base CSP is not available as an hotfix for Vista and later since it is already included. Therefor, it will not show up as an installed hotfix. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-winkingsmile7.png" /></p>
<p>&#160;</p>
<p>The reason that I am checking for that file and not the Gemalto .NET mini driver (that is also a part of KB909520) is that the axaltocm.dll mini driver for the Gemalto .NET cards might be installed, but not always. In Windows XP, Windows Server 2003, Windows Vista and Windows Server 2008, it is installed by default with the Base CSP. But it is not installed be default in Windows 7 and Windows Server 2008 R2!</p>
<p>&#160;</p>
<p>This is because the mini drivers for smartcards are dynamically installed when needed from Windows Update through the smartcard plug and play feature in Windows 7 and Windows Server 2008 R2. (You have to enable it on 2008 R2. It is disabled by default for security reasons.)</p>
<p>&#160;</p>
<p>The script relies on two quite basic components, remote access to the C$ share of the computer and that it is responding to ping to be able to check if the machine is available on the network or not. If you don’t like this, simply remove that part from the code. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile9.png" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image499.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb432.png" width="644" height="327" /></a></p>
<p><strong>If no input for the computer parameter is given, the script will default on localhost.</strong></p>
<p><strong>&#160;</strong></p>
<p>&#160;</p>
<p><strong>&#160;</strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image500.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb433.png" width="644" height="327" /></a></p>
<p><strong>Here we try to check the computer SRV0042. It is not responding to ping and is assumed to be offline.</strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p>&#160;</p>
<p>&#160;</p>
<p>If you need to distribute the Base CSP through WSUS, I wrote a blog post about for a year ago: <a title="http://poweradmin.se/blog/2010/01/15/distributing-the-base-csp-for-windows-xp-with-wsus/" href="http://poweradmin.se/blog/2010/01/15/distributing-the-base-csp-for-windows-xp-with-wsus/">http://poweradmin.se/blog/2010/01/15/distributing-the-base-csp-for-windows-xp-with-wsus/</a></p>
<p>&#160;</p>
<p>My dear friend Hasain tipped me about the following one liner to list all installed CSP’s in Windows with PowerShell. Sometimes the coolest things are both short, easy and brilliant, even if you don’t think about them. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-smile9.png" /></p>
<p><strong>Get-ChildItem HKLM:\SOFTWARE\Microsoft\Cryptography\Defaults\Provider | Format-List</strong></p>
<p>&#160;</p>
<p>The script can be found below. Enjoy! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://poweradmin.se/blog/wp-content/uploads/wlEmoticon-winkingsmile7.png" /></p>
<p>&#160;</p>
<p>// Fredrik “DXter” Jonsson</p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><strong>#Get input strings      <br />param(       <br />&#160; [string] $computer = &quot;localhost&quot;       <br />&#160;&#160; )       <br />.$ENV:SystemRoot\System32\ping.exe -n 1 $computer | Out-Null       <br />if ($? -eq $True)       <br />{       <br />if (Test-Path -Path &quot;\\$computer\C$\Windows\System32\basecsp.dll&quot;)       <br />{       <br />&#160;&#160;&#160; Write-Host       <br />&#160;&#160;&#160; Write-Host &quot;Microsoft Base CSP is installed on $computer!&quot; -ForegroundColor Green       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host       <br />&#160;&#160;&#160; Write-Host &quot;Microsoft Base CSP is not installed on $computer!&quot; -ForegroundColor Red       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host       <br />&#160;&#160;&#160; Write-Host &quot;$computer is not available!&quot; -ForegroundColor Red       <br />&#160;&#160;&#160; Write-Host       <br />}</strong></p>
<div class="shr-publisher-2526"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F15%2Fhow-to-remotely-check-if-base-csp-is-installed%2F' data-shr_title='How+to+remotely+check+if+Base+CSP+is+installed'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F15%2Fhow-to-remotely-check-if-base-csp-is-installed%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F15%2Fhow-to-remotely-check-if-base-csp-is-installed%2F' data-shr_title='How+to+remotely+check+if+Base+CSP+is+installed'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/04/15/how-to-remotely-check-if-base-csp-is-installed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t forget the CAPolicy.inf file!</title>
		<link>http://poweradmin.se/blog/2011/04/09/dont-forget-the-capolicy-inf-file/</link>
		<comments>http://poweradmin.se/blog/2011/04/09/dont-forget-the-capolicy-inf-file/#comments</comments>
		<pubDate>Sat, 09 Apr 2011 14:17:46 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/04/09/dont-forget-the-capolicy-inf-file/</guid>
		<description><![CDATA[Yesterday I saw it again – a Windows Server 2003 Root CA that was installed with NO CAPolicy.inf file! &#160; Apparently, not everybody are aware about how Certificate Services works regarding the creation of the certificate that is being generated &#8230; <a href="http://poweradmin.se/blog/2011/04/09/dont-forget-the-capolicy-inf-file/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F04%252F09%252Fdont-forget-the-capolicy-inf-file%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FgZrZN6%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Don%26rsquo%3Bt%20forget%20the%20CAPolicy.inf%20file%21%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Yesterday I saw it again – a Windows Server 2003 Root CA that was installed with NO CAPolicy.inf file!</p>
<p>&#160;</p>
<p>Apparently, not everybody are aware about how Certificate Services works regarding the creation of the certificate that is being generated in the Certificate Services wizard, so lets go through it one more time.</p>
<p>&#160;</p>
<p>The CAPolicy.inf file is a very important file that configures and sets the default values for the ADCS configuration and certificate. But when you are installing a Root CA on Windows Server 2003 (or Windows 2000), there is a issue if you have no CAPolicy.inf file in the %WINDIR% directory. If you have no CAPolicy.inf file the root certificate will have both CDP and AIA extensions <strong>in the root certificate itself!</strong></p>
<p>&#160;</p>
<p>This behavior (you may call it a bug) can be a problem I many cases. One of the issues that I have encountered several times is when you have strong CRL checking enabled and your clients MUST validate all CDP extensions that are available in the certificate chain! I have decommissioned many PKI structures because the person who installed the CA had no idea about what he or she was doing when the Root CA was installed!</p>
<p>&#160;</p>
<p>A CAPolicy.inf file on a Windows Server 2003 should (at least) contain the following settings to exclude the CDP and AIA extensions before the root certificate gets created by the certificate services wizard :</p>
<p><strong></strong></p>
<p><strong>[CRLDistributionPoint]      <br />Empty=True</strong></p>
<p><strong>[AuthorityInformationAccess]      <br />Empty=True</strong></p>
<p>&#160;</p>
<p>Now you might ask; Shouldn’t a root certificate contain CDP and AIA extensions? NO!</p>
<p>A root certificate is self signed. Therefor there is no other CA above in the hierarchy that can validate the identity and integrity of the certificate. That’s why we should have no CDP attribute in the root certificate itself!</p>
<p>&#160;</p>
<p>How about the AIA extension then? Well, the AIA extension is used to easily distribute the trust of the structure by providing a URL to the CA’s above in the chain that has issued the certificate. However, since the root certificate itself is the trust for the structure, there is no other certificate that can be populated into the AIA extension since you apparently already have the root certificate itself.</p>
<p>&#160;</p>
<p>This behavior was fixed in Windows Server 2008 and above. Root CA’s that are created on Windows Server 2008 or 2008 R2 do not require a CAPolicy.inf file to be able to remove these extensions from the certificate – they are not included by default!</p>
<p>&#160;</p>
<p>However, my favorite Root CA’s certificates are generated by ADCS in Windows Server 2008 R2 since their key usage is flagged as critical by default.</p>
<p>&#160;</p>
<p>// Fredrik “DXter” Jonsson</p>
<div class="shr-publisher-2514"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F09%2Fdont-forget-the-capolicy-inf-file%2F' data-shr_title='Don%26rsquo%3Bt+forget+the+CAPolicy.inf+file%21'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F09%2Fdont-forget-the-capolicy-inf-file%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F09%2Fdont-forget-the-capolicy-inf-file%2F' data-shr_title='Don%26rsquo%3Bt+forget+the+CAPolicy.inf+file%21'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/04/09/dont-forget-the-capolicy-inf-file/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows 2008 R2 ADCS in a Windows 2000 ADDS</title>
		<link>http://poweradmin.se/blog/2011/04/05/windows-2008-r2-adcs-in-a-windows-2000-adds/</link>
		<comments>http://poweradmin.se/blog/2011/04/05/windows-2008-r2-adcs-in-a-windows-2000-adds/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 20:49:09 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[DXter]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/04/05/windows-2008-r2-adcs-in-a-windows-2000-adds/</guid>
		<description><![CDATA[Last night, I did a quite fun test. I tested ADCS in 2008 R2 from a compatibility view. I installed a Windows 2000 mixed mode domain (schema version 13) and installed an Enterprise Root on a domain member running Windows &#8230; <a href="http://poweradmin.se/blog/2011/04/05/windows-2008-r2-adcs-in-a-windows-2000-adds/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F04%252F05%252Fwindows-2008-r2-adcs-in-a-windows-2000-adds%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Windows%202008%20R2%20ADCS%20in%20a%20Windows%202000%20ADDS%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Last night, I did a quite fun test. I tested ADCS in 2008 R2 from a compatibility view. I installed a Windows 2000 mixed mode domain (schema version 13) and installed an Enterprise Root on a domain member running Windows 2008 R2 without adprep or anything.</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image494.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb427.png" width="644" height="476" /></a></p>
<p><strong>The ADCS installation itself completed with one error.</strong></p>
<p><strong></strong></p>
<p>The CA could not populate the Certificate Templates container with its templates. “No worries” was my immediate thought, so I opened up certutil and tried to recreate the templates manually, hardcore style.</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image495.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb428.png" width="644" height="321" /></a></p>
<p><strong>Certutil could not do that.</strong></p>
<p><strong></strong></p>
<p>But I immediately remember that the Windows 2003 schema extended the Active Directory schema with the attributes <strong>ms-PKI-Cert-Template-OID</strong>, <strong>ms-PKI-Template-Minor-Revision</strong> and <strong>ms-PKI-Template-Schema-Version </strong>(and the class <strong>ms-PKI-Enterprise-Oid</strong>)<strong>. </strong>These extensions are used by certificate templates so I had to extend my schema to at least Windows Server 2003 (schema version 30).</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image496.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb429.png" width="644" height="367" /></a></p>
<p><strong>Said and done, I ran adprep /forestprep from a Windows Server 2003 CD.</strong></p>
<p><strong></strong></p>
<p>After I had done that, I could immediately recreate my certificate templates in Active Directory with certutil from the CA-server!</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image497.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb430.png" width="644" height="321" /></a></p>
<p><strong>I ran the exact same command again, after I had extended the schema, and this time it worked!</strong></p>
<p>Everything I tested regarding enrollment of certificates (including V3 templates) and everything just worked fine as usual!</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image498.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb431.png" width="613" height="484" /></a></p>
<p><strong>All templates are populated in the Certificate Templates container, inclusive the OCSP Response Signing template, which is an V3 template.</strong></p>
<p>&#160;</p>
<p>So what did we learn after this? Well…</p>
<p>&#160;</p>
<p>* You can, without any problem, run an 2008 R2 Enterprise CA without the need of any 2003/2008/2008 R2 DC’s.</p>
<p>* ADCS is not dependent on any forest or domain functional level, regardless of which role service we want to use.</p>
<p>* The most significant changes in ADDS (for ADCS) did Windows Server 2003 which introduced 19 new attributes and three new classes for ADCS.</p>
<p>* You don’t need to run adprep for 2008/2008 R2 to be able to run 2008/2008 R2 Enterprise CA’s.</p>
<p>* 37 of the 43 attributes for ADCS exists in the 2003 schema. Three new ones came with Windows Server 2008 and three more came with Windows Server 200 8R2.</p>
<p>* ADDS has, since Windows 2000, only had tree new classes in the schema that are related to ADCS and these came with Windows Server 2003.</p>
<p>* Credential Roaming requires 2008 schema (it depends on the three new attributes that Windows Server 2008 extended the schema with for ADCS).</p>
<p>* ADCS Certificate Enrollment Web Services requires 2008 R2 schema.</p>
<p>* If ADDS can handle V2 templates, it can also handle V3 templates.</p>
<p>&#160;</p>
<p>Even if you don’t need 2008 R2 DC’s from a strict ADCS perspective, I strongly recommend them anyway! But always remember to keep your forest prepared for at least the same OS as your CA’s and you won’t need to read and remember blog posts like this one.</p>
<p>&#160;</p>
<p>// Fredrik “DXter” Jonsson</p>
<div class="shr-publisher-2489"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F05%2Fwindows-2008-r2-adcs-in-a-windows-2000-adds%2F' data-shr_title='Windows+2008+R2+ADCS+in+a+Windows+2000+ADDS'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F05%2Fwindows-2008-r2-adcs-in-a-windows-2000-adds%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F04%2F05%2Fwindows-2008-r2-adcs-in-a-windows-2000-adds%2F' data-shr_title='Windows+2008+R2+ADCS+in+a+Windows+2000+ADDS'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/04/05/windows-2008-r2-adcs-in-a-windows-2000-adds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ADCS Backup Tool&#8211;ADCS Backups made easy&#8230;</title>
		<link>http://poweradmin.se/blog/2011/03/31/adcs-backup-tooladcs-backups-made-easy/</link>
		<comments>http://poweradmin.se/blog/2011/03/31/adcs-backup-tooladcs-backups-made-easy/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 06:34:32 +0000</pubDate>
		<dc:creator>DXter</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[PowerShell Blogs]]></category>
		<category><![CDATA[DXter]]></category>

		<guid isPermaLink="false">http://poweradmin.se/blog/2011/03/31/adcs-backup-tooladcs-backups-made-easy/</guid>
		<description><![CDATA[Last week, I discussed with dear pal Stefan Schörling at http://www.msfaq.se/ regarding some questions about how to do a complete backup and restore of an Enterprise CA in a disaster recovery scenario without using a full machine backup. In other &#8230; <a href="http://poweradmin.se/blog/2011/03/31/adcs-backup-tooladcs-backups-made-easy/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fpoweradmin.se%252Fblog%252F2011%252F03%252F31%252Fadcs-backup-tooladcs-backups-made-easy%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22ADCS%20Backup%20Tool%26ndash%3BADCS%20Backups%20made%20easy%26hellip%3B%22%20%7D);"></div>
<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Last week, I discussed with dear pal Stefan Schörling at <a title="http://www.msfaq.se/" href="http://www.msfaq.se/">http://www.msfaq.se/</a> regarding some questions about how to do a complete backup and restore of an Enterprise CA in a disaster recovery scenario without using a full machine backup. In other words, how to do a complete backup of only ADCS itself, not the entire operating system. After we were done, Stefan said “well, that wasn’t so difficult”.</p>
<p>&#160;</p>
<p>The following morning on the train on my way to work, I thought about Stefan&#8217;s comment while doing some PowerShell scripting for ADCS. My conclusion from the previous evenings discussion and Stefan’s comments was very simple: backup for ADCS shouldn’t be difficult!</p>
<p>&#160;</p>
<p>Now, why is backup of ADCS different from backup up a system state backup on server X? Well, three problems with system state backups and ADCS are that a system state backups relatively huge, are quite time consuming and does NOT take everything! Not many people are aware of the fact that <a href="http://blogs.technet.com/b/pki/archive/2010/08/06/backing-up-windows-server-2008-adcs-ca-keys.aspx">system state backups does not backup the private key of the CA</a> if you are running it on 2008/2008R2 (and you should)!</p>
<p>&#160;</p>
<p>Even if I did write a very popular post about <a href="http://poweradmin.se/blog/2010/01/11/backup-and-restore-for-active-directory-certificate-services/">backup and restore for Active Directory Certificate Services</a> last year, I understood after mine and Stefan&#8217;s conversation that the issue had not been clarified to the “big mass of non ADCS geeks”.</p>
<p>&#160;</p>
<p>ADCS is very different from many other servers or services in our corporate network. It is a critical service from a security and identity perspective since possession of the private keys of an Enterprise CA gives us possibilities to impersonate any user or computer in our forest.</p>
<p>&#160;</p>
<p>Another thing that is quite special with ADCS is that it’s data and configuration is shattered among many different locations both inside and outside the CA:</p>
<p>* You have the CAPolicy.inf in the local %WINDIR% directory which controls the creation and renewal of the CA’s CSR’s, certificates and keys for the CA itself.</p>
<p>* The CA’s certificates are stored in the computers certificate store. Private keys are sometimes stored locally in %systemdrive%\ProgramData\Microsoft\Crypto\Keys and sometimes (and preferably) in an external HSM.</p>
<p>* The ADCS database and it’s log files contains all information about your requests and your issued and revoked certificates (and may contain private keys if you have key archival enabled). Please remember that the ADCS database holds all the information required that ADCS needs to populate into the CRL’s.</p>
<p>* ADCS stores it’s configuration about the CA, such as CDP/AIA/OCSP/etc. locally in the CA’s registry. </p>
<p>* Furthermore, for Enterprise CA’s, we have multiple objects in the Public Key Services container in Active Directory that holds trusts, certificate templates and configuration.</p>
<p>&#160;</p>
<p>Since all this is quite confusing for a “non ADCS geek” at the first peek, I decided to simply the process of doing complete ADCS backups without doing full machine backups.</p>
<p>&#160;</p>
<p>I started to write on my ADCS Backup Tool which does a complete backup of the CA’s certificate + private key, database + log files, CAPolicy.inf file and all ADCS configuration that is stored in the registry.</p>
<p>&#160;</p>
<p>It is a small PowerShell script that just needs two switches to backup the CA. <strong>–backupdir</strong> and <strong>–pfxpassword</strong>, both switches are quite self explaining.</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image492.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb425.png" width="644" height="321" /></a></p>
<p><strong>The script is creating a backup folder if needed and backup up all data to it. As you might see, I included some “PowerShell Bling” like Write-Progress, etc.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p>However, if the backup folder is existing, the script will not try to create that one.</p>
<p><a href="http://poweradmin.se/blog/wp-content/uploads/image493.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://poweradmin.se/blog/wp-content/uploads/image_thumb426.png" width="644" height="321" /></a></p>
<p><strong>I also included a simple counter to keep track of the backup time.</strong></p>
<p><strong>&#160;</strong></p>
<p><strong>&#160;</strong></p>
<p>I would like to give my thanks to three people who helped me with this tool.</p>
<p>&#160;</p>
<p>First of all, I would like to thank my dear, old pal Mattias Åslund at <a href="http://www.grafu.se/">GraFu</a> for his excellency in application development! You have amazing eyes and ideas my friend, but I am sorry, I can’t implement everything that you suggest, even if it is good stuff…</p>
<p>&#160;</p>
<p>Then I want thank our intern @ work, Fredrik “Le Mumin” Holmström for his very cleaver ideas regarding error code management and that he helped me to implement them!</p>
<p>&#160;</p>
<p>Last, but not least, I would like to thank my dear friend, and soon colleague, Per “Nimmsis” Sjökvist that beta tested the script and immediately discovered the “pfxpassword bug” in my code.</p>
<p>&#160;</p>
<p>Thank you guys!</p>
<p>&#160;</p>
<p>The script can be found below!</p>
<p>&#160;</p>
<p>// Fredrik “DXter” Jonsson</p>
<p>&#160;</p>
<p><strong>#ADCS Backup Tool      <br />#Made by Fredrik &quot;DXter&quot; Jonsson (dxter@poweradmin.se) 2011-03-31       <br />#</strong><a href="http://www.poweradmin.se"><strong>http://www.poweradmin.se</strong></a></p>
<p><strong>#Get input strings      <br />param(       <br />&#160; [string]$backupdir=$(throw &quot;Mandatory parameter -backupdir missing, for example &quot;&quot;C:\Backup&quot;&quot;&quot;),       <br />&#160; [string]$pfxpassword=$(throw &quot;Mandatory parameter -pfxpassword missing, for example &quot;&quot;secretpassword&quot;&quot;&quot;)       <br />)</strong></p>
<p><strong>#Start stopwatch      <br />$totalTime = New-Object -TypeName System.Diagnostics.Stopwatch       <br />$totalTime.Start()</strong></p>
<p><strong>#Set variables      <br />$CAPOLICY = &quot;$ENV:SystemRoot\CAPolicy.inf&quot;       <br />$CERTUTIL = &quot;$ENV:SystemRoot\System32\certutil.exe&quot;       <br />$REG = &quot;$ENV:SystemRoot\System32\reg.exe&quot;       <br />$REGFILE= &quot;adcs_registry_backup.reg&quot;</strong></p>
<p><strong>#Credits      <br />Write-Host       <br />Write-Host &quot;ADCS Backup Tool&quot; -ForegroundColor &quot;Yellow&quot;       <br />Write-Host &quot;by Fredrik &quot;&quot;DXter&quot;&quot; Jonsson (dxter@poweradmin.se)&quot; -ForegroundColor &quot;Yellow&quot;       <br />Write-Host</strong></p>
<p><strong>#Function to backup CA      <br />function Backup-ADCS       <br />{       <br />if (Test-Path –Path $BACKUPDIR)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;Backup directory $BACKUPDIR exists!&quot; -PercentComplete 10       <br />&#160;&#160;&#160; Write-Host &quot;Backup directory $BACKUPDIR exists!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;Creating backup directory $BACKUPDIR!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; New-Item -Path $BACKUPDIR -ItemType Directory       <br />if ($? -eq $true)       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;Backup directory $BACKUPDIR created!&quot; -ForegroundColor Yellow       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;Backup directory $BACKUPDIR failed to create!&quot; -ForegroundColor Yellow       <br />}       <br />&#160;&#160;&#160; Write-Host       <br />}</strong></p>
<p><strong>#Verify certutil installation      <br />Test-Path $CERTUTIL       <br />if (Test-Path –Path $CERTUTIL)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;Backing up ADCS private key + certificate!&quot; -PercentComplete 20       <br />&#160;&#160;&#160; Write-Host &quot;Backing up ADCS private key + certificate!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; .$CERTUTIL -f -backupKey -p $PFXPASSWORD $BACKUPDIR       <br />if ($? -eq $true)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;ADCS private key + certificate backed up!&quot; -PercentComplete 30       <br />&#160;&#160;&#160; Write-Host &quot;ADCS private key + certificate backed up!&quot; -ForegroundColor Yellow       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;ADCS private key + certificate not backed up!&quot; -ForegroundColor Red       <br />}       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; Write-Host       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;Backing up ADCS database + log files!&quot; -PercentComplete 40       <br />&#160;&#160;&#160; Write-Host &quot;Backing up ADCS database + log files!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; .$CERTUTIL -f -backupDB $BACKUPDIR KeepLog       <br />if ($? -eq $true)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;ADCS database + log files backed up!&quot; -PercentComplete 50       <br />&#160;&#160;&#160; Write-Host &quot;ADCS database + log files backed up!&quot; -ForegroundColor Yellow       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;ADCS database + log files not backed up!&quot; -ForegroundColor Red       <br />}       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;Certutil not installed!&quot; -ForegroundColor Red       <br />&#160;&#160;&#160; Write-Host       <br />}</strong></p>
<p><strong>#Copy CAPolicy.inf      <br />if (Test-Path –Path $CAPOLICY)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;Backing up CAPolicy.inf&quot; -PercentComplete 60       <br />&#160;&#160;&#160; Write-Host &quot;Backing up CAPolicy.inf!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; Copy-Item $CAPOLICY -Destination $BACKUPDIR\CAPolicy.inf -Force       <br />if ($? -eq $true)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;CAPolicy.inf backed up!&quot; -PercentComplete 70       <br />&#160;&#160;&#160; Write-Host &quot;CAPolicy.inf backed up!&quot; -ForegroundColor Yellow       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;CAPolicy.inf not backed up!&quot; -ForegroundColor Red       <br />}       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;CAPolicy.inf does not exist. Skipping!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; Write-Host       <br />}</strong></p>
<p><strong>#Export registry      <br />if (Test-Path –Path $REG,HKLM:\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;Backing up ADCS configuration from registry!&quot; -PercentComplete 80       <br />&#160;&#160;&#160; Write-Host &quot;Backing up ADCS configuration from registry!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; .$REG export HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration $BACKUPDIR\$REGFILE /y       <br />if ($? -eq $true)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS configuration exported from registry!&quot; -Status &quot;ADCS configuration exported from registry!&quot; -PercentComplete 90       <br />&#160;&#160;&#160; Write-Host &quot;ADCS configuration exported from registry!&quot; -ForegroundColor Yellow       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;ADCS configuration not exported from registry!&quot; -ForegroundColor Red       <br />}       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;ADCS configuration not existent!&quot; -ForegroundColor Red       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />}</strong></p>
<p><strong>#Run backup      <br />Backup-ADCS | Out-Null       <br />if ($? -eq $true)       <br />{       <br />&#160;&#160;&#160; Write-Progress -Activity &quot;ADCS Backup Tool&quot; -Status &quot;CA backup completed successfully!&quot; -PercentComplete 100       <br />&#160;&#160;&#160; Write-Host &quot;ADCS backup completed successfully!&quot; -ForegroundColor Yellow       <br />&#160;&#160;&#160; Start-Sleep -Seconds 1       <br />&#160;&#160;&#160; Write-Host       <br />}       <br />else       <br />{       <br />&#160;&#160;&#160; Write-Host &quot;ADCS backup not completed successfully!&quot; -ForegroundColor Red       <br />&#160;&#160;&#160; Write-Host       <br />}</strong></p>
<p><strong>#Stop stopwatch      <br />$totalTime.Stop()       <br />$ts = $totalTime.Elapsed       <br />$totalTime = [system.String]::Format(&quot;{0:00}:{1:00}:{2:00}&quot;,$ts.Hours, $ts.Minutes, $ts.Seconds)       <br />Write-Host &quot;Process total time: $totalTime&quot; -ForegroundColor Yellow       <br />Write-Host</strong></p>
<div class="shr-publisher-2486"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:60px;'><a class='shareaholic-fblike' data-shr_layout='box_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F03%2F31%2Fadcs-backup-tooladcs-backups-made-easy%2F' data-shr_title='ADCS+Backup+Tool%26ndash%3BADCS+Backups+made+easy%26hellip%3B'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F03%2F31%2Fadcs-backup-tooladcs-backups-made-easy%2F'></a><a class='shareaholic-googleplusone' data-shr_size='tall' data-shr_count='true' data-shr_href='http%3A%2F%2Fpoweradmin.se%2Fblog%2F2011%2F03%2F31%2Fadcs-backup-tooladcs-backups-made-easy%2F' data-shr_title='ADCS+Backup+Tool%26ndash%3BADCS+Backups+made+easy%26hellip%3B'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://poweradmin.se/blog/2011/03/31/adcs-backup-tooladcs-backups-made-easy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

