Установка tls сертификата от let s encrypt на веб сервер iis

Установим SSL сертификаты на почтовый сервер hMailServer. Используем порты для SSL/TLS:

  • SMTP 587
  • IMAP 993
  • POP3 995

Сами сертификаты будем брать бесплатные — Let’s Encrypt.

SSL certificates are a useful step to protect your web application server by securing data exchange. This guide explains how to install a Let’s Encrypt SSL certificate on Windows Server 2019 with the Internet Information Services (IIS) web server.

In this guide, we will show you how to install and bind a free TLS/SSL Let’s Encrypt certificate for a site on the IIS web server running on Windows Server 2019/2016/2012 R2.

Profile picture for user Олег

let's encrypt

Сегодня автоматизируем установку бесплатного SSL сертификата на сайт, который работает на web-сервере IIS 10. Операционная система Microsoft Windows 2016. Сертификат выдается лишь на 90 дней, но его всегда можно быстро обновить в автоматическом режиме.

Наличие SSL сертификата для сайта позволяет защитить данные пользователей, передаваемые по сети и гарантировать целостность переданных данных. Хотя, если вы попали на эту статью, то вы уже знаете для чего вам нужен сертификат.

Let’s Encrypt — центр сертификации, начавший работу в бета-режиме с 3 декабря 2015 года, предоставляющий бесплатные криптографические сертификаты X.509 для TLS-шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован. https://letsencrypt.org/

Для установки сертификата будем использовать консольную утилиту LetsEncrypt-Win-Simple.

Подготовка

LetsEncrypt-Win-Simple берём здесь:

ssl

Я скачал версию v2.0.5.246. Распаковываем архив.

ssl

Папка win-acme.v2.0.5.246 нам потом пригодится для автоматического продления сертификатов, которое будет запускаться через Task Scheduler, не удаляйте.

При запуске wacs.exe хочет .NET Framework 4.7.2.

ssl

ssl

Качаем .NET Framework 4.7.2 и запускаем установку.

ssl

Принимаем лицензионное соглашение, Install.

ssl

mail

.NET Framework 4.7.2 установлен.

ssl

Перезагружаем сервер. Подготовка к установке сертификатов завершена.

Устанавливаем SSL сертификат

Запускаем wacs.exe под администратором.

ssl

Для начала сгенерируем простой сертификат. Для этого выбираем Create new certificate, N. Нас спрашивают, какой сертификат делаем.

ssl

Для тестирования генерируем простой сертификат без псевдонимов (для установки сертификата с псевдонимами выберите 2). Пишем 1. Нам показывают список всех доменов, забинденных в IIS.

ssl

Жертвой будет setpizza.com. Пишем 5.

ssl

ssl

Нужно принять лицензионное соглашение. Если написать «y», то откроется PDF файл с соглашением. Принимаем лицензионное соглашением.

ssl

Проверяем сертификат

Заходим на https://setpizza.com/

ssl

Всё работает, сертификат есть.

ssl

ssl

В хранилище сертификатов:

ssl

Let’s Encrypt устанавливает также сертификаты промежуточных центров сертификации.

mail

443 порт добавился автоматически, сертификат выбрался автоматически.

ssl

В планировщике добавилось ежедневное правило для обновления сертификатов.

ssl

Дополнительные настройки

Вы можете настроить почту для уведомлений.

mail

Как нам подсказывают, нужно ручками подправить файл settings.config.

<setting name="SmtpServer" serializeAs="String">
  <value>localhost</value>
</setting>
<setting name="SmtpPort" serializeAs="String">
  <value>25</value>
</setting>
<setting name="SmtpUser" serializeAs="String">
  <value />
</setting>
<setting name="SmtpPassword" serializeAs="String">
  <value />
</setting>
<setting name="SmtpSecure" serializeAs="String">
  <value>False</value>
</setting>
<setting name="SmtpSenderName" serializeAs="String">
  <value>Let's Encrypt</value>
</setting>
<setting name="SmtpSenderAddress" serializeAs="String">
  <value>admin@yourdomain1.ru</value>
</setting>
<setting name="SmtpReceiverAddress" serializeAs="String">
  <value>admin@yourdomain2.ru</value>
</setting>
<setting name="EmailOnSuccess" serializeAs="String">
  <value>True</value>
</setting>

ssl

Лучше генерировать сертификаты с псевдонимами, например:

mail

Принцип понятен, дальше разберётесь.

Ссылки

IIS — SSL сертификат Let’s Encrypt

hMailServer — большой обзор

Получение сертификатов

web-сайт

Заводим на IIS сайт c адресом почтового сервера. Естественно, делаем всё это на сервере, где крутится hMailServer. Создаём там любую страничку index.html для проверки работы сайта.

ssl

Проверяем, что сайт работает.

ssl

Папка

Создаём папку для хранения сертификатов. Я создаю C:\mail\ssl.

ssl

Скрипт для перезапуска hMailServer

Сертификат Let’s Encrypt действует 90 дней. В планировщике добавится ежедневное правило для обновления сертификатов. Когда сертификат для hMailServer обновится через 90 дней, то hMailServer нужно перезагрузить, напишем для этого простой скрипт. Создадим в папке C:\mail\ssl файл restart_hmailserver.bat с содержимым.

@ECHO OFF
NET STOP hmailserver
NET START hmailserver

Выпуск сертификатов

Читаем статью IIS — SSL сертификат Let’s Encrypt и генерируем для нашего сайты SSL сертификаты Let’s Encrypt.

Запускаем wacs.exe под администратором.

ssl

Нам нужен пункт «Create new certificate» with advanced option». Пишем «m».

ssl

Выбираем «SAN certificate for all bindings of an IIS site». Пишем «2».

ssl

Находим в списке домен своего почтового сервера, пишем его номер, у меня «7».

ssl

Выбираем список доменных имён для исключения. Или ввод, если исключений нет. Я нажимаю Enter.

ssl

Я нажимаю Enter.

ssl

Выбираем способ подтверждения владения доменом. Для IIS это «4».

ssl

Тип CSR. Пишем «2».

ssl

Вот теперь важный пункт, где храним сертификаты. Выбираем «3», чтобы записать их в папку.

Нас спросят, в какую папку записывать сертификаты, указываем C:\mail\ssl.

ssl

Теперь спрашивают, нужно ли выполнить скрипт после записи сертификатов. Пишем «2», конечно нужно перезапустить hMailServer!

Читать также:  Есть ли подарочные сертификаты в магазинах Магнит Косметик и Продукты?

ssl

Просят указать путь к скрипту. Пишем C:\mail\ssl\restart_hmailserver.bat.

ssl

ssl

Здесь у меня уже был ранее создана задача перевыпуска этого сертификата, пишу «y».

ssl

И так, создаётся задача на обновление сертификата.

Происходит процедура проверки владения доменом — успех.

Экспортируются файлы сертификата в C:\mail\ssl.

Выполняется скрипт C:\mail\ssl\restart_hmailserver.bat, это нам пока не нужно, понадобится при выпуске следующих сертификатов.

Проверяем, что файлы созданы:

ssl

Настройка SSL в hMailServer

В админке hMailServer в Settings > Advanced > SSL certificates добавляем сертификат.

ssl

Certificate file — указываем путь к *-chain.PEM файлу.

Private key file — указываем путь к *.key.PEM файлу.

В админке hMailServer в Settings > Advanced > TCP/IP ports добавляем 587 SMTP порт.

  • Протокол: SMTP
  • TCP/IP adress: 0.0.0.0
  • TCP/IP port: 587
  • Connection security: SSL/TLS
  • SSL Certificate: из выпадающего списка выбираем добавленный ранее сертификат.

ssl

В админке hMailServer в Settings > Advanced > TCP/IP ports добавляем 993 IMAP порт.

  • Протокол: IMAP
  • TCP/IP adress: 0.0.0.0
  • TCP/IP port: 993
  • Connection security: SSL/TLS
  • SSL Certificate: из выпадающего списка выбираем добавленный ранее сертификат.

ssl

В админке hMailServer в Settings > Advanced > TCP/IP ports добавляем 995 POP3 порт.

  • Протокол: POP3
  • TCP/IP adress: 0.0.0.0
  • TCP/IP port: 995
  • Connection security: SSL/TLS
  • SSL Certificate: из выпадающего списка выбираем добавленный ранее сертификат.

ssl

На этом настройка SSL для hMailServer завершена.

Проверка

Проверяем на gmail

Проверяем на gmail как работает SSL на 995 порту POP3.

ssl

ssl

Импортировать письма из другого аккаунта (POP3). Далее.

ssl

ssl

Почтовый аккаунт добавлен. Готово.

Напишем на тестовый ящик письмо и проверим почту.

ssl

Поступило одно письмо. 995 POP3 через SSL работает.

Проверяем в Outlook

Проверяем в Outlook как работает SSL на 995 порту IMAP и на 578 порту SMTP. Создаём новую учётную запись в Outlook.

ssl

Выбираем «Ручная настройка или дополнительные типы серверов». Далее.

ssl

Выбираем «Протокол POP или IMAP». Далее.

ssl

Вкладка «Сервер исходящей почты»:

ssl

Указываем, что серверу исходящей почты тоже требуется авторизация.

ssl

IMAP-сервер, пишем порт 993, тип шифрования SSL.

SMTP-сервер, пишем порт 587, тип шифрования SSL.

ssl

Проверки прошли успешно.

Заключение

Мы с вами успешно настроили и протестировали настройку SSL сертификатов от Let’s Encrypt для почтового сервера hMailServer с помощью IIS. Более того, сертификаты будут автоматически обновляться и перезапускать hMailServer после обновления.

Если вы используете платные SSL сертификаты, то настройка SSL происходит таким же образом, просто пропускаете все шаги для Let’s Encrypt, сохраняете свои сертификаты в любую папку у настраиваете их в админке hMailServer.

Prerequisites

  1. From the Windows start menu, open Server Manager.
  2. Click Add roles and features.
  3. Select Role-based or feature-based installation, and choose your server.
  4. Scroll through Server Roles and click Web Server (IIS).
  5. Add any additional IIS features you wish to install.
  6. Click Install to start the installation process.
  7. Test your IIS installation by visiting your public server IP address.

     http://192.0.2.123
    

    The default IIS welcome web page should display.

Redirect from HTTP to HTTPS Using the IIS URL Rewrite

To redirect all incoming HTTP traffic to the HTTPS website URL, install the Microsoft URL Rewrite Module (https://www.iis.net/downloads/microsoft/url-rewrite), and make sure that the option Require SSL is disabled in the site settings. Now configure the redirect in web.config with rewrite rules:

<system.webServer>
<rewrite>
<rules>
<rule name=”HTTP to HTTPS Redirect” enabled=”true” stopProcessing=”true”>
<match url=”(.*)” />
<conditions>
<add input=”{HTTPS}” pattern=”off” ignoreCase=”true” />
</conditions>
<action type=”Redirect” url=”https://{HTTP_HOST}/{R:1}” appendQueryString=”true” redirectType=”Permanent” />
</rule>
</rules>
</rewrite>
</system.webServer>

You can also configure traffic redirect using the URL Rewrite extension through the IIS Manager GUI. Select Sites -> yoursitename -> URL Rewrite.

iis URL Rewrite module

Create a new rule Add Rule -> Blank rule.

  • Requested URL: Matches the Pattern
  • Using: Regular Expressions
  • Pattern: (.*)

URL-Rewrite edit inbound rule

  • Condition input: {HTTPS}
  • Check if input string: Matches the Pattern
  • Pattern: ^OFF$

url rewrite add conditions

  • Action Type: Redirect
  • Redirect URL: https://{HTTP_HOST}/{R:1}
  • Redirect type: Permanent (301)

Open a browser and try to open your site with an HTTP address; you should be automatically redirected to the HTTPS URL.

Using Let’s Encrypt Certificates with RDS Gateway & Web Access

Then, run wacs.exe on the RD Gateway server, as described above. Select the desired IIS site (usually it is the Default Web Site. Let’s Encrypt will issue you a new certificate and bind it to the IIS website, and the automatic certificate renewal task will appear in the Task Scheduler.

Читать также:  Приветствие tls не завершено сертификат не может быть использован для этой цели

You can manually export this certificate and bind it to the required RDS services through the SSL binding. But you will have to perform these steps manually every 60 days when the Let’s Encrypt certificate is renewed.

We can use the PowerShell script to automatically bind SSL certificate to the RDS Gateway after updating the Let’s Encrypt certificate.

There is a ready PowerShell script in the win-acme project – ImportRDGateway.ps1 (https://github.com/PKISharp/win-acme/tree/master/dist/Scripts), which allows you to install the selected SSL certificate for Remote Desktop Services. The main drawback of this script is that you have to manually specify the thumbprint of the new certificate:

To automatically get the certificate thumbprint from the specified IIS site, use the modified script ImportRDGateway_Cert_From_IIS.ps1 (based on the ImportRDGateway.ps1).

You can run this script manually:

powershell -File ImportRDGateway_Cert_From_IIS.ps1

If your RDS Gateway runs on the IIS “Default Web Site” with index 0, you can use the script without changes.

To get the site ID on IIS, open the PowerShell console and run:

Get-ChildItem IIS - get site listThe ID column shows the index of your site, subtract one from it. The resulting index should be specified instead of 0 in line 27 of the PowerShell script:

$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint

change rds gateway site index in powershell script

Now open the win-acme-renew scheduler task, and on the Actions tab add a new task that runs the ImportRDGateway_Cert_From_IIS.ps1 script after updating the SSL certificate.

In order not to change the PowerShell execution policy, you can run the script with the command:

PowerShell.exe -ExecutionPolicy Bypass -File c:\inetpub\letsencrypt\ImportRDGateway_Cert_From_IIS.ps1

win-acme-renew - renew cert task and update RDS SSL binding

Now the script for binding the SSL certificate to the RDS will be executed immediately after the Let’s Encrypt certificate is renewed. In this case, the RD Gateway service is automatically restarted with the command:

Let’s Encrypt and ACME Clients for Windows

The Let’s Encrypt API interface to automatically issue the certificates is called Automated Certificate Management Environment (ACME) API. There are 3 most popular ACME API client implementations for Windows systems:

  1. Windows ACME Simple (WACS) is the command prompt tool for the interactive issue an SSL certificate and bind it to a specific site on your IIS web server;
  2. Powershell ACMESharp module – is the PowerShell library with a number of cmdlets to interact with Let’s Encrypt servers over ACME API;
  3. Certify is a Windows graphics tool to manage SSL certificates interactively using ACME API.

WACS Clint to Install Let’s Encrypt TLS Certificate in IIS on Windows Server

The easiest way to get an SSL certificate from Let’s Encrypt is to use the console tool Windows ACME Simple (WACS) (previously this project called LetsEncrypt-Win-Simple). It is a simple wizard that allows you to select one of the websites running on the IIS, automatically issue and bind an SSL certificate to it.

Suppose, you have an IIS website running on Windows Server 2016. Your task is to switch the website to an HTTPS mode by installing a free SSL certificate from Let’s Encrypt.

Download the latest release of the WACS client from the GitHub https://github.com/PKISharp/win-acme/releases (in my case, this is version v2.0.10 – the file name is win-acme.v2.0.10.444.zip).

Windows ACME Simple (WACS) LetsEncrypt clicent download from github

wacs.exe

Open the elevated command prompt, go to c:\inetpub\letsencrypt directory and run wacs.exe. This will launch an interactive Let’s Encrypt certificate generation and binding to IIS site wizard. To quickly create a new certificate, select N:Create new certificates (simple for IIS).

simple acmev2 client - create new certificate for iis on windows server

Next, you need to select the certificate type. In our example, there is no need to use a certificate with aliases (multiple SAN – Subject Alternative Name), so just select an item 1. Single binding of an IIS site. If you need a Wildcard certificate, select the option 3.

Then the utility displays the list of websites running on IIS and prompts you to select a site to issue the certificate for.

Читать также:  Доверенность на использование сертификата соответствия для таможенного оформления

select domain to issue ssl certificate

Specify your email address to which notifications about certificate renewing problems and other critical messages and abuses will be sent (you can specify multiple email addresses separated by commas). It remains to agree to the terms of use and Windows ACME Simple will connect to Let’s Encrypt servers and try to automatically generate a new SSL certificate for your website.

email for letsencrypt

The process of generating and installing SSL Let’s Encrypt certificate for IIS is fully automated.

Note. During the TLS/HTTP validation, your site must be accessible from the Internet by its full DNS name over HTTP (80/TCP) and HTTPS (443/TCP) protocols.

In IIS Manager, open the Site Binding settings for your website and verify that it uses the certificate issued by Let’s Encrypt Authority X3.

certificate properties Let’s Encrypt Authority X3

You can find the Let’s Encrypt IIS certificate in the computer certificate store under Web Hosting -> Certificates.

Web Hosting -> IIS Certificates authorities with Let’s Encrypt » srcset=»https://woshub.com/wp-content/uploads/2019/09/web-hosting-greater-iis-certificates-authorities-with-l.png 548w, https://woshub.com/wp-content/uploads/2019/09/web-hosting-greater-iis-certificates-authorities-with-l-300×154.png 300w» sizes=»(max-width: 548px) 100vw, 548px»></p>
<p>Windows ACME Simple creates a new job in the Windows Task Scheduler (<code>win-acme-renew (acme-v02.api.letsencrypt.org)</code>) to automatically renew the certificate. The task starts every day, and the renewal of the certificate is performed after 60 days. This task runs the command:</p>
<p><code>C:\inetpub\letsencrypt\wacs.exe --renew --baseuri

You can use the same command to manually update Let’s Encrypt certificate.

task in sheduler to renew Let’s Encrypt certificate - win-acme-renew

Create the Web Application

  1. Using Windows Explorer, create a new folder in the default IIS web server directory to store your domain’s web files. For example, you could create a folder named C:\inetpub\example.com.
  2. Press Control + R on your keyboard to open the run utility, and enter notepad in the text field.
  3. <html>
      <head>
        <title>Hello World</title>
      </head>
        <body>
          <h1>Hello World!</h1>
        </body>
    </html>
    

Save the file as index.html in your domain files directory. For example: C:\inetpub\example.com\index.html

Request and Install a Certificate

You can install a certificate with either Certbot or the Win-acme client. Please review both sections below before choosing an installation method.

Option 1: Install with Certbot

You have successfully installed your SSL certificate, visit the domain in a web browser to confirm the access is secure. For example, navigate to https://example.com and verify the certificate is correct.

Option 2: Install with Win-acme Client

  1. Extract files from the downloaded win-acme zip archive.
  2. Navigate to the extracted folder and open the wacs.exe application.
  3. Click More info in the Windows Defender SmartScreen pop-up window, and Run anyway.
  4. In the open command prompt console, enter N to create a new SSL certificate with default options.
  5. Select your target IIS domain to install the SSL certificate on.
  6. Enter A to use all bindings of the IIS domain.
  7. Enter y' to continue with your selection,y’ to open with the default web server application, `y’ to agree to the Let’s Encrypt terms.
  8. Enter your email address to receive important certificate notifications.
  9. Your SSL Certificate is automatically stored in the IIS certificate store and registered for your domain name.
  10. Visit your domain name to confirm HTTPS access.

    https://example.com
    

Setup the IIS Site with your Domain Name

  1. Open the Windows start menu and navigate to the Windows Administrative Tools subgroup.
  2. Select Internet Information Services (IIS) Manager from the list.
  3. In the IIS Manager Window, click > next to your server name to expand the list.
  4. Expand Sites, and click Add Website on the right Actions bar.

    Add new IIS Site

  5. Enter your Web Application name in the Site Name: field.

  6. Under Content Directory, click ... to browse and set the Physical path: to your domain web files directory.
  7. Keep http as the Type under Binding, and 80 as the port.
  8. To assign your domain a specific IP address, select it from the drop-down list, or keep All Unassigned to use all Server IP addresses.
  9. Enter your domain name in the Hostname: field.
  10. Click OK to save changes and automatically start the website.
  11. Visit your domain to confirm successful integration.

    http://example.com
    

    The hello world HTML application should display.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *