{"id":1964,"date":"2017-03-23T21:14:38","date_gmt":"2017-03-23T21:14:38","guid":{"rendered":"http:\/\/obieta.com\/?p=1964"},"modified":"2017-03-23T21:14:38","modified_gmt":"2017-03-23T21:14:38","slug":"simplified-how-to-create-an-iis-website-that-requires-client-certificate-using-self-signed-certificates","status":"publish","type":"post","link":"http:\/\/obieta.com\/?p=1964","title":{"rendered":"Simplified: How to create an IIS website that requires client certificate using self-signed certificates"},"content":{"rendered":"<div id=\"blog-title\" style=\"margin-bottom: 24px; color: #333333; font-family: 'Open Sans', sans-serif; font-size: 16px; background-color: #ffffff;\"><\/div>\n<div id=\"blog-content\" class=\"markdown-body\" style=\"text-size-adjust: 100%; color: #333333; overflow: hidden; font-size: 16px; line-height: 1.6; word-wrap: break-word; min-width: 200px; font-family: 'Open Sans', sans-serif; background-color: #ffffff;\">\n<p style=\"margin: 0px !important 0px 16px 0px;\">Some IE\/IIS issues may involve client certificate. It always took me hours to deploy a test website that requires client certificate. Therefore, I am going to write this blog to record every steps including: creating self-signed root CA, server certificate, client certificate and configuring IIS.<\/p>\n<h2 id=\"prerequisites\" style=\"margin: 1em 0px 16px; line-height: 1.225; font-size: 1.75em; position: relative; padding-bottom: 0.3em; border-bottom: 1px solid #eeeeee;\">Prerequisites<\/h2>\n<table style=\"margin-top: 0px; margin-bottom: 16px; display: block; width: 1120px; overflow: auto; word-break: keep-all;\">\n<tbody>\n<tr style=\"background-color: #ffffff; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">Domain<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\"><\/td>\n<\/tr>\n<tr style=\"background-color: #f8f8f8; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">IIS server<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\"><code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">iis-lab-server<\/code>\u00a0@ Windows Server 2012 R2 Standard<\/td>\n<\/tr>\n<tr style=\"background-color: #ffffff; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">Client machine<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\"><code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">iis-lab-client<\/code>\u00a0@ Windows 7 Enterprise<\/td>\n<\/tr>\n<tr style=\"background-color: #f8f8f8; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">Applications<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\"><code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">makecert.exe<\/code>\u00a0and\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">pvk2pfx.exe<\/code>. You can find the two EXEs from a system with Visual Studio installed. On a Windows 10 x64 PC with VS2015 installed, you can get them from:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">C:\\Program Files (x86)\\Windows Kits\\10\\bin\\x64<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"step-1-creating-self-signed-root-ca\" style=\"margin: 1em 0px 16px; line-height: 1.225; font-size: 1.75em; position: relative; padding-bottom: 0.3em; border-bottom: 1px solid #eeeeee;\">Step 1: Creating self-signed root CA<\/h2>\n<ol style=\"padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px;\">\n<li>Create directory:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert<\/code>\u00a0on the IIS server.<\/li>\n<li>Copy\u00a0<strong>makecert.exe<\/strong>\u00a0and\u00a0<strong>pvk2pfx.exe<\/strong>\u00a0to\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert<\/code>.<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Save following content as\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert\\CreateCARoot.cmd<\/code>.<\/p>\n<pre style=\"overflow: auto; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1rem; margin-top: 0px; margin-bottom: 16px; font-stretch: normal; line-height: 2rem; padding: 0.66001rem 9.5px 9.5px; background-image: linear-gradient(#ffffff 0px, #ffffff 0.75rem, #f5f7fa 0.75rem, #f5f7fa 2.75rem, #ffffff 2.75rem, #ffffff 4rem); background-position: 0% 0%; background-size: 100% 4rem; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-radius: 4px; word-wrap: normal; border: 1px solid #d3daea;\"><code class=\"lang-a\" style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 16px; padding: 0px; margin: 0px; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; max-width: initial; overflow: initial; line-height: inherit; word-wrap: normal;\">makecert.exe ^\n-n \"CN=IIS Lab CARoot\" ^\n-r ^\n-pe ^\n-a sha512 ^\n-len 4096 ^\n-cy authority ^\n-sv CARoot.pvk ^\nCARoot.cer\n\npvk2pfx.exe ^\n-pvk CARoot.pvk ^\n-spc CARoot.cer ^\n-pfx CARoot.pfx ^\n-po Password1\n<\/code><\/pre>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Run CMD and execute\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert\\CreateCARoot.cmd<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Enter password:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Password1<\/code>\u00a0in following three password prompt dialogs.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">It will create three files:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">CARoot.cer<\/code>,\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">CARoot.pfx<\/code>\u00a0and\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">CARoot.pvk<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Run\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">mmc<\/code>\u00a0on the IIS server to launch Console.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Press\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Ctrl+M<\/code>\u00a0or click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">File \u2192 Add\/Remove Snap-in<\/code>, select\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Certificates<\/code>, click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Add &gt;<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Choose\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Computer account<\/code>\u00a0and then click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Next<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Keep default settings, click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Finish<\/code>, then click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">OK<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Right click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Trusted Root Certification Authorities \u2192 Certificate<\/code>, choose\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">All Tasks \u2192 Import<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Next<\/code>, choose the self-signed root CA:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">CARoot.cer<\/code>\u00a0and then click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Next<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Keep default settings, click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Next<\/code>\u00a0and then click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Finish<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">The self-signed CA root will appear in the list.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Copy the\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">CARoot.cer<\/code>\u00a0to the client machine and import it using the same steps.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"step-2-creating-self-signed-server-certificate\" style=\"margin: 1em 0px 16px; line-height: 1.225; font-size: 1.75em; position: relative; padding-bottom: 0.3em; border-bottom: 1px solid #eeeeee;\">Step 2: Creating self-signed server certificate<\/h2>\n<ol style=\"padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px;\">\n<li>\n<p style=\"margin: 16px 0px;\">Save following content as\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert\\CreateServerCertificate.cmd<\/code>\u00a0on the IIS server.<\/p>\n<pre style=\"overflow: auto; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1rem; margin-top: 0px; margin-bottom: 16px; font-stretch: normal; line-height: 2rem; padding: 0.66001rem 9.5px 9.5px; background-image: linear-gradient(#ffffff 0px, #ffffff 0.75rem, #f5f7fa 0.75rem, #f5f7fa 2.75rem, #ffffff 2.75rem, #ffffff 4rem); background-position: 0% 0%; background-size: 100% 4rem; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-radius: 4px; word-wrap: normal; border: 1px solid #d3daea;\"><code class=\"lang-a\" style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 16px; padding: 0px; margin: 0px; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; max-width: initial; overflow: initial; line-height: inherit; word-wrap: normal;\">makecert.exe ^\n-n \"CN=iis-lab-server.iislab.com\" ^\n-iv CARoot.pvk ^\n-ic CARoot.cer ^\n-pe ^\n-a sha512 ^\n-len 4096 ^\n-b 01\/01\/2014 ^\n-e 01\/01\/2040 ^\n-sky exchange ^\n-eku 1.3.6.1.5.5.7.3.1 ^\n-sv ServerCert.pvk ^\nServerCert.cer\n\npvk2pfx.exe ^\n-pvk ServerCert.pvk ^\n-spc ServerCert.cer ^\n-pfx ServerCert.pfx ^\n-po Password1\n<\/code><\/pre>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Run CMD and execute\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert\\CreateServerCertificate.cmd<\/code>.<\/p>\n<\/li>\n<li>Enter password:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Password1<\/code>\u00a0in all password prompt dialogs.<\/li>\n<li>It will create three files:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ServerCert.cer<\/code>,\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ServerCert.pfx<\/code>\u00a0and\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ServerCert.pvk<\/code>.<\/li>\n<li>Go to the Certificate Console on the IIS server, right click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Personal \u2192 Certificate<\/code>, choose\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">All Tasks \u2192 Import<\/code>.<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Change the file extension to\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">*.pfx*<\/code>\u00a0when selecting certificate and choose\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ServerCert.pfx<\/code>\u00a0we just created.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">The self-signed server certificate will appear in the list.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"step-3-creating-self-signed-client-certificate\" style=\"margin: 1em 0px 16px; line-height: 1.225; font-size: 1.75em; position: relative; padding-bottom: 0.3em; border-bottom: 1px solid #eeeeee;\">Step 3: Creating self-signed client certificate<\/h2>\n<ol style=\"padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px;\">\n<li>\n<p style=\"margin: 16px 0px;\">Save following content as\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert\\CreateClientCertificate.cmd<\/code>\u00a0on the IIS server.<\/p>\n<pre style=\"overflow: auto; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1rem; margin-top: 0px; margin-bottom: 16px; font-stretch: normal; line-height: 2rem; padding: 0.66001rem 9.5px 9.5px; background-image: linear-gradient(#ffffff 0px, #ffffff 0.75rem, #f5f7fa 0.75rem, #f5f7fa 2.75rem, #ffffff 2.75rem, #ffffff 4rem); background-position: 0% 0%; background-size: 100% 4rem; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-radius: 4px; word-wrap: normal; border: 1px solid #d3daea;\"><code class=\"lang-a\" style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 16px; padding: 0px; margin: 0px; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; max-width: initial; overflow: initial; line-height: inherit; word-wrap: normal;\">makecert.exe ^\n-n \"CN=AnyClientInIISLab\" ^\n-iv CARoot.pvk ^\n-ic CARoot.cer ^\n-pe ^\n-a sha512 ^\n-len 4096 ^\n-b 01\/01\/2014 ^\n-e 01\/01\/2040 ^\n-sky exchange ^\n-eku 1.3.6.1.5.5.7.3.2 ^\n-sv ClientCert.pvk ^\nClientCert.cer\n\npvk2pfx.exe ^\n-pvk ClientCert.pvk ^\n-spc ClientCert.cer ^\n-pfx ClientCert.pfx ^\n-po Password1\n<\/code><\/pre>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Run CMD and execute\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">c:\\cert\\CreateClientCertificate.cmd<\/code>.<\/p>\n<\/li>\n<li>Enter password:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Password1<\/code>\u00a0in all password prompt dialogs.<\/li>\n<li>It will create three files:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ClientCert.cer<\/code>,\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ClientCert.pfx<\/code>\u00a0and\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ClientCert.pvk<\/code>.<\/li>\n<li>Copy\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ClientCert.pfx<\/code>\u00a0to the client machine.<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">On client machine, go to Management Console, add a new certificate snap-in, choose\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">My user account<\/code>\u00a0this time (not\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Computer account<\/code>).<\/p>\n<p style=\"margin: 16px 0px;\">\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Import\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">ClientCert.pfx<\/code>\u00a0into\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Current user \u2192 Personal \u2192 Certificate<\/code>\u00a0on the client machine, the password is\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Password1<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">The self-signed client certificate will appear in the list.<\/p>\n<p style=\"margin: 16px 0px;\">\n<\/li>\n<\/ol>\n<h2 id=\"step-4-creating-iis-website-that-requires-client-certificate\" style=\"margin: 1em 0px 16px; line-height: 1.225; font-size: 1.75em; position: relative; padding-bottom: 0.3em; border-bottom: 1px solid #eeeeee;\">Step 4: Creating IIS website that requires client certificate<\/h2>\n<ol style=\"padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px;\">\n<li>\n<p style=\"margin: 16px 0px;\">Install IIS onto the IIS server, make sure that security components:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">IIS Client Certificate Mapping Authentication<\/code>\u00a0and\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Client Certificate Mapping Authentication<\/code>\u00a0are installed together.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Open IIS manager (inetmgr.exe), there is a\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Default Web Site<\/code>, next we will configure it to require client certificate.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Right click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Default Web Site<\/code>\u00a0and click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Edit Bindings...<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">We are going to add HTTPS 443 port for\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Default Web Site<\/code>. Click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Add<\/code>, select\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">https<\/code>\u00a0for\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Type<\/code>, choose the self-signed server certificate we created in step 2 for\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">SSL Certificate<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\"><code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Default Web Site<\/code>\u00a0is now a HTTPS site, we can verify it by browsing to\u00a0<a style=\"color: #4183c4; text-decoration: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;\" href=\"https:\/\/iis-lab-server.iislab.com\/\">https:\/\/iis-lab-server.iislab.com<\/a>\u00a0from the client machine.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">However the website currently does not require any client certificate, next let&#8217;s configure it to use client certificate.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Go to\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Default Web Site<\/code>\u00a0\u2192\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">SSL Settings<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Enable\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Require SSL<\/code>, choose\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Require<\/code>\u00a0for\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Client certificate<\/code>\u00a0and then click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Apply<\/code>\u00a0to save the settings.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Now we can use the client certificate to authenticate the website, next we are going to configure many-to-one certificate mapping.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Go to\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Default Web Site<\/code>\u00a0\u2192\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Configuration Editor<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Select section:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">system.webServer\/security\/authentication\/iisClientCertificateMappingAuthentication<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Choose\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">True<\/code>\u00a0for\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">enabled<\/code>, click the\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">...<\/code>\u00a0button in\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">manyToOneMappings<\/code>\u00a0field to add a many-to-one mapping rule.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Add<\/code>.<\/p>\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Configure as below.<\/p>\n<table style=\"margin-top: 0px; margin-bottom: 16px; display: block; width: 1088px; overflow: auto; word-break: keep-all;\">\n<tbody>\n<tr style=\"background-color: #ffffff; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">description<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">Whatever description text<\/td>\n<\/tr>\n<tr style=\"background-color: #f8f8f8; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">enable<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">True<\/td>\n<\/tr>\n<tr style=\"background-color: #ffffff; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">name<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">Whatever name<\/td>\n<\/tr>\n<tr style=\"background-color: #f8f8f8; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">password<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">The login password of the windows account you want the certificate to be mapped to<\/td>\n<\/tr>\n<tr style=\"background-color: #ffffff; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">permissionMode<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">Allow<\/td>\n<\/tr>\n<tr style=\"background-color: #f8f8f8; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">rules<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">You can add rules as you want, like let the server to check whether the certificate is signed by the correct CA root.<\/td>\n<\/tr>\n<tr style=\"background-color: #ffffff; border-top: 1px solid #cccccc;\">\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">userName<\/td>\n<td style=\"padding: 6px 13px; border: 1px solid #dddddd;\">The windows account you want the certificate to be mapped to<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 16px 0px;\">\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Close the window after you complete configuration. You will see the count of\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">manyToOneMappings<\/code>\u00a0increases to 1. Click\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Apply<\/code>\u00a0to save the changes.<\/p>\n<p style=\"margin: 16px 0px;\">\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">Let&#8217;s verify from the client machine, open IE and browse to\u00a0<a style=\"color: #4183c4; text-decoration: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;\" href=\"https:\/\/iis-lab-server.iislab.com\/\">https:\/\/iis-lab-server.iislab.com<\/a>, you will see the client certificate selection prompt. The website can be accessed by choosing the self-signed client certificate we created. If you cancel the prompt (means not using any client certificate) or choose a wrong client certificate, you will encounter 403 Access Denied error.<\/p>\n<p style=\"margin: 16px 0px;\">\n<\/li>\n<li>\n<p style=\"margin: 16px 0px;\">If you don&#8217;t see the client certificate selection prompt, it might because you have only one client certificate exists and IE security setting:\u00a0<code style=\"font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px;\">Don't prompt for client certificate selection when only one certificate exists<\/code>\u00a0is enabled. You should be able to see the prompt after disabling the setting of the security zone that the site is mapped to.<\/p>\n<p style=\"margin: 16px 0px;\">Reblogged and Credits goes to:<\/p>\n<p>http:\/\/joji.me\/en-us\/blog\/how-to-create-an-iis-website-that-requires-client-certificate-using-self-signed-certificates<\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Some IE\/IIS issues may involve client certificate. It always took me hours to deploy a test website that requires client certificate. Therefore, I am going to write this blog to record every steps including: creating self-signed root CA, server certificate, client certificate and configuring IIS. Prerequisites Domain IIS server iis-lab-server\u00a0@ Windows Server 2012 R2 Standard [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/obieta.com\/index.php?rest_route=\/wp\/v2\/posts\/1964"}],"collection":[{"href":"http:\/\/obieta.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/obieta.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/obieta.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/obieta.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1964"}],"version-history":[{"count":0,"href":"http:\/\/obieta.com\/index.php?rest_route=\/wp\/v2\/posts\/1964\/revisions"}],"wp:attachment":[{"href":"http:\/\/obieta.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/obieta.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1964"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/obieta.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}