<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Then there’s this…</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/nextnextfinish/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 29 May 2018 14:27:35 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>PowerShell Azure Resource Manager Module 6.0.1!</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/powershell-azure-resource-manager-module-6-0-1</link>
      <pubDate>Tue, 29 May 2018 14:27:35 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/?p=675</guid>
      <description><![CDATA[Hi everyone!  Just a quick post to let you know that the AzureRM PowerShell module version 6.0.1...]]></description>
      <content:encoded><![CDATA[Hi everyone!  Just a quick post to let you know that the <a href="https://www.powershellgallery.com/packages/AzureRM/6.0.1">AzureRM PowerShell module version 6.0.1</a> (MAY2018) is now available!  Check the page for the release notes to see what's new.  I recently went through an exercise to encrypt some Azure IaaS VMs using Azure Key Vault, and so the following changes are sparking some personal interest:

AzureRM.KeyVault
* Breaking changes to support piping scenarios
* Added new cmdlets: Backup/Restore-AzureKeyVaultManagedStorageAccount, Backup/Restore-AzureKeyVaultCertificate, Undo-AzureKeyVaultManagedStorageSasDefinitionRemoval, and Undo-AzureKeyVaultManagedStorageAccountRemoval
* 'Set-AzureRmVmDiskEncryptionExtension' makes AAD parameters optional

Instructions on how to install/update are <a href="https://docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps?view=azurermps-6.1.0">here</a>!  You may see the following requiring you to use the force:

<a href="https://msdnshared.blob.core.windows.net/media/2018/05/AzureRM-1.png"><img width="1024" height="315" class="alignleft size-large wp-image-685" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/AzureRM-1-1024x315.png" /></a>

P.S. - AzureRM <a href="https://www.powershellgallery.com/packages/AzureRM/6.1.1">6.1.1</a> came out by the time I went to finish this post!

Jesse

&nbsp;

<span style="float: none;background-color: transparent;color: #333333;font-family: 'Segoe UI';font-size: 13.6px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;line-height: 20.8px;text-align: left;text-decoration: none;text-indent: 0px"></span>

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Case of the Hit or Miss Windows 10 Servicing Fail</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/case-of-the-hit-or-miss-windows-10-servicing-fail</link>
      <pubDate>Tue, 01 May 2018 18:27:51 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/?p=615</guid>
      <description><![CDATA[Hello All,

I hope this finds everyone well and gearing up for summer!  As Windows 10 deployments...]]></description>
      <content:encoded><![CDATA[Hello All,

I hope this finds everyone well and gearing up for summer!  As Windows 10 deployments accelerate and you successfully tackle bare metal and legacy to uefi conversion/refresh scenarios, we also find ourselves in a third scenario:  Servicing Windows 10.  Servicing is a new approach to updating Windows and has been introduced and discussed at length in a number of different forums, TechNet, Ignite, blogs, msdn, etc.  As we approach Windows 10 version 1803 by now most of you <em>should</em> have your servicing setup, tested, and likely have been through one or two rounds of servicing.  I wanted to take a moment to share with you something we found when servicing Windows 10 to version 1709, how we analyzed the problem, and what we did to work around it. The scenario is a mix of Windows 10 machines running versions 1511 and 1607, that are failing to service to 1709 via SCCM.  We set out to service the 1511 machines initially where we saw some level of success, and interestingly some level of failures; enough failures that raised many eyebrows.  Lets say it was a 60/40 ratio, or 40% failure rate; so it was pretty high which usually indicates a systemic problem that is common among the failures.  But alas we are not in the business of speculation!  We had these failures bubble up and it was time to rollup the sleeves, dig in, and do some post mortem to understand why.  Well as we all know, what we need in our life at this point are logs, logs, logs, and more logs!  But where are the logs for servicing?  Although the information is out there, it is surprisingly not so easy to find.  If you haven't already seen <a href="https://docs.microsoft.com/en-us/windows/deployment/upgrade/resolve-windows-10-upgrade-errors">this page</a>, you'll want to head over, check it out, and bookmark it.  Tons of great information in here with different levels of content for the beginner to the seasoned IT Pro.  Understanding how servicing works is going to help give you a good foundation on which to troubleshoot these types of failures.  There is quite a bit to take in on the aforementioned page, suffice it to say I will provide some cliffs notes here (which are not a replacement for reading that content ; )).

<span style="text-decoration: underline"><strong>The Process</strong></span>

Windows 10 servicing is broken down into 4 phases, or 5 if you're unlucky enough to experience an uninstall/rollback.  It's a good idea to read through and understand what each phase is doing, where it takes place, and where the logs for each of these phases are located.  Also a key here in finding out what logs were generated and where, is to understand how many reboots have taken place.  Depending on what logs are generated (and the content of them), you can deduce which phase the servicing operation failed in.  <span style="text-decoration: underline"><em>The servicing process reboots once between each phase</em></span>.  This will make more sense later.

<span style="color: #0000ff">Phase 1.</span>  <strong>DownLevel</strong> - This phase is ran in the source OS, this is where all of the install files that are needed are downloaded and prepared for installation.  During this phase we mount the SafeOS WIM file AKA the WinPE environment for use after the upcoming (READ 1st) reboot.  After the SafeOS WIM is mounted and updated for use on the system, we dismount it, apply BCD settings making it the default boot entry, suspend Bit Locker, and reboot the machine.

<strong>Reboot.</strong>

<span style="color: #0000ff">Phase 2.</span>  <strong>SafeOS</strong> - After we come back from the first reboot we are now booting into the SafeOS WIM (WinPE) that was prepared in phase 1.  Once the machine enters WinPE this is where the bulk of the work to service the operating system is done, AKA where the magic happens.  There are many, many operations being done in this phase.   Some of the key operations are: Creating an OS rollback, creating a recovery partition, copying/moving the source WIM (target OS) to the recovery partition, applying the OS WIM, applying drivers, adding the new OS boot entry into BCD, and setting the SafeOS WIM <em>as the default boot entry in BCD</em>.  Once this phase completes successfully we have applied the new OS, and setup the machine to reboot back into the SafeOS.

<strong>Reboot.</strong>

<span style="color: #0000ff">Phase 3. </span> <strong>First Boot</strong> - We are now coming back from the second reboot of the servicing process.  During the First Boot phase we boot back into SafeOS, new BCD entries are created for the New OS,  settings are applied, sysprep is run, and data is migrated.  There is quite a bit going on here during this phase as well.

<strong>Reboot.</strong>

<span style="color: #0000ff">Phase 4.</span>  <strong>Second Boot</strong> - During the final phase more settings are applied and more data is migrated, system services are started, and the out of box experience (OOBE) phase executes.  The culmination of the process is reaching the start screen and eventually the desktop.

<span style="color: #ff0000">Phase 5. </span>  <strong>Rollback.</strong>  If you've reached this phase, something has gone wrong and your machine is rolled back to the previously existing operating system version.  This implies that somewhere along the line the machine experienced a fatal error and could not continue.  Two logs are of immediate interest if you experience a rollback:

<em>C:\Windows.~BT\Sources\Rollback\setupact.log</em>

<em>C:\Windows.~BT\Sources\Rollback\setuperr.log</em>

These four main phases are documented on the <a href="https://docs.microsoft.com/en-us/windows/deployment/upgrade/troubleshoot-upgrade-errors">Windows 10 Troubleshoot-Upgrade-Errors</a> page, and a nice graphic is included at the bottom of the page.  For the first three phases you can actually follow along with each item listed in the graphic on the upgrade errors page by looking at the <em>C:\Windows.~BT\Sources\Panther\setupact.log</em> to see which of the first three phases completed successfully.  The page also gives you an idea of where errors are typically seen and what kinds of things can cause them.

<span style="text-decoration: underline"><strong>The Problem</strong></span>

Fairly widespread reports of machines taking the upgrade, and eventually rolling back began to trickle in.  Results may vary but on average the servicing process can take between 1-3 hours to complete.  The time it takes to complete is dependent on a number of factors, network uplink speed, processor spec, amount of RAM, type of HDD, etc.  In any event, the time that the servicing upgrade took was also compounded by the time the rollback actually took in order to revert the machine to the previous OS.  You can get an accurate count of overall servicing time and rollback time by looking at the setupact.log files.  In some instances the rollback of machines was still cooking a few hours into the servicing process.

<span style="text-decoration: underline"><strong>Why?</strong></span>

First let me state that there are tons of logs generated during the servicing process; xml, etl, log, evtx, text files, etc.  All of them contain information about what happened during the servicing process, some of them are easy to consume and crack open, some of them aren't as friendly.  Review all of the logs, mount the .evtx logs in the event viewer, review the flat text and xml files, and to get into those pesky ETL files you can try converting them to CSV or XML with tracerpt:

<span style="color: #339966"><em><strong>tracecrpt.exe setup.etl -of csv -o setup.etl.csv</strong></em></span>

So we have "all the logs."  Let me start by saying that setupact.log and setuperr.log are your friends.  They are your go-to.  They likely have the information you are looking for or can give you enough information to point you in the right direction or to another log.

After the dust settled we began to look at a sampling of the machines, effectively scraping the <em>C:\Windows.~BT\Sources\</em> and <em>C:\Windows\Panther</em> directories to a file share for analysis.  Since the following log (<em>C:\Windows.~BT\Sources\Panther\setupact.log</em>) details the first three phases of the servicing process, that's where we want to start.  We reviewed the log and low and behold all of the first three phases completed successfully!  One thing to note and key in on in the log is that SETUPPLATFORMEXE reports <em><strong>Global</strong> </em>servicing progress as well as <em><strong>Phase</strong></em> progress.  You'll see entries similar to the following:

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/logProgress.png"><img width="1024" height="290" class="alignleft size-large wp-image-665" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/logProgress-1024x290.png" /></a>

So we were able to quickly narrow down the scope of the failure to one specific phase.  Phase 4.  Remember Phase 4 occurs in the new target operating system, with all drivers and services starting up and running for the first time, and buttoning up things like settings and data migration tasks, reaching the OOBE phase, and finally (hopefully) the desktop.  Only we never reached the desktop.  Since we failed in Phase 4 which takes place in the new target OS, a rollback occurred and logs were created in the following directory:  <em>C:\Windows.~BT\Sources\Rollback\  </em>Cracking open our go-to log we see the following.  A rollback has occurred in phase 4 because of a <a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0x50--page-fault-in-nonpaged-area">STOP 0x50 bugcheck</a>, which is PAGE_FAULT_IN_NONPAGED_AREA.   This stop code typically indicates that a driver attempted to read or write to an invalid location in memory, in this particular case it was a read operation.  In the event of a bugcheck a kernel mini-dump is also generated in <em>C:\Windows.~BT\Sources\Rollback\</em> The dump only contains stack data.  In this case we were not able to have the dump analyzed.  Don't fret we are still hot on the trail.  Notice about halfway down where it shows "Crash 0x00000050 detected", the next few lines show information extracted from the dump - we can actually see a representation of the stack and the frames in the log.  Frames 6-9 are in the <strong>mfenlfk.sys</strong> driver.

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/rollbackSetupAct1.png"><img width="1024" height="703" class="alignleft size-large wp-image-625" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/rollbackSetupAct1-1024x703.png" />
</a>

Continuing down the log we see that Windows tried to recover the installation 3 times but bug checked each time with the same stop code, with the same driver in the middle of the stack.

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/rollbackSetupAct2.png"><img width="1024" height="660" class="alignleft size-large wp-image-635" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/rollbackSetupAct2-1024x660.png" /></a>

Eventually after hitting the max recovery attempts, Windows begins the process to rollback the OS:

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/rollbackSetupAct3.png"><img width="1024" height="406" class="alignleft size-large wp-image-645" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/rollbackSetupAct3-1024x406.png" /></a>

Now we've zeroed' in on the driver in question, which after reviewing it is a network security driver used by McAfee software; with a time/date stamp that is pretty old.  We engaged McAfee and started an inquiry on the driver, which was out of date (unsupported) for the version of Windows we were trying to service to (1709).  What we found and re-prod' was that even though the system had the latest versions of all the McAfee software(s) installed, this old driver seemed to hang around on the system.  Turns out this isn't so good for servicing.

<span style="text-decoration: underline"><strong>Moving Past</strong></span>

With all eyes on this old driver, we discussed options in order to rid the system of it.  How can we get rid of this driver without impacting the system negatively?  What if the wrong driver is removed?  As you can see the impacts of making a mistake here could be potentially catastrophic on a given box.  After much deliberation and reviewing our documentation on the <a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/install/driver-store">driver store</a>, we arrived at the conclusion that the operating system fundamentally supports removing the driver from the store.  Here is a snip of powershell (add your logging, and customize, etc.) we used to interrogate the driver store, search for the very specific driver in question, and remove it:
<script src="https://gist.github.com/j-esquivel/b4c0ddde50ce8ccc20ce81e81679c34a.js"></script>

To expand on this a little, when you query the driver store all drivers are returned.  When you find the one you want to remove, you have to remove it by the value of the "Driver" property as seen below.  Use caution, just because you find the value on one machine as <em>oem1.inf</em> does NOT mean it will be the same value on another machine, the driver property value is different on each machine, even though the OriginalFileName value is the same.  For this reason we have to use logic to identify the driver, grab the "driver" property and feed that to our command to remove the correct driver.  Tricky (1st edition).  Also note lines 1-3, if your Get-WindowsDriver cmdlet returns an error you may need to use this if McAfee Access Protection is enabled and is blocking access to the temp folder.  Tricky (2nd edition).

<a href="https://msdnshared.blob.core.windows.net/media/2018/04/getDriver.png"><img width="1024" height="568" class="alignleft size-large wp-image-655" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/getDriver-1024x568.png" />
</a>

For the sake of time we used pnputil to remove the driver from the store, of note is that the command line switches for pnputil vary if you are on 1511 (build 10586), they use the legacy switches, and the newer builds of Windows 10 use the newer switches.  Tricky (3rd edition).  We placed this as the first item in the servicing task sequence, then called a reboot before the servicing step began.  We tested this on a number of failed machines and they all took the servicing upgrade successfully.  This was quite the long road from the initial discovery, to troubleshooting, to root cause, and eventually to finding a work-around.  I hope sharing this with you allows you to better understand the servicing process and how to troubleshoot failures.  I would like to re-iterate that the following links provide good information on the topic:

Resolve Windows 10 Upgrade Errors:

<a href="https://docs.microsoft.com/en-us/windows/deployment/upgrade/resolve-windows-10-upgrade-errors">https://docs.microsoft.com/en-us/windows/deployment/upgrade/resolve-windows-10-upgrade-errors</a>

Windows 10 Log Files

<a href="https://support.microsoft.com/en-us/help/928901/log-files-that-are-created-when-you-upgrade-to-a-new-version-of-window">https://support.microsoft.com/en-us/help/928901/log-files-that-are-created-when-you-upgrade-to-a-new-version-of-window</a>

Windows 10 SetupDiag is a new tool that was recently released that can also be used to troubleshoot servicing failures.  This tool was not released at the time we were working this failure so we didn't get to use it!  Check it out!

<a href="https://docs.microsoft.com/en-us/windows/deployment/upgrade/setupdiag">https://docs.microsoft.com/en-us/windows/deployment/upgrade/setupdiag</a>

<span style="color: #ff0000"><strong>**UPDATE** </strong></span> On 05/07/2018, McAfee published the following KB regarding this issue:

<span style="font-size: 14px"><a href="https://kc.mcafee.com/corporate/index?page=content&amp;id=KB90555&amp;actp=null&amp;viewlocale=en_US&amp;showDraft=false&amp;platinum_status=false&amp;locale=en_US"><span style="text-align: left;color: #333333;text-indent: 0px;letter-spacing: normal;font-family: 'open_sans',Arial,sans-serif;font-style: normal;font-variant: normal;font-weight: 600;text-decoration: none;float: none;background-color: transparent">Windows upgrade fails due to old mfenlfk.sys driver in DriverStore\FileRepository</span></a></span>

Have a great weekend!

Jesse]]></content:encoded>
    </item>
    <item>
      <title>Windows 10 1709 Hyper-V Networking Enhancement</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/windows-10-1709-hyper-v-networking-enhancement</link>
      <pubDate>Fri, 02 Feb 2018 20:42:35 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/?p=505</guid>
      <description><![CDATA[Hello All,  today I want to share a new feature in Windows 10 1709 client hyper-v.  This change is...]]></description>
      <content:encoded><![CDATA[Hello All,  today I want to share a new feature in Windows 10 1709 client hyper-v.  This change is specifically in the Hyper-V networking stack, and is a direct result of a design change request filed by one of our customers.  The change centers around how a virtual machines network traffic is routed via the host.  In previous versions of client Hyper-V, virtual machines were unable to utilize all of the hosts connected network interfaces - including <em>VPN network interfaces</em>.  What this meant was that the VMs could not route through or "use" the hosts VPN connection.  There are a number of reasons why you would want a given VM to be able to use the hosts VPN connection, maybe you have a PAW VM that you want to use to administer your corporate network remotely with, or you have a small lab setup on your machine that needs access to corporate resources, or you want your VMs to be able to dynamically access the internet regardless of if the host is using a wired or wireless connection, etc.  These are just a few and there are likely more use case scenarios for this, so we've heard customers say that they want this virtualization networking capability and with Windows 10 version 1709 it is here.

The functionality arrives in the form of a new <a href="https://blogs.technet.microsoft.com/virtualization/2017/11/13/whats-new-in-hyper-v-for-windows-10-fall-creators-update/">"Default Switch" in Hyper-V</a>.  As you can see, this switch cannot be modified.  It also cannot be deleted, it is here to stay!  The default switch uses NAT to dynamically assign addresses to the VMs that are connected to it.

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/DefaultSwitch.png"> </a>

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/switch.png"><img width="750" height="713" class="alignleft wp-image-585" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/02/switch-1024x974.png" /></a>

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

Additional information on the default switch can be obtained by running the Get-HNSNetwork PowerShell cmdlet.  Here you can see the Name of the switch, the ID of the switch - which as mentioned in the other post never changes, and the subnet used to dynamically assign addresses to VMs, as well as the type.

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/get-hnsNetwork1.png"><img width="848" height="455" class="alignleft size-full wp-image-526" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/02/get-hnsNetwork1.png" /></a><a href="https://msdnshared.blob.core.windows.net/media/2018/02/get-hnsNetwork1.png">
</a>

&nbsp;

Putting it all together.  Of course you'll want to install Hyper-V, create your VM, and install your OS.  To demonstrate this capability I've installed and configured an Azure point to site VPN on my host machine for my Azure subscription.  I've successfully connected that VPN on my host machine.  Now looking at the VM we can see its ip configuration and what its been assigned by the host:

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/VM1.png"><img width="1024" height="641" class="alignleft size-large wp-image-555" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/02/VM1-1024x641.png" />
</a>

&nbsp;

Note we have tcp connectivity to the target Azure VM from both the host AND the VM!  So here we can see that the virtual machine is in fact using the Hosts connected VPN tunnel.  I've changed the dynamically assigned DNS server on my VM to my Azure DNS server, this allows me to resolve DNS names in my Azure subscription, and DNS names on the internet.  With that - on my VM I'm able to route through the hosts VPN tunnel, seen here as I RDP into one of my IaaS VMs in Azure!

<a href="https://msdnshared.blob.core.windows.net/media/2018/02/VM2.png"><img width="1024" height="909" class="alignleft size-large wp-image-575" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/02/VM2-1024x909.png" /></a>

&nbsp;

This is a nifty feature that I hope you find useful as you move forward with client Hyper-V on Windows 10.  I'm curious to see what doors this unlocks for people, I know I have a few ideas of my own for this...

What will you do with this feature, and how will it enable you to be more productive and creative?

Jesse]]></content:encoded>
    </item>
    <item>
      <title>Smart Card Logon Enforcement - Long Edition!</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/smart-card-logon-enforcement-long-edition</link>
      <pubDate>Fri, 15 Sep 2017 17:47:19 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/?p=466</guid>
      <description><![CDATA[Hey everyone - it's been a while since the last post with so much going on in IT; the boom of the...]]></description>
      <content:encoded><![CDATA[Hey everyone - it's been a while since the last post with so much going on in IT; the boom of the cloud, security breaches/incidents, new products, etc.  Wanted to take a little time to talk about something that hit my desk again recently and most folks in the DoD and other spaces wind up doing at some point,  and usually various iterations of it across multiple networks.  You may be looking to give it a go for the first time or maybe you're looking at making some changes in how you skin this cat?  There are some choices and things to be aware of when you start considering how you process enforcement of smart card logon (SCL).  First I'll start out by talking about how you can go about requiring that a smart card be used for "interactive logon," which is logon type 2.  Logon types are important when you start talking about SCL enforcement and enablement which are two distinctly different things, more on that later.  SCL enforcement can be accomplished in one of two ways, by the individual machine via local security policy, or configured per user.

&nbsp;

<span style="color: #ff00ff;text-decoration: underline"><strong>COA 1 - Enforce SCL using a local security policy setting</strong></span>

This option is enforced by group policy application to the machine, AKA "machine based enforcement."  The setting "<strong>Interactive logon: Require smart card</strong>" is exposed in an ADMX template:

<strong>Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options</strong>

&nbsp;

<span style="color: #0000ff"><em><strong>Make it so!</strong></em></span>

Ok, we applied the policy.  First up is management, once this policy is applied to a workstation no one will be able to login to it with anything but a smart card.  Ever.  Until you remove the policy setting.  It makes for a high touch scenario where you are constantly changing the application of this setting by moving workstations in the directory or filtering the GPO on them somehow.  With the constant flux of new users with no smartcard,  existing users forgetting their smart card at home, or worse yet losing the smart card; this can make for a cumbersome job for IT Pros to manage.  Tracking what machines should be enforced, what machines shouldn't, and when they should be reverted one way or the other can turn into quite the affair.  Also consider the scenario of users moving around the building or campus, if I lost my smart card, dog ate it, or whatever the case may be I can't just login to any workstation without a call to the help desk or IT shop.  Something else to add to what I'm sure is a long list of daily activities.  : (

<span style="color: #0000ff"><strong><em>How are we doing?</em></strong></span>

Then there's reporting, how do we report to information assurance managers how many users are actually SCL enforced?  Well the simple answer is, you can't - because you're enforcing machines not users.  Sure you can scrape DC security logs (oh boy, lets hope you have some type of audit collection services) and get an idea of <a href="https://blogs.technet.microsoft.com/nextnextfinish/2016/09/14/was-a-smart-card-used-for-logon/">how many smart card logons </a>are happening, but this too can become inconsistent with so many variables and scenarios to account for.  Potentially what you end up reporting is the number of machines that are enforced, the number that aren't, how many smart card logons are happening across all DCs in the domain, and how many un/pw logons are happening.  It would be quite interesting trying to get an accurate count of how many people "are required" to use a smart card for interactive logon with all of this data.  Not so much fun, I'd much rather be playing Halo 5.

<span style="color: #0000ff"><strong><em>That pesky password again!</em></strong></span>

Let's not forget about the subject of  password management either.  If you aren't enforcing SCL on the user account control attribute on the user account object in AD, then passwords can still be used.  As long as a user knows their current password, they can continue to change it.  They can also continue to use it on machines that do not have the require smart card policy enforced.  In fact they can also continue to use the password on machines where smart card logon is required for interactive logon (type 2) for authenticating to network resources, which are "logon type 3."  So what you can potentially end up with is a hybrid mesh of users and computers in various states, some users may have their password reset because they forgot their smart card, then they can continue to change it and use it even after they have their machine "re-enforced" to require smart card logon.  They can still use the password on machines that aren't SCL enforced (if they find one), and they can still use the password for Network logons, which are "Type 3" logons.

<strong><span style="color: #0000ff">Thoughts?</span></strong>

For these reasons this is my least favorite of the two ways to accomplish SCL enforcement.  It's not very flexible, agile, or hands off from an administrative perspective.  I'm not saying enforcing SCL this way doesn't have its places, for instance maybe a medium or high assurance kiosk type workstation such as a local registration authority machine, or other sensitive kiosk type.  But generally speaking for most cases I tend to recommend against this method.

&nbsp;

<span style="color: #ff00ff;text-decoration: underline"><strong>COA 2 - Enforce SCL on the AD User Account Object</strong></span>

Alternatively smart card logon can also be enforced on a per-user basis by modifying the "Smart Card Required for Interactive Logon" (AKA SCRIL) user account control flag on the AD user object.  The user account control attribute is a single user account object attribute that is composed of bitmask flags.   This attribute value can be a combination of one or more of <a href="https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx">24 possible values</a>.

<a href="https://msdnshared.blob.core.windows.net/media/2017/09/SCRIL.png"><img width="763" height="400" class="alignleft wp-image-475" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/SCRIL.png" /></a>

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

The flag we're interested in is <strong>ADS_UF_SMARTCARD_REQUIRED</strong> which has a value of <strong>262144</strong>.  We can programmatically test for this flag (a number of ways) to very quickly determine if a user is SCL enforced or not, and based on this information perform some action.  The flag corresponds to this checkbox in the UI:

<a href="https://msdnshared.blob.core.windows.net/media/2017/09/SCRILBox.png"><img width="403" height="535" class="alignleft wp-image-485" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/SCRILBox.png" /></a>

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

It's important to understand what happens when you toggle this flag on with a bitwise operation.  It sets the password to a high entropy 120 character random value, so that the user does not know the password.  This password hash can be scrambled at will, by - you guessed it flipping the flag off and then flipping it back on, this is commonly referred to as "Rotating the password hash."  As you may or may not know password hashes for SCL enforced accounts should be rotated at an interval since the hashes never technically expire and can be stolen and used for logons other than type 2 (interactive), of which logon type 3 (network) is probably the scariest and likely one of (if not the) the most widely used logon types by an attacker when they're traversing network endpoints.  There is also something here that some folks are not aware of.  After you've toggled the flag on, SCL enforced the account and thereby scrambled the password - an administrator can in fact reset the users password for them and they can use it for network logons (Type 3)!  This is where the terms "SCL Enablement," and SCL Enforcement" come into play.  There are really 3 configurations a user can potentially be in when using smart cards:
<ol>
 	<li>SCL Enabled (here we are only talking about implicit UPN mapping)
<ol>
 	<li>Subject Alternative Name - Principal name on the smart card certificate is implicitly mapped to an AD user objects UPN attribute</li>
</ol>
</li>
 	<li>SCL Enforced
<ol>
 	<li>Subject Alternative Name - Principal name on the smart card certificate is implicitly mapped to an AD user objects UPN attribute</li>
 	<li>SCRIL flag ON</li>
</ol>
</li>
 	<li>SCL Enforced and has/knows password
<ol>
 	<li>Subject Alternative Name - Principal name on the smart card certificate is implicitly mapped to an AD user objects UPN attribute</li>
 	<li>SCRIL flag ON</li>
 	<li>Admin resets password, user knows and can maintain password (pw can be used for type 3 logons)</li>
</ol>
</li>
</ol>
The ideal place to be from a security perspective is number 2, with the hash being scrambled at an interval.  Number 3 <em>could happen</em> (I've seen it) in an environment if there is a non-smart card aware application or service that a user must be able to logon to remotely (type 3) AND they must be SCL enforced.  This scenario doesn't happen often, but it can happen.  Number 1 is exactly that, you are enabled for smart card logon you can use it or not use it.  Scenarios 1 and 3 are considered less desirable due to the fact that the user has/knows a password and therefore a hash that can potentially be a victim of credential theft.

<span style="color: #008000"><strong>Make it so, but faster, stronger, leaner!</strong></span>

So we can toggle this flag to SCL enforce users, awesome.  There are a bunch of ways we can do this in both vbscript and PowerShell.  Hopefully everyone is using PowerShell these days since its the administrative tool of choice, so we'll go with that.  We can use some code to perform pretty basic stuff, like the following:
<ol>
 	<li>Query the directory for users who are NOT SCRIL enforced</li>
 	<li>Enforce them</li>
</ol>
But we likely want to do something like the following:
<ol>
 	<li>Query the directory for users</li>
 	<li>Check if they are SCRIL or Not
<ol>
 	<li>If they are NOT SCRIL
<ol>
 	<li>Check if they are an exception and if so Skip</li>
 	<li>If they are not an exception toggle the SCRIL flag on</li>
</ol>
</li>
 	<li>If they are already SCRIL
<ol>
 	<li>Toggle SCRIL flag off, then toggle back ON to scramble hash</li>
</ol>
</li>
</ol>
</li>
</ol>
You'll probably want to use some attribute on the user object to key off of to tell if a user is an exception to smart card logon enforcement or not.  Group membership in an exception group seems to be the most widely used and easiest to implement.  Identify your exception groups, write your PowerShell code and schedule it to run at an interval.  I like the idea of running it nightly for a few reasons.  First being your password hashes on already SCL enforced accounts will be scrambled nightly thus only giving those hashes a glorious 24 hour life.  The second is for ease of un-enforcement.  Consider the following scenario:
<ol>
 	<li>User forgets smart card at home.</li>
 	<li>User calls help desk, account gets un-enforced and password gets reset.</li>
 	<li>User works all day, then goes home.</li>
 	<li>That night the scheduled enforcement task runs and because the user is not a member of an exception group they are again enforced.</li>
</ol>
Hopefully they remember their smart card the next day, otherwise rinse and repeat.  Users should only be placed in SCL exception security groups for <em>long term</em> exceptions.  You are not managing/filtering GPOs, moving machines, hunting for an un-enforced machine to logon to, etc.  You simply un-enforce the account and reset the password for the user, the nightly job takes care of the rest.  The user also has the flexibility to roam the building/campus and logon at any workstation.  You can also choose to rotate the password hashes or not of already enforced users during the nightly job.

Oh and don't forget to use a least privileged service account for the identity that the script runs under, in the directory all you need is an account that has <em>Read Account Restrictions</em>, and <em>Write Account restrictions</em> against the user objects it needs to process delegated to it.  ; )  On the server you run it from you need the logon as a batch user rights assignment for the identity.

<a href="https://msdnshared.blob.core.windows.net/media/2017/09/delegateAccount.png"><img width="723" height="632" class="alignleft size-full wp-image-495" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/delegateAccount.png" />
</a>

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

Here is a small snip of PowerShell that goes over this basic concept.  You'll want to add all of the standard stuff like logging, error handling, modify your queries, modify/add your exception groups, etc.  You get the idea!

&nbsp;
<div class="codeBlock">
<pre><code><span class="command"><span style="color: #0000ff">Import-Module</span></span> <span class="commandArgument"><span style="color: #8a2be2">ActiveDirectory</span></span>

<span class="comment"><span style="color: #008000">#query AD for user accounts using the following LDAP filter (All user accounts in the Department users OU)</span></span>
<span class="variable"><span style="color: #ff4500">$OUQuery1</span></span> <span class="operator"><span style="color: #666666">=</span></span> <span class="command"><span style="color: #0000ff">Get-ADObject</span></span> <span class="commandParameter"><span style="color: #000080">-LDAPFilter</span></span> <span class="string"><span style="color: #a31515">"(&amp;(ObjectCategory=Person)(ObjectClass=User))"</span></span> <span class="commandParameter"><span style="color: #000080">-Properties</span></span> <span class="commandArgument"><span style="color: #8a2be2">distinguishedName</span></span><span class="operator"><span style="color: #666666">,</span></span><span class="commandArgument"><span style="color: #8a2be2">useraccountcontrol</span></span> <span class="commandParameter"><span style="color: #000080">-server</span></span> <span class="commandArgument"><span style="color: #8a2be2">localhost:389</span></span> <span class="commandParameter"><span style="color: #000080">-searchBase</span></span> <span class="string"><span style="color: #a31515">"ou=department users,dc=proseware,dc=com"</span></span> <span class="commandParameter"><span style="color: #000080">-searchScope</span></span> <span class="commandArgument"><span style="color: #8a2be2">subtree</span></span>

<span class="keyword"><span style="color: #0000ff">function</span></span> <span class="commandArgument"><span style="color: #8a2be2">Enforce-Users</span></span>(<span class="variable"><span style="color: #ff4500">$Users</span></span>)
{
    <span class="comment"><span style="color: #008000">#here we test the $users variable to ensure it isn't NULL"</span></span>
    <span class="keyword"><span style="color: #0000ff">if</span></span>(<span class="variable"><span style="color: #ff4500">$users</span></span>)
    {
        <span class="comment"><span style="color: #008000">#do work here, iterate through the $users variable (Get-ADObject query return set)</span></span>
        <span class="keyword"><span style="color: #0000ff">foreach</span></span>(<span class="variable"><span style="color: #ff4500">$user</span></span> <span class="keyword"><span style="color: #0000ff">in</span></span> <span class="variable"><span style="color: #ff4500">$users</span></span>)
        {
            <span class="variable"><span style="color: #ff4500">$exception</span></span> <span class="operator"><span style="color: #666666">=</span></span> <span class="string"><span style="color: #a31515">"False"</span></span> 
            <span class="comment"><span style="color: #008000">#test for a clo exception group, only searches one level - not recursively, if you want a recursive dig add your code here</span></span>
            <span class="variable"><span style="color: #ff4500">$userGroupMemberships</span></span> <span class="operator"><span style="color: #666666">=</span></span> <span class="command"><span style="color: #0000ff">Get-ADPrincipalGroupMembership</span></span> <span class="commandParameter"><span style="color: #000080">-server</span></span> <span class="commandArgument"><span style="color: #8a2be2">localhost:389</span></span> <span class="commandParameter"><span style="color: #000080">-identity</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">distinguishedName</span>
            <span class="keyword"><span style="color: #0000ff">foreach</span></span>(<span class="variable"><span style="color: #ff4500">$groupmembership</span></span> <span class="keyword"><span style="color: #0000ff">in</span></span> <span class="variable"><span style="color: #ff4500">$userGroupMemberships</span></span>)
            {
                <span class="keyword"><span style="color: #0000ff">if</span></span>(<span class="variable"><span style="color: #ff4500">$groupmembership</span></span> <span class="operator"><span style="color: #666666">-like</span></span> <span class="string"><span style="color: #a31515">"*PROAZURE_CLO_Exceptions*"</span></span>)
                {
                    <span class="command"><span style="color: #0000ff">Write-Host</span></span> <span class="string"><span style="color: #a31515">"Not Enforced: "</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">name</span>
                    <span class="variable"><span style="color: #ff4500">$exception</span></span> <span class="operator"><span style="color: #666666">=</span></span> <span class="string"><span style="color: #a31515">"True"</span></span>
                }
            }
            <span class="keyword"><span style="color: #0000ff">if</span></span>(<span class="variable"><span style="color: #ff4500">$exception</span></span> <span class="operator"><span style="color: #666666">-eq</span></span> <span class="string"><span style="color: #a31515">"False"</span></span>)
            {
                <span class="comment"><span style="color: #008000">#not an exception, enforce smart card required for interactive logon</span></span>
                <span class="variable"><span style="color: #ff4500">$UACValue</span></span> <span class="operator"><span style="color: #666666">=</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">userAccountControl</span>
                <span class="comment"><span style="color: #008000">#check account to see if it is currently enforced</span></span>
                <span class="keyword"><span style="color: #0000ff">if</span></span>(<span class="variable"><span style="color: #ff4500">$UACValue</span></span> <span class="operator"><span style="color: #666666">-band</span></span> <span class="number"><span style="color: #800080">262144</span></span>)
                {
                    <span class="comment"><span style="color: #008000">#Account is currently enforced, unenforce and re-enforce to scramble password</span></span>
                    <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">userAccountControl</span> <span class="operator"><span style="color: #666666">=</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">userAccountControl</span> <span class="operator"><span style="color: #666666">-bxor</span></span> <span class="number"><span style="color: #800080">262144</span></span>
                    <span class="command"><span style="color: #0000ff">Set-ADObject</span></span> <span class="commandParameter"><span style="color: #000080">-Instance</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span>
                    <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">userAccountControl</span> <span class="operator"><span style="color: #666666">=</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">userAccountControl</span> <span class="operator"><span style="color: #666666">-bor</span></span> <span class="number"><span style="color: #800080">262144</span></span>
                    <span class="command"><span style="color: #0000ff">Set-ADObject</span></span> <span class="commandParameter"><span style="color: #000080">-Instance</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span> 
                    <span class="command"><span style="color: #0000ff">Write-Host</span></span> <span class="string"><span style="color: #a31515">"Enforced: "</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">name</span>
                }
                <span class="keyword"><span style="color: #0000ff">else</span></span>
                {
                    <span class="comment"><span style="color: #008000">#Account is NOT currently enforced, enforce account</span></span>
                    <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">userAccountControl</span> <span class="operator"><span style="color: #666666">=</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">userAccountControl</span> <span class="operator"><span style="color: #666666">-bor</span></span> <span class="number"><span style="color: #800080">262144</span></span>
                    <span class="command"><span style="color: #0000ff">Set-ADObject</span></span> <span class="commandParameter"><span style="color: #000080">-Instance</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span> 
                    <span class="command"><span style="color: #0000ff">write-host</span></span> <span class="string"><span style="color: #a31515">"Enforced: "</span></span> <span class="variable"><span style="color: #ff4500">$user</span></span><span class="operator"><span style="color: #666666">.</span></span><span class="member">name</span>
                }
            }  
        }
    }
}

<span class="command"><span style="color: #0000ff">Enforce-Users</span></span>(<span class="variable"><span style="color: #ff4500">$OUQuery1</span></span>)
</code></pre>
</div>
<strong><span style="color: #008000">How are we doing now?</span></strong>

How many users are SCL enforced?  Lets see, its right at your fingertips with some LDAP filters; no admin account needed.  Scope your queries to your specific OUs and you'll have the information quickly and easily.  Return any attributes you like, export to CSV, dump to text file, etc.  Tons of options here.  Create a graphical report using PowerBI maybe!?

To return all user account objects that are SCL enforced:

<span style="color: #ff6600">dsquery * -filter "(&amp;(ObjectCategory=Person)(ObjectClass=User)(userAccountControl:1.2.840.113556.1.4.803:=262144))" name userPrincipalName distinguishedName</span>

To return all users account objects that are NOT SCL enforced:

<span style="color: #ff6600">dsquery * -filter "(&amp;(ObjectCategory=Person)(ObjectClass=User)(!userAccountControl:1.2.840.113556.1.4.803:=262144))" name userPrincipalName distinguishedName</span>

As you can see reporting is fairly easy and super flexible, you can query the directory with dsquery, vbscript, PowerShell, the MMC snap-in, etc!

<strong><span style="color: #008000">That pesky password? Gone!</span></strong>

It's a constant game of cat and mouse to attempt to eliminate the use of passwords altogether.  But hey if we are smart card enforcing users and rotating their password hashes at an (hopefully short) interval then we are in good shape!  Audit your enforcement exception security groups regularly - the less users that have/know their password the better.

<strong><span style="color: #008000">Thoughts?</span></strong>

Utilizing a PowerShell script to perform the workload of processing user accounts for enforcement allows for completely automated execution of the task, granular targeting by organizational unit, and expected consistency of results.  For ease of administration, reporting, consistency, and greater flexibility the user account control (UAC) attribute on AD user account objects is the recommended way to smart card enforce users (in most cases).

Happy Friday!

Jesse]]></content:encoded>
    </item>
    <item>
      <title>OCSP Responder Signing Certificate from a Stand Alone CA + Configs</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/ocsp-responder-signing-certificate-from-a-stand-alone-ca-configs</link>
      <pubDate>Sat, 14 Jan 2017 14:23:49 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/?p=245</guid>
      <description><![CDATA[Hello All,

Recently I came across a scenario that required a manually enrolled and assigned OCSP...]]></description>
      <content:encoded><![CDATA[Hello All,

Recently I came across a scenario that required a manually enrolled and assigned OCSP signing certificate for the online responder service and configurations, and wanted to share a couple things on this topic.  So today I'm going to talk about manually requesting an OCSP signing certificate from a stand-alone CA, and some PowerShell snippets to help accelerate testing.  MSFT Stand Alone CAs don't have the luxury of using certificate templates like an enterprise CA does, so the certificate signing request is created manually with the required parameters on the OCSP responder and then signed by the stand alone CA.  By default if an OCSP responder is setup for auto enrollment against an enterprise CA for its OCSP signing certificate(s), it enrolls for an ocsp signing certificate<em> per revocation configuration</em>, so if you had 10 revocation configurations you would have 10 OCSP response signing certificates etc.  You can view those by opening the certificate store for the online responder service on the machine:

<img width="816" height="631" class="alignnone size-full wp-image-255" alt="defaultocspsigningcerts_01_14_2017" src="https://msdnshared.blob.core.windows.net/media/2017/01/defaultOCSPSigningCerts_01_14_2017.png" />

On the contrary you can use 1 OCSP response signing certificate for all of your revocation configurations.  What's the use case scenario for this?  One that stands out would be if you wanted to use a Hardware Security Module (HSM) to encapsulate and protect the OCSP response signing key.  Configuring an HSM for 20+ OCSP signing certificates that have a 2 week expiration/rollover can become a very high touch situation.  Using an HSM is out of scope of this article, so you'll want to work with your HSM vendor to get that installed and integrated if you so choose to use one.

So in this lab scenario I have one Server 2012 R2 OCSP responder, and one Server 2012R2 stand alone CA.  First things first we want to create the certificate signing request on the OCSP responder.  To do that we'll generate an INF file that has all of the certificate parameters that we need and use the certreq.exe command to generate the request.  <a href="https://technet.microsoft.com/en-us/library/cc770413(v=ws.10).aspx">This request inf </a>is a good place to start.  I recommend adding the required key size to the INF (highlighted below), otherwise you end up with a 1024 bit RSA key which is considered a weak RSA key.  Notice there are two required OIDs present in the inf, the OCSP signing OID (1.3.6.1.5.5.7.3.9), and the OCSPNOREVCHECK OID (1.3.6.1.5.5.7.48.1.5).  In order for the online responder to use the certificate for OCSP response signing BOTH of these OIDs must be present in its certificate.

<img width="597" height="493" class="alignnone size-full wp-image-265" alt="ocsprequestinf_01_14_2017" src="https://msdnshared.blob.core.windows.net/media/2017/01/OCSPRequestINF_01_14_2017.png" />

Once we have our inf file ironed out we generate the request with certreq.exe:

<img width="993" height="196" class="alignnone size-full wp-image-275" alt="createcsr" src="https://msdnshared.blob.core.windows.net/media/2017/01/createCSR.png" />

Now take the request file, in this case "ocsp.req" and get it over to your stand alone CA, which hopefully is an offline CA ; )  Once you have it on the stand alone CA there are a few things to be aware of here.  The first being that in order to include the id-pkix-ocsp-nocheck extension in the issued OCSP response signing certificate you MUST enable this flag on a stand alone CA first.  Enable the flag with the certutil command:

<strong>certutil -v -setreg policy\editflags +EDITF_ENABLEOCSPREVNOCHECK</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/EnableOCSPREVNOCHECK_01_14_2017..png"><img width="845" height="1024" class="alignnone size-large wp-image-305" alt="enableocsprevnocheck_01_14_2017" src="https://msdnshared.blob.core.windows.net/media/2017/01/EnableOCSPREVNOCHECK_01_14_2017.-845x1024.png" /></a><a href="https://msdnshared.blob.core.windows.net/media/2017/01/ocspNoRevCheck_01_14_2017.png"></a>

Take note of the old and new values above, values that are enabled are NOT in parenthesis.  Not quite done here yet though!  The registry parameters for the CA are only read-in at service startup, so if you make a registry change it will not take effect until you restart the CA service.  Once the CA service is restarted we can submit the request to the CA and issue the certificate.  Here I'll just use the UI to submit the request by browsing to the request file, you can of course use certreq to submit the request as well.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/SubmitRequest.png"><img width="657" height="348" class="alignnone size-full wp-image-315" alt="submitrequest" src="https://msdnshared.blob.core.windows.net/media/2017/01/SubmitRequest.png" /></a>

Once it's submitted we can go to pending requests and issue the certificate.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/issueOCSPCert.png"><img width="967" height="264" class="alignnone size-full wp-image-325" alt="issueocspcert" src="https://msdnshared.blob.core.windows.net/media/2017/01/issueOCSPCert.png" /></a>

Now lets go to issued certificates and double click the freshly minted certificate.  Click the details tab and lets make sure we have the required OCSP response signing EKU, and the required id-pkix-ocsp-nocheck extension.  As you can see below both requirements are met!

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/OCSPREVNOCHECKIssued_01_14_17.png"><img width="415" height="514" class="alignnone size-full wp-image-345" alt="ocsprevnocheckissued_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/OCSPREVNOCHECKIssued_01_14_17.png" /></a><a href="https://msdnshared.blob.core.windows.net/media/2017/01/OCSPREVNOCHECKIssued.png"></a>

Now click the copy to file button at the bottom of the details tab, export the certificate out, and get it moved back to the OCSP responder.  Once we have it on the OCSP responder we can install the certificate by again using the certreq command.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/AcceptOnResponder_01_14_17.png"><img width="992" height="151" class="alignnone size-full wp-image-365" alt="acceptonresponder_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/AcceptOnResponder_01_14_17.png" /></a>

Now that we have the certificate installed we must give the network service read access to the OCSP response signing certificates private key, this is required as the online responder service runs as the network service identity.  We can do this in the certificate snap-in for the local machines personal store.  Once we are there we can right click on the OCSP response signing certificate and click "<strong>manage private keys</strong>."

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/SigningCertPrivateKey_01_14_17.png"><img width="1006" height="347" class="alignnone size-full wp-image-375" alt="signingcertprivatekey_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/SigningCertPrivateKey_01_14_17.png" /></a>

Add the network service and give it allow read access.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/networkService_01_14_17.png"><img width="373" height="451" class="alignnone size-full wp-image-385" alt="networkservice_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/networkService_01_14_17.png" /></a>

Now that we have the OCSP signing certificate requested, issued, and installed we can move over to configuring the online responder to use this certificate for its revocation configurations.  We can use either the UI to create them, or PowerShell.   Likely you will be creating quite a number of them so you'll likely want to use PowerShell, but we'll go through creating one manually for awareness.  So here we go, open the online responder snap-in and right click revocation configuration and click add.  Here I will call this one DoD CA-28.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev2_01_14_17.png"><img width="715" height="491" class="alignnone size-full wp-image-395" alt="addrev2_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev2_01_14_17.png" /></a>

On the next screen it wants the CA certificate that you will be providing OCSP responses for, so I'm going to select import from a file click next and then browse to the DoD CA-28 certificate, then click next.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev3_01_14_17.png"><img width="717" height="494" class="alignnone size-full wp-image-405" alt="addrev3_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev3_01_14_17.png" /></a>

This screen is where we select manual assignment of a signing certificate.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev4_01_14_17.png"><img width="719" height="492" class="alignnone size-full wp-image-415" alt="addrev4_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev4_01_14_17.png" /></a>

On the next screen you'll likely receive the following error, this is because the online responder has no information on where to fetch the CAs CRL.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev5_01_14_17.png"><img width="716" height="494" class="alignnone size-full wp-image-425" alt="addrev5_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev5_01_14_17.png" /></a>

So we click the provider button and enter in the crl distribution point information.  At the bottom you can tell the responder how frequently to fetch the CRL, this is based on minutes.

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev6_01_14_17.png"><img width="718" height="521" class="alignnone size-full wp-image-435" alt="addrev6_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev6_01_14_17.png" /></a>

Once you've entered in your information you can click finish.  Now in the snap-in left pane we need to expand array configuration and click on the responder.  In the right pane click on the newly created revocation configuration and click "<strong>Assign Signing Certificate</strong>."

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev7_01_14_17.png"><img width="719" height="280" class="alignnone size-full wp-image-445" alt="addrev7_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev7_01_14_17.png" /></a>

You should get a Windows Security dialogue box that displays available OCSP signing certificates.  Select your certificate and click OK.  Now to submit a request to the responder and test it.  Here I'm using group policy to assign my OCSP responder URL to the CA certificate that issued my leaf certificate.  I'll then use certutil -verify to submit an OCSP request to the responder.  We can see the entry generated in the security event log for the request, with a response status of "Good."

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev9_01_14_17.png"><img width="992" height="819" class="alignnone size-full wp-image-455" alt="addrev9_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev9_01_14_17.png" /></a>

Now about those revocation configurations, creating all of those can be cumbersome and not very fun.  If you're doing some serious testing then you probably want to remove and re-create your revocation configurations multiple times.  Here's a handy PowerShell snippet that will remove all of your current OCSP revocation configurations.
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;width: 750;border: 1px solid black;overflow: auto;padding: 5px">
<table width="676" border="0" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td valign="Top">
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;padding: 5px;background: #cecece">001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019</div></td>
<td nowrap="nowrap" valign="Top">
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;padding: 5px;background: #fcfcfc"><span style="color: #ff4500">$ocsp</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">New-Object</span><span style="color: #000000"> </span><span style="color: #000080">-ComObject</span><span style="color: #000000"> </span><span style="color: #8a2be2">CertAdm.OCSPAdmin                                                                       </span>
<span style="color: #ff4500">$ocsp</span><span style="color: #a9a9a9">.</span><span style="color: #000000">GetConfiguration</span><span style="color: #000000">(</span><span style="color: #ff4500">$env:computername</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #ff4500">$true</span><span style="color: #000000">)</span>
<span style="color: #ff4500">$rcCount</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$ocsp</span><span style="color: #a9a9a9">.</span><span style="color: #000000">OCSPCAConfigurationCollection</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Count</span>
<span style="color: #00008b">if</span><span style="color: #000000">(</span><span style="color: #ff4500">$rcCount</span><span style="color: #000000"> </span><span style="color: #a9a9a9">-gt</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">)</span>
<span style="color: #000000">{</span>
<span style="color: #000000">    </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #8b0000">"Deleting"</span><span style="color: #000000"> </span><span style="color: #ff4500">$rcCount</span><span style="color: #000000"> </span><span style="color: #8b0000">"Revocation Configuration entries..."</span>
<span style="color: #000000">    </span><span style="color: #ff4500">$entries</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$ocsp</span><span style="color: #a9a9a9">.</span><span style="color: #000000">OCSPCAConfigurationCollection</span><span style="color: #000000"> </span><span style="color: #a9a9a9">|</span><span style="color: #000000"> </span><span style="color: #0000ff">select</span><span style="color: #000000"> </span><span style="color: #8a2be2">Identifier</span>
<span style="color: #000000">    </span><span style="color: #00008b">foreach</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #ff4500">$e</span><span style="color: #000000"> </span><span style="color: #00008b">in</span><span style="color: #000000"> </span><span style="color: #ff4500">$entries</span><span style="color: #000000">)</span><span style="color: #000000"> </span>
<span style="color: #000000">    </span><span style="color: #000000">{</span>
<span style="color: #000000">        </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #8b0000">"`tDeleting"</span><span style="color: #000000"> </span><span style="color: #ff4500">$e</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Identifier</span>
<span style="color: #000000">        </span><span style="color: #ff4500">$ocsp</span><span style="color: #a9a9a9">.</span><span style="color: #000000">OCSPCAConfigurationCollection</span><span style="color: #a9a9a9">.</span><span style="color: #000000">DeleteCAConfiguration</span><span style="color: #000000">(</span><span style="color: #ff4500">$e</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Identifier</span><span style="color: #000000">)</span>
<span style="color: #000000">    </span><span style="color: #000000">}</span>
<span style="color: #000000">    </span><span style="color: #ff4500">$ocsp</span><span style="color: #a9a9a9">.</span><span style="color: #000000">SetConfiguration</span><span style="color: #000000">(</span><span style="color: #ff4500">$env:computername</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #ff4500">$true</span><span style="color: #000000">)</span>
<span style="color: #000000">    </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #8b0000">"All entries deleted."</span>
<span style="color: #000000">}</span>
<span style="color: #00008b">else</span>
<span style="color: #000000">{</span>
<span style="color: #000000">    </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #8b0000">"No entries found."</span>
<span style="color: #000000">}</span></div></td>
</tr>
</tbody>
</table>
</div>
&nbsp;

I also modified the <a href="https://gallery.technet.microsoft.com/scriptcenter/Server-2008-R2-and-Server-30a916cb">existing OCSP responder function</a> to create the revocation configurations with a manually assigned signing certificate.  Here are the changes you'll want to make if you want to do this.  Comment out the following lines and replace them with the ones below it.  Be sure to modify the Subject name value to match the Subject value in your OCSP response signing certificate.
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;width: 750;border: 1px solid black;overflow: auto;padding: 5px">
<table border="0" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td valign="Top">
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;padding: 5px;background: #cecece">001
002
003
004
005
006
007
008</div></td>
<td nowrap="nowrap" valign="Top">
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;padding: 5px;background: #fcfcfc"><span style="color: #006400">#if using autoenrollment Modify the following two values to match your environment</span>
<span style="color: #006400">#$OCSPSigningTemplate = "ProsewareAzure-OCSPResponseSigning"</span>
<span style="color: #006400">#Get the certificate template name from the certificate templates snap-in</span>
<span style="color: #006400">#login to your MSFT issuing CA and issue the certutil -cainfo command to get the following values for the next line in this format: &lt;DNS NAME&gt;\&lt;CA Name&gt;</span>
<span style="color: #006400">#$CACOnfig = "proazureca01.proseware.com\Proseware Azure Subordinate Certificate Authority"</span>
<span style="color: #006400">#if you want to manually assign a signing certificate use these instead of above, enter the subject value of your signing certificate</span>
<span style="color: #ff4500">$signingCert</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">dir</span><span style="color: #000000"> </span><span style="color: #8a2be2">cert:\LocalMachine\My</span><span style="color: #000000"> </span><span style="color: #a9a9a9">|</span><span style="color: #000000"> </span><span style="color: #0000ff">where</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #ff4500">$_</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Subject</span><span style="color: #000000"> </span><span style="color: #a9a9a9">-eq</span><span style="color: #000000"> </span><span style="color: #8b0000">"CN=PROAZURERD01"</span><span style="color: #000000">}</span>
<span style="color: #ff4500">$signingCert</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$SigningCert</span><span style="color: #a9a9a9">.</span><span style="color: #000000">GetRawCertData</span><span style="color: #000000">(</span><span style="color: #000000">)</span></div></td>
</tr>
</tbody>
</table>
</div>
&nbsp;

Also we want to comment out the lines that configure auto enrollment and replace them with the manual assignment configs.  You can see there are 3 signing flags that we are using to manually assign the OCSP signing certificate, the signing flags are documented on msdn <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa386387(v=vs.85).aspx">here</a>.
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;width: 750;border: 1px solid black;overflow: auto;padding: 5px">
<table width="818" border="0" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td valign="Top">
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;padding: 5px;background: #cecece">001
002
003
004
005
006
007
008
009
010
011
012</div></td>
<td nowrap="nowrap" valign="Top">
<div style="font-family: Consolas,Lucida Console;font-size: 10pt;padding: 5px;background: #fcfcfc"><span style="color: #006400">#OCSP Signing Cert Autoenrollment settings</span>
<span style="color: #006400">#$NewConfig.SigningFlags = 0x294</span>
<span style="color: #006400">#$NewConfig.CAConfig = $CAConfig</span>
<span style="color: #006400">#$NewConfig.SigningCertificateTemplate = $OCSPSigningTemplate                                                          </span>
<span style="color: #000000">     </span>
<span style="color: #006400">#OCSP Signing Cert manual assignment settings &lt;----------</span>
<span style="color: #006400">#SigningFlags for manual assignment - if you have enrolled an OCSP signing certificate manually</span>
<span style="color: #006400">#OCSP_SF_SILENT 0x001 </span>
<span style="color: #006400">#OCSP_SF_MANUAL_ASSIGN_SIGNINGCERT 0x020 </span>
<span style="color: #006400">#OCSP_SF_RESPONDER_ID_NAME 0x080 </span>
<span style="color: #ff4500">$NewConfig</span><span style="color: #a9a9a9">.</span><span style="color: #000000">SigningFlags</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #800080">0xa1</span><span style="color: #000000"> </span>
<span style="color: #ff4500">$newConfig</span><span style="color: #a9a9a9">.</span><span style="color: #000000">SigningCertificate</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$signingCert</span></div></td>
</tr>
</tbody>
</table>
</div>
&nbsp;

I like to use the Responder ID name flag instead of the responder ID key hash flag (the RFC dictates that an OCSP response must have one of the two in it).  This flag corresponds to the following setting for a revocation configuration:

<a href="https://msdnshared.blob.core.windows.net/media/2017/01/addRev10_01_14_17.png"><img width="408" height="459" class="alignnone size-full wp-image-465" alt="addrev10_01_14_17" src="https://msdnshared.blob.core.windows.net/media/2017/01/addRev10_01_14_17.png" /></a>

I like to use the subject ID flag because it can be handy to easily identify the responder that sent a response when looking at logs or network captures.  Once you've made these changes you can execute the function to create your revocation configs.  You should end up with a bunch that say "manual assignment" under revocation configurations, and those configurations should be ready to service requests.  I hope this helps clear things up for using a manually enrolled OCSP signing certificate.

See you next time!

Jesse]]></content:encoded>
    </item>
    <item>
      <title>Was a Smart Card Used for Logon?</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/was-a-smart-card-used-for-logon</link>
      <pubDate>Wed, 14 Sep 2016 14:46:23 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/?p=135</guid>
      <description><![CDATA[Hello All,

This has been discussed before and it recently hit my desk again.  Though the...]]></description>
      <content:encoded><![CDATA[Hello All,

This has been discussed before and it recently hit my desk again.  Though the information is out there it seems most of it is a bit dated, circa <a href="https://blogs.msdn.microsoft.com/ericfitz/2007/02/05/determining-whether-a-user-logged-on-using-a-smart-card/">2007</a> and <a href="https://social.technet.microsoft.com/wiki/contents/articles/11844.find-out-if-a-smart-card-was-used-for-logon.aspx">2012</a>.  The preferred method (for the majority) is to search the security event logs on domain controllers to make this determination and/or provide smart card usage data.  Most organizations have a flavor of security log archiving and aggregation like SCOM ACS or other solutions for their security event logs on domain controllers.  Hopefully most folks are running 2012 R2 domain controllers,  but fear not this applies to 2008 R2 DCs as well.  To be fair I have not looked at a 2008 DC in quite some time.  : )  So the information in the aforementioned posts regarding the Pre-Authentication (PA) types still applies, the following PA types are used in Windows implementation of the <a href="https://tools.ietf.org/html/rfc4556">Kerberos PKINIT extension</a>:

PA-PK-AS-REQ_OLD   14 (pkinit)
PA-PK-AS-REP_OLD    15 (pkinit)
PA-PK-AS-REQ            16 (pkinit)
PA-PK-AS-REP             17 (pkinit)

In Windows Server 2008 R2+ (verified) you can identify the PA type a user used to logon, this information is recorded in Event ID 4768.  Event ID 4768 is recorded only when you audit the request for Kerberos TGTs, in order to do this the "Audit Kerberos Authentication Service" must be enabled for success audits in the DCs advanced audit policy under  <strong>Account Logon | Audit Kerberos Authentication Service</strong>.

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/AuditKerbAuthNService.png"><img width="1024" height="437" class="alignnone size-large wp-image-156" alt="AuditKerbAuthNService" src="https://msdnshared.blob.core.windows.net/media/2016/09/AuditKerbAuthNService-1024x437.png" /></a><a href="https://msdnshared.blob.core.windows.net/media/2016/09/AuditKerbAuthNService.png"></a>

Once the audit policy is enabled you can review Event ID 4768 and key off of the PA type value in the event.  PA types are documented in <a href="https://tools.ietf.org/html/rfc4120">RFC 4120 </a>- Kerberos Network Authentication Service.  As stated before if any of the above and previously mentioned PA types are used (14-17), then a smart card was used for pre-authentication during the Kerberos AS_REQ TGT process.  The event will also log the following attributes from the users certificate: issuer, serial number, and thumbprint.  Below is a screen shot from a DC I have in Azure that shows the data.  Use caution when deploying this audit policy setting in regards to log size and rollover as this audit will log every TGT request that comes into the KDC.

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/PAType.png"><img width="1024" height="947" class="alignnone size-large wp-image-136" alt="PAType" src="https://msdnshared.blob.core.windows.net/media/2016/09/PAType-1024x947.png" /></a>

Not much new here; the big thing is the change of the event ID and remembering to enabe TGT auditing in the advanced audit policy.  Once you've that, you can easily discern between un/pw and smart card logon.  Hope everyone is having a great week!

Jesse]]></content:encoded>
    </item>
    <item>
      <title>Smartcard Authentication with Outlook 2016</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/smartcard-authentication-with-outlook-2016</link>
      <pubDate>Thu, 09 Jun 2016 14:36:24 GMT</pubDate>
      <dc:creator><![CDATA[Ty McPherson [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/?p=125</guid>
      <description><![CDATA[Hello Everyone,

Just wanted spread the word for those that have been banging their heads on the...]]></description>
      <content:encoded><![CDATA[Hello Everyone,

Just wanted spread the word for those that have been banging their heads on the keyboard with trying to use Smartcard authentication with Outlook 2016.  Microsoft recently released an update for Outlook 2016 then enables this functionality that we enjoyed with previous versions.  There is a two stage process here to resolve this problem.

Step One: Obtain the patch from the Download Center.

<a href="https://www.microsoft.com/en-us/download/details.aspx?id=52724" target="_blank">Outlook 2016 x86</a> | <a href="https://www.microsoft.com/en-us/download/details.aspx?id=52750" target="_blank">Outlook 2016 x64</a>

As a reminder if you're not sure which version of Outlook you have, click File &gt; Office Account &gt; About Outlook.  Listed after the build number is either 32-Bit or 64-Bit

Step Two:  Add a couple registry values in HKCU

1) Open the registry editor (typical disclaimer for manipulating the registry applies here; Use Caution!)
2) Navigate to HKEY_CURRENT_USER\Software\Microsoft\Exchange
3) Add a new DWORD with a name of <strong>AlwaysUseLegacyAuthForAutodiscover</strong> with a value of 1
4) Navigate to HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\RPC
5) Add a new DWORD with a name of <strong>EnableSmartCard</strong> with a value of 1

<em>Note: In previous versions of Outlook MSOAuthDisabled was used as well, however this key no longer functions with Outlook 2016</em>

&lt;contents for your very own .reg&gt;

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Exchange]
"AlwaysUseLegacyAuthForAutodiscover"=dword:00000001

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\RPC]
"EnableSmartCard"=dword:00000001

&lt;/contents for your very own .reg&gt;

I would recommend, if applicable to use Group Policy Preferences to push these settings out to the masses.

More Details:

<a href="https://support.microsoft.com/en-us/kb/3115147" target="_blank">June 7, 2016, update for Outlook 2016 (KB3115147)</a>

<a href="https://support.microsoft.com/en-us/kb/3115190" target="_blank">Smartcard authentication isn't supported in the new authentication in Outlook 2016 (KB3115190)</a>

Good Luck and enjoy your Smartcard enabled Outlook 2016 :)

&nbsp;

ZZZZ]]></content:encoded>
    </item>
    <item>
      <title>MSFT OCSP Responder + New DoD Configs!</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/msft-ocsp-responder-new-dod-configs</link>
      <pubDate>Wed, 24 Feb 2016 10:35:55 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/2016/02/24/msft-ocsp-responder-new-dod-configs/</guid>
      <description><![CDATA[Hello All, wanted to jump in with a quick post on updating the Microsoft OCSP revocation providers...]]></description>
      <content:encoded><![CDATA[<p>Hello All, wanted to jump in with a quick post on updating the Microsoft OCSP revocation providers for some new DoD&nbsp;certificate authorities&nbsp;that have been commissioned.&nbsp; This is based on my post a while back on setting up our OCSP responder with DoD configurations <a href="https://blogs.technet.microsoft.com/askpfeplat/2014/01/07/microsoft-pki-ocsp-responder-now-jitc-certified-and-lab-setup-guide/" target="_blank">here</a>.&nbsp; There are roughly about 20 or so new revocation configurations that we can add so that the Windows Server OCSP responder can provide revocation status checking for these CAs.&nbsp; I&#39;ve updated the&nbsp;function calls&nbsp;in the TechNet gallery to accommodate for the new CAs:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/NewDoDConfigs.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/NewDoDConfigs.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/NewDoDConfigs.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/NewDoDConfigs.PNG" border="0" /></a></p>
<p>I&#39;ve also commented out the expired CAs, and added line 25 where you can set the crl fetch intervals to your specifications; as an example I set it to 24 hours here:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/DoDRevocationRefresh.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/DoDRevocationRefresh.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/DoDRevocationRefresh.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/DoDRevocationRefresh.PNG" border="0" /></a></p>
<p>The function is available at the TechNet script center!</p>
<p><a href="https://gallery.technet.microsoft.com/scriptcenter/Server-2008-R2-and-Server-30a916cb" target="_blank">https://gallery.technet.microsoft.com/scriptcenter/Server-2008-R2-and-Server-30a916cb</a></p>
<p>Cheers!</p>
<p>Jesse Esquivel</p>
<p></p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>MIM-CM 2016 + Virtual Smart Card Modern App Part I</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/mim-cm-2016-virtual-smart-card-modern-app-part-i</link>
      <pubDate>Sun, 10 Jan 2016 06:51:38 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/2016/01/10/mim-cm-2016-virtual-smart-card-modern-app-part-i/</guid>
      <description><![CDATA[Hello All and Happy New Year!&nbsp; I hope everyone is recharged from a most excellent holiday...]]></description>
      <content:encoded><![CDATA[<p>Hello All and Happy New Year!&nbsp; I hope everyone is recharged from a most excellent holiday season!&nbsp; I&#39;m back with another security focused topic, virtual smart cards and also taking a look at MIM CM 2016 to life cycle the credential.&nbsp; The threat landscape today&nbsp;is more fluid and dynamic then ever before and organizations are looking at new security technologies to better protect themselves and their assets.&nbsp; Two factor authentication has been around for some time in the form of smart cards, rsa tokens, etc.&nbsp; It&#39;s widely considered to be a stronger and more secure&nbsp;form of authentication&nbsp;than traditional user name and&nbsp;password credentials.&nbsp; In this day and age we have the advent of a virtual smart card (vsc), a smart card that is always inserted, has no visible/tangible physical footprint, and uses a machines trusted platform module (TPM) for a secure root of trust and isolated cryptography.&nbsp; More and more of todays&#39;&nbsp;newest security technologies (credential guard, code integrity, device guard, etc.) are using the TPM due to its&nbsp;hardware assurance level benefits.&nbsp;Today I want to share with you my experience on getting Microsoft Identity Manger 2016 installed in a lab for testing and dev purposes.&nbsp; One of the new features of MIM CM 2016 is the addition of a nice Modern style app that lets you enroll, renew, and manage virtual smart cards.&nbsp; As it turns out MIM CM is a little lengthy in getting it off the ground, at least that&#39;s been my experience; but once up and running there are some nifty features for virtual smart cards!&nbsp; Good experience with PKI and Windows Certificate Authorities is very helpful when setting up FIM CM.&nbsp; This setup&nbsp;assumes you have all of the servers required for MIM CM; a Domain Controller, MIM-CM server, SQL server, Windows 10586 enterprise client on physical hardware with a TPM 1.2 or later, and a CA server all running 2012 R2 Update, fully patched.&nbsp; Lets get to it!</p>
<p><span style="text-decoration:underline;"><strong>Schema Extension</strong></span><span style="text-decoration:underline;"><strong><br /></strong></span>MIM CM requires some additional attributes and extended rights to be added to the Schema.&nbsp; Hopefully you know the drill on the Schema and all of the pre-requisites for modifying it, its a one-way ticket so make sure you have at least one good system state backup from at least one DC in every domain.&nbsp; Drop your admin account in Schema Admins and logoff/login to a DC to reflect the new membership.&nbsp; Review the Schema folder on the MIM 2016 media, if you&#39;re doing a single forest, single domain installation like I am&nbsp;you&#39;ll want to use the &quot;ResourceForest.ldif&quot; file and use ldifde to extend it:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/Extend%20Schema-MIM%20CM.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/Extend-Schema_2D00_MIM-CM.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/Extend%20Schema-MIM%20CM.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/Extend-Schema_2D00_MIM-CM.PNG" border="0" /></a></p>
<p>This is fairly straightforward and hopefully you get a success message.&nbsp; Don&#39;t forget to take yourself out of Schema Admins when you&#39;re done ; )</p>
<p><span style="text-decoration:underline;"><strong>MIM-CM Pre-requisites<br /></strong></span>Lets just say there are a number of these.&nbsp; You&#39;ll want to use the following <a href="https://technet.microsoft.com/en-us/library/ee534914(v=ws.10).aspx" target="_blank">TechNet article </a>for FIM CM which largely still applies.&nbsp; We&#39;ve already gone through the schema extension, but there are also SQL and certificate template pre-reqs that need to be completed that are documented there.&nbsp;</p>
<ul>
<li><a href="https://technet.microsoft.com/en-us/library/gg418621(v=ws.10).aspx" target="_blank">SQL Pre-reqs&#39;</a></li>
<li><a href="https://technet.microsoft.com/en-us/library/gg430118(v=ws.10).aspx" target="_blank">Certificate Template Pre-reqs&#39;</a></li>
<li><a href="https://technet.microsoft.com/en-us/library/gg418619(v=ws.10).aspx" target="_blank">IIS Pre-reqs&#39;</a></li>
</ul>
<p>For this scenario I didn&#39;t perform the optional steps in the article.&nbsp; One of the last things are the IIS pre-requisites for the MIM-CM web server, I used server manager to add all of the role services I wanted to install, then exported to an xml file via the UI so that I could add them via PowerShell and use on an additional CM webserver later:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIMCM-IIS-Pre-reqs.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIMCM_2D00_IIS_2D00_Pre_2D00_reqs.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIMCM-IIS-Pre-reqs.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIMCM_2D00_IIS_2D00_Pre_2D00_reqs.PNG" border="0" /></a></p>
<p><span style="text-decoration:underline;"><strong>MIM-CM Install</strong></span><br />Now that all of the pre-requisites are complete we&#39;re ready to install MIM-CM on the designated MIM-CM server.&nbsp; Launch the MIM-CM installer and execute the installer:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-1.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_1.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-1.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_1.PNG" border="0" /></a></p>
<p><strong>Next!</strong></p>
<p><strong><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-2.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_2.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-2.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_2.PNG" border="0" /></a><br /></strong></p>
<p>Select the Portal and Update Service.<strong><br /></strong></p>
<p><strong><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-3.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_3.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-3.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_3.PNG" border="0" /></a></strong></p>
<p>This is the IIS virtual directory - I used the default configuration.&nbsp; Go <strong>Next</strong> and click <strong>Install</strong>.&nbsp; That should wrap up the installation on the CM web server.&nbsp; Now that the MIM CM website is in IIS, we need to disable Kernel mode authentication which is documented <a href="https://technet.microsoft.com/en-us/library/gg418626(v=ws.10).aspx" target="_blank">here</a>.&nbsp; Let&#39;s move over to the Certificate Authority server and install the MIM-CM bits there, same drill here let&#39;s execute the installer and this time we&#39;ll choose the <strong>MIM CM&nbsp;CA files</strong> which will install the MIM CM policy module and exit module:<strong><br /></strong></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-5-on%20CA%20Server.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_5_2D00_on-CA-Server.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-5-on%20CA%20Server.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_5_2D00_on-CA-Server.PNG" border="0" /></a></p>
<p>Next we need to allow the CA to access the MIM CM database, which is detailed <a href="https://technet.microsoft.com/en-us/library/gg418614(v=ws.10).aspx" target="_blank">here</a>.&nbsp; Ensure you complete these steps or the CA will not be present in the MIM CM SQL database.&nbsp; Now that we&#39;ve laid down the bits we need to run the MIM CM configuration Wizard on the server where you installed the MIM CM portal.&nbsp; So head over there and on the start menu you should see the MIM CM configuration wizard, let&#39;s execute it and step through it.&nbsp; Ensure the credential you&#39;re using has SA rights on the SQL server you&#39;re going to use (or optionally specify another account), and has the appropriate rights in AD to create all of the user objects.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-7-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_7_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-7-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_7_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p><strong>Next</strong>.&nbsp; Select the Certification Authority that MIM CM will use for certificate issuance clicking browse.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-8-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_8_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-8-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_8_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>Specify the sql server name and which credential you are going to use to create the database.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-9-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_9_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-9-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_9_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>Specify the database name, I accepted the default name and used SQL integrated authentication.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-10-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_10_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-10-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_10_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>For the AD piece it&#39;s recommended to keep the default setting, and so it was done.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-11-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_11_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-11-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_11_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>This screen is interesting and is actually new with MIM CM 2016, we can now use the power of ADFS for authorization and authentication into the MIM CM portal.&nbsp; For this scenario we will use IWA/Kerberos.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-12-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_12_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-12-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_12_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>If you chose to follow the aforementioned article and create all of the accounts yourself in AD, here is where you punch them into the configuration wizard.&nbsp; For this scenario I used the MIM default settings and specified the OU that the accounts will be created in.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-13-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_13_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-13-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_13_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>MIM CM needs a couple of certificates to function, they are issued from the certificate templates that you created and made available on the CA based on the TechNet article previously mentioned.&nbsp; Choose the respective certificate templates for each entry, if you do not see them double check the permissions on the templates based on the <a href="https://technet.microsoft.com/en-us/library/gg430118(v=ws.10).aspx" target="_blank">TechNet article</a>.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-14-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_14_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-14-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_14_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>Email configuration.&nbsp; I didn&#39;t have any exchange servers setup nor was I looking to specifically test any mail related functionality&nbsp;so I used the defaults here.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-15-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_15_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-15-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_15_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>Now that we arrived at the summary, we can review our selections/configurations.&nbsp; If you&#39;re ready to let her rip, click configure.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-16-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_16_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-16-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_16_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>Hopefully we arrive here!</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-19-ConfigWizard.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_19_2D00_ConfigWizard.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/FIM-CM-Install-19-ConfigWizard.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/FIM_2D00_CM_2D00_Install_2D00_19_2D00_ConfigWizard.PNG" border="0" /></a></p>
<p>The idea is to get MIM CM installed and configured so that we can issue virtual smart cards to end users via the MIM CM portal, and the new MIM CM modern application.&nbsp; MIM CM offers additional capabilities in reporting, enrollment, retirement, and other smart card functions.&nbsp; We still have quite a bit of configuring to do to get this all off of the ground.&nbsp; We have some CA, AD, IIS, and MIM CM portal configurations to&nbsp;complete.&nbsp; So we&#39;ll see you at the next post.</p>
<p>Jesse Esquivel</p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows 10 Cheat Sheet Compilation!</title>
      <link>https://docs.microsoft.com/archive/blogs/nextnextfinish/windows-10-cheat-sheet-compilation</link>
      <pubDate>Tue, 04 Aug 2015 05:36:58 GMT</pubDate>
      <dc:creator><![CDATA[Jesse Esquivel [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/nextnextfinish/2015/08/04/windows-10-cheat-sheet-compilation/</guid>
      <description><![CDATA[Hello all, I hope your summer is going well!&nbsp; As you know Windows 10 is here and has hit...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Hello all, I hope your summer is going well!&nbsp; As you know Windows 10 is here and has hit general availability!!&nbsp; With that in mind I wanted to put out a few quick things that may be helpful to get the gears turning for testing and evaluation of Windows 10.</span><span style="font-family:arial,helvetica,sans-serif;font-size:medium;"><span style="color:#0000ff;"><br /><span style="font-family:Times New Roman;font-size:medium;">&nbsp;</span></span></span></p>
<ul>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Windows 10 Build 10240 is the RTM build!</span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">EMET 5.2 is not supported with Windows 10, it will cause Internet Explorer to not start.&nbsp; The next version of EMET will be&nbsp;compatible with Windows 10</span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Windows 10 is a FREE upgrade on consumer PCs, reserve and get your copy today; if you don&rsquo;t see the icon in your taskbar tray install <span style="color:#0000ff;"><a href="https://support.microsoft.com/en-us/kb/3035583" target="_blank">KB3035583</a></span>, or use the <a href="https://www.microsoft.com/en-us/software-download/windows10" target="_blank"><span style="color:#0000ff;">media creation tool</span> </a>to upgrade to Windows 10 now.</span></p>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">After you download the Media Creation Tool and launch it, there will be an option to upgrade your PC now:<br /></span></p>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/Media%20Creation%20Tool.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/Media-Creation-Tool.PNG"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/26/Media%20Creation%20Tool.PNG" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-26/Media-Creation-Tool.PNG" border="0" /></a><br /></span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Windows 10 ADK&nbsp;is available <a href="https://t.co/T3Bh2NAkpY" target="_blank"><span style="color:#0000ff;">here</span></a></span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Windows 10 Activation via KMS requires Hotfix <a href="https://support.microsoft.com/en-us/kb/3058168" target="_blank"><span style="color:#0000ff;">KB3058168</span></a> be installed on the KMS host server, and the KMS host key for Windows 10 be installed.</span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">There will be an <a href="/b/msdeployment/archive/2015/07/30/windows-10-adk-release-and-mdt-2013-update-1-plans.aspx" target="_blank"><span style="color:#0000ff;">updated Microsoft Deployment Toolkit (MDT)</span></a> available in August.</span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Microsoft Bit locker Administration and Monitoring (MBAM) 2.5 client is supported on Windows 10.&nbsp; <span style="color:#0000ff;"><a href="https://channel9.msdn.com/Events/Ignite/2015/BRK2331" target="_blank">MBAM 2.5 SP1</a></span> will add additional features for 10, including customizing the recovery screen, a new PowerShell v2 compatible script for enabling bit locker during a task sequence in MDT or SCCM, or stand alone; and a few new WMI methods as well as some other features.</span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Current version of UE-V is not supported on Windows 10, will be supported in the next version of UE-V</span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">Windows 10 and the KMS host keys will be available for Enterprise customers on the VLSC on 01AUG.</span></p>
</li>
<li>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;"><span style="color:#0000ff;"><a href="https://technet.microsoft.com/en-us/library/mt297533(v=vs.85).aspx" target="_blank">Create a Windows 10 Reference Image</a></span></span></p>
</li>
</ul>
<p><span style="font-family:arial,helvetica,sans-serif;font-size:medium;">&nbsp;</span></p>
<p><span style="font-size:medium;">Well I hope you find this information useful for getting started!&nbsp; We are all very excited about Windows 10!&nbsp; As we run into any issues, gotchas, or helpful tips we&#39;ll post them here.&nbsp; Do you plan on testing, evaluating, and deploying Windows 10 in your organization?</span></p>
<p><span style="font-size:medium;"><br /></span><span style="font-size:medium;">Jesse Esquivel<br /></span></p>
<p></p>]]></content:encoded>
    </item>
  </channel>
</rss>