Introduction to IIS 10 SSL Installation
Microsoft Internet Information Services (IIS) 10 is the modern web server platform included with Windows Server 2016, 2019, 2022, and Windows 10/11. IIS 10 offers significant improvements in SSL/TLS management compared to earlier versions, including centralized certificate stores, Server Name Indication (SNI) support, and simplified binding management.
This comprehensive guide walks you through installing SSL certificates on IIS 10 and later versions—from generating a Certificate Signing Request (CSR) using IIS Manager or our CSR Generator, to configuring HTTPS bindings and verifying your installation with our SSL Checker.
What you'll learn:
- Generating CSR using IIS Manager or PowerShell
- Installing SSL certificates via IIS Manager
- Creating and importing PFX files
- Configuring HTTPS bindings with SNI
- Setting up HTTP to HTTPS redirects using URL Rewrite
- Managing multiple SSL sites on a single IP address
- Troubleshooting common IIS SSL errors
For legacy IIS versions (5.x and 6.x), see our guide on Installing SSL on IIS 5 & 6.
For a foundational understanding of SSL, see our guide on What is SSL and How SSL Works.
Prerequisites Checklist
Before starting the SSL installation, ensure you have:
- ✅ Windows Server 2016/2019/2022 or Windows 10/11 with IIS installed
- ✅ IIS Manager access - Administrative privileges on the server
- ✅ Web Server (IIS) role installed - Including Management Tools
- ✅ Domain pointed to server - DNS A record pointing to your server's IP address
- ✅ SSL certificate files - Your certificate (.cer/.crt), private key (.key), and CA bundle
- ✅ URL Rewrite module - For HTTP to HTTPS redirects (optional but recommended)
Verify IIS installation:
# Check IIS version
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\InetStp' | Select-Object VersionString
# Output: IIS 10.0
# Verify IIS is running
Get-Service W3SVCOpen IIS Manager:
- Press Windows + R, type
inetmgr, press Enter - Or: Server Manager → Tools → Internet Information Services (IIS) Manager
Understanding IIS 10 Certificate Management
IIS 10 offers multiple ways to manage SSL certificates:
Certificate Storage Locations
| Location | Description | Use Case |
|---|---|---|
| Server Certificates | IIS Manager's built-in store | Standard installations |
| Local Computer Store | Windows Certificate Store (MMC) | Advanced management |
| Centralized Certificate Store | Shared network location | Multi-server farms |
Key Features in IIS 10+
- Server Name Indication (SNI): Host multiple SSL sites on a single IP address
- Centralized Certificate Store (CCS): Share certificates across multiple IIS servers
- HTTP/2 Support: Modern protocol with SSL/TLS requirement
- TLS 1.3 Support: Latest security protocol (Windows Server 2022)
- PowerShell Management: Full automation capabilities
Step 1: Generate a Certificate Signing Request (CSR)
You have three options for CSR generation: IIS Manager, PowerShell, or our online tool.
Option A: Using My-SSL CSR Generator (Recommended)
The easiest method is using our free CSR Generator Tool:
- Navigate to My-SSL CSR Generator
- Enter your domain name (e.g.,
yourdomain.com) - Fill in organization details (name, city, state, country)
- Add Subject Alternative Names (SANs) for additional domains if needed
- Click Generate CSR
- Save both the CSR and Private Key files securely
Important: Store your private key securely. You'll need it to create a PFX file for import into IIS.
Option B: Using IIS Manager
Generate a CSR directly within IIS Manager:
- Open IIS Manager: Press Windows + R, type
inetmgr, press Enter
- Select Server: In the left panel, click on your server name
- Open Server Certificates: Double-click Server Certificates in the center panel
- Create Certificate Request: In the Actions panel (right side), click Create Certificate Request...
- Enter Distinguished Name Properties:
- Common Name: Your fully qualified domain name (e.g.,
www.yourdomain.com) - Organization: Legal company name
- Organizational Unit: Department (e.g., IT)
- City/Locality: Your city
- State/Province: Full state name
- Country/Region: Two-letter country code (e.g., US)
- Cryptographic Service Provider Properties:
- Provider: Microsoft RSA SChannel Cryptographic Provider
- Bit Length: 2048 (minimum) or 4096 (recommended)
- Save CSR File: Specify a filename (e.g.,
C:\certs\yourdomain.csr)
- Click Finish: The CSR file is created
Verify your CSR using our CSR Decoder to ensure all details are correct before submitting to a Certificate Authority.
Option C: Using PowerShell
Generate a CSR using PowerShell for automation:
# Create certificate request INF file
$inf = @"
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "CN=yourdomain.com, O=Your Company, L=City, S=State, C=US"
KeySpec = 1
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
SMIME = FALSE
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0
HashAlgorithm = SHA256
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1 ; Server Authentication
"@
# Save INF file
$inf | Out-File -FilePath "C:\certs\request.inf" -Encoding ASCII
# Generate CSR
certreq -new "C:\certs\request.inf" "C:\certs\yourdomain.csr"Step 2: Order Your SSL Certificate
With your CSR ready, order an SSL certificate:
- Choose the appropriate certificate type:
- DV SSL - Domain validation, fastest issuance
- OV SSL - Organization validation, business trust
- EV SSL - Extended validation, highest trust
- Submit your CSR during the order process
- Complete domain validation (email, DNS, or HTTP file)
- Download your certificate files once issued
You'll typically receive:
- Primary certificate (yourdomain.crt or yourdomain.cer)
- Intermediate/CA Bundle (ca-bundle.crt)
- Root certificate (optional)
Learn more about SSL Certificate Types to choose the right option.
Step 3: Complete Certificate Request (IIS-Generated CSR)
If you generated your CSR using IIS Manager (Option B), complete the pending request:
- Open IIS Manager: Press Windows + R, type
inetmgr, press Enter
- Select Server: Click on your server name in the left panel
- Open Server Certificates: Double-click Server Certificates
- Complete Certificate Request: In the Actions panel, click Complete Certificate Request...
- Locate Certificate File: Browse to your downloaded certificate file (.cer or .crt)
- Enter Friendly Name: Use a descriptive name (e.g., "yourdomain.com SSL 2025")
- Select Certificate Store: Choose Web Hosting or Personal
- Click OK: The certificate is installed
Verify Installation:
- The certificate should now appear in the Server Certificates list
- Check the expiration date and issuer details
Step 4: Install Certificate Using PFX File (External CSR)
If you generated your CSR using our CSR Generator or another external tool, you'll need to create a PFX file.
Create PFX Using Certificate Converter
- Visit our Certificate Converter tool
- Select PEM to PFX conversion
- Upload your files:
- Certificate file (.crt)
- Private key file (.key)
- CA Bundle file (optional but recommended)
- Set a strong password for the PFX
- Download the .pfx file
Create PFX Using OpenSSL
# Combine certificate with CA bundle
cat yourdomain.crt ca-bundle.crt > fullchain.crt
# Create PFX file
openssl pkcs12 -export \
-out yourdomain.pfx \
-inkey private.key \
-in fullchain.crt \
-password pass:YourSecurePasswordImport PFX into IIS
- Open IIS Manager: Press Windows + R, type
inetmgr
- Select Server: Click your server name
- Open Server Certificates: Double-click Server Certificates
- Import Certificate: In the Actions panel, click Import...
- Browse to PFX File: Select your .pfx file
- Enter Password: Type the password you set when creating the PFX
- Select Certificate Store: Choose Web Hosting (recommended) or Personal
- Allow Export (optional): Check if you want to export the certificate later
- Click OK: The certificate is imported
Step 5: Bind SSL Certificate to Website
After installing the certificate, bind it to your website:
Using IIS Manager (GUI)
- Expand Sites: In IIS Manager, expand your server → Sites
- Select Your Website: Click on the website you want to secure
- Open Bindings: In the Actions panel, click Bindings...
- Add HTTPS Binding: Click Add...
- Configure Binding:
- Type: https
- IP Address: All Unassigned (or specific IP)
- Port: 443
- Host name: yourdomain.com (required when using SNI)
- Require Server Name Indication: ✓ Check this box (recommended)
- SSL certificate: Select your installed certificate
- Click OK: The HTTPS binding is created
- Add www Binding (if needed): Repeat for www.yourdomain.com
Using PowerShell
# Get certificate thumbprint
$cert = Get-ChildItem -Path Cert:\LocalMachine\WebHosting | Where-Object {$_.Subject -like "*yourdomain.com*"}
# Create HTTPS binding with SNI
New-WebBinding -Name "YourSiteName" -Protocol "https" -Port 443 -HostHeader "yourdomain.com" -SslFlags 1
# Bind certificate to site
$binding = Get-WebBinding -Name "YourSiteName" -Protocol "https" -HostHeader "yourdomain.com"
$binding.AddSslCertificate($cert.Thumbprint, "WebHosting")Understanding SNI (Server Name Indication)
SNI allows multiple SSL sites to share a single IP address:
- With SNI: Multiple domains can use port 443 on the same IP
- Without SNI: Each SSL site requires a unique IP address
- Compatibility: All modern browsers support SNI (IE 7+, Chrome, Firefox, Safari, Edge)
When to use SNI: Almost always recommended for modern deployments.
Step 6: Configure HTTP to HTTPS Redirect
Force all HTTP traffic to redirect to HTTPS using URL Rewrite module.
Install URL Rewrite Module
- Download from Microsoft IIS URL Rewrite
- Run the installer
- Restart IIS Manager
Configure Redirect via IIS Manager
- Select Your Website: In IIS Manager, click on your website
- Open URL Rewrite: Double-click URL Rewrite
- Add Rule: In the Actions panel, click Add Rule(s)...
- Select Blank Rule: Choose "Blank rule" under Inbound rules
- Configure Rule:
- Name: HTTP to HTTPS Redirect
- Match URL:
- Requested URL: Matches the Pattern
- Using: Regular Expressions
- Pattern:
(.*) - Conditions: Click Add
- Input:
{HTTPS} - Type: Matches the Pattern
- Pattern:
^OFF$ - Action:
- Type: Redirect
- Redirect URL:
https://{HTTP_HOST}/{R:1} - Redirect type: Permanent (301)
- Apply: Click Apply in the Actions panel
Configure via web.config
Add to your site's web.config file:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS Redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>Step 7: Enable HTTP Strict Transport Security (HSTS)
HSTS tells browsers to always use HTTPS for your domain.
Configure HSTS via web.config
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>Configure HSTS via IIS Manager
- Select Your Website: Click on your site in IIS Manager
- Open HTTP Response Headers: Double-click HTTP Response Headers
- Add Header: In Actions, click Add...
- Name:
Strict-Transport-Security - Value:
max-age=31536000; includeSubDomains
Warning: Only enable HSTS after confirming HTTPS works correctly. The setting is cached by browsers.
Step 8: Verify SSL Installation
After installation, verify everything is working correctly.
Browser Verification
- Visit Your Website: Navigate to
https://yourdomain.com - Check Padlock Icon: A padlock should appear in the address bar
- Click Padlock: View certificate details
- Verify Certificate Chain: Check for complete chain (leaf → intermediate → root)
Use SSL Checker Tool
Our SSL Checker Tool provides comprehensive verification:
- Certificate chain validation
- Expiration date
- Protocol support (TLS 1.2, TLS 1.3)
- Security grade
- Common issues detection
PowerShell Verification
# Test SSL connection
Test-NetConnection -ComputerName yourdomain.com -Port 443
# View certificate details
$url = "https://yourdomain.com"
$request = [System.Net.HttpWebRequest]::Create($url)
$request.ServicePoint.Certificate
# Or use curl (Windows 10+)
curl.exe -vI https://yourdomain.com 2>&1 | Select-String "SSL|certificate"Installing Wildcard SSL on IIS
Wildcard certificates secure your main domain and all first-level subdomains.
Wildcard Certificate Binding
- Import Wildcard Certificate: Follow Step 4 to import the wildcard PFX
- Create Bindings for Each Subdomain:
- yourdomain.com → Wildcard cert
- www.yourdomain.com → Same wildcard cert
- blog.yourdomain.com → Same wildcard cert
- api.yourdomain.com → Same wildcard cert
- Enable SNI: Check "Require Server Name Indication" for each binding
PowerShell Example
# Get wildcard certificate
$cert = Get-ChildItem Cert:\LocalMachine\WebHosting | Where-Object {$_.Subject -like "*\*.yourdomain.com*"}
# Create bindings for multiple subdomains
$domains = @("yourdomain.com", "www.yourdomain.com", "blog.yourdomain.com", "api.yourdomain.com")
foreach ($domain in $domains) {
New-WebBinding -Name "YourSiteName" -Protocol "https" -Port 443 -HostHeader $domain -SslFlags 1
$binding = Get-WebBinding -Name "YourSiteName" -Protocol "https" -HostHeader $domain
$binding.AddSslCertificate($cert.Thumbprint, "WebHosting")
}Advanced: Centralized Certificate Store (CCS)
For multi-server environments, use Centralized Certificate Store to share certificates.
Enable CCS Feature
# Install CCS feature
Install-WindowsFeature Web-CertProvider
# Configure CCS
$ccsPath = "\\fileserver\certs"
$ccsUser = "DOMAIN\CertUser"
$ccsPassword = ConvertTo-SecureString "Password" -AsPlainText -Force
Enable-IISCentralCertProvider -CertStoreLocation $ccsPath -UserName $ccsUser -Password $ccsPasswordCCS Certificate Naming
Certificates in CCS must be named after the domain:
yourdomain.com.pfxwww.yourdomain.com.pfx_.yourdomain.com.pfx(wildcard)
Common IIS 10 SSL Errors & Troubleshooting
Error: "A specified logon session does not exist"
Cause: Certificate private key permissions issue.
Solution:
# Find certificate
$cert = Get-ChildItem Cert:\LocalMachine\WebHosting | Where-Object {$_.Subject -like "*yourdomain.com*"}
# Get private key path
$keyPath = $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$fullPath = "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$keyPath"
# Grant IIS_IUSRS read permission
icacls $fullPath /grant "IIS_IUSRS:R"Error: "No certificate matching the SSL binding"
Cause: Certificate is in wrong store or has been removed.
Solution:
- Verify certificate is in Web Hosting or Personal store
- Re-import PFX if necessary
- Recreate the HTTPS binding
Error: "Certificate chain incomplete"
Cause: Intermediate certificates not installed.
Solution:
- Download CA bundle from your certificate provider
- Import intermediate certificates:
Import-Certificate -FilePath "intermediate.crt" -CertStoreLocation Cert:\LocalMachine\CAError: "SSL/TLS handshake failed"
Cause: TLS version mismatch or cipher suite incompatibility.
Solution:
# Enable TLS 1.2
New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Force
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'Enabled' -Value 1 -PropertyType 'DWord'
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'DisabledByDefault' -Value 0 -PropertyType 'DWord'
# Restart IIS
iisresetError: "Private key and certificate don't match"
Cause: Certificate doesn't match the private key.
Solution: Use our Key Matcher Tool to verify your private key matches the certificate.
Error: "SNI required but host header missing"
Cause: HTTPS binding configured with SNI but no host header specified.
Solution: Either specify a host header or uncheck "Require Server Name Indication" (requires dedicated IP).
Error: "Cannot add duplicate collection entry"
Cause: Binding already exists for that IP:port:hostname combination.
Solution:
# List existing bindings
Get-WebBinding -Name "YourSiteName"
# Remove duplicate binding
Remove-WebBinding -Name "YourSiteName" -Protocol "https" -HostHeader "yourdomain.com"
# Add correct binding
New-WebBinding -Name "YourSiteName" -Protocol "https" -Port 443 -HostHeader "yourdomain.com" -SslFlags 1Let's Encrypt vs Purchased SSL for IIS
| Feature | Let's Encrypt | Purchased SSL |
|---|---|---|
| Cost | Free | Starting at $2.99/year |
| Validity | 90 days | 1-3 years |
| Auto-renewal | Requires ACME client (win-acme) | Manual (reminder available) |
| Validation Types | DV only | DV, OV, EV available |
| Warranty | None | Up to $1.75M |
| Support | Community | 24/7 Professional |
| Wildcard | Supported (DNS validation) | Supported |
| Enterprise Use | Limited | Recommended |
Recommendation: For production IIS deployments, purchased SSL certificates are recommended for longer validity, warranty protection, and OV/EV validation options.
IIS 10 SSL Best Practices
- Use TLS 1.2 or TLS 1.3 - Disable older protocols
- Enable HSTS - Prevent protocol downgrade attacks
- Use Strong Cipher Suites - Disable weak ciphers
- Enable HTTP/2 - Requires HTTPS in most browsers
- Use SNI - Host multiple SSL sites efficiently
- Monitor Certificate Expiration - Use our SSL Checker
- Set Up Expiry Reminders - At SSL Checker page
- Backup Certificates - Export as PFX to secure location
- Use Centralized Certificate Store - For multi-server environments
- Regular Security Audits - Test with SSL Labs or similar