Измените SSL-сертификат домашнего FTP-сервера с помощью Powershell

#powershell #ssl #iis #ftp

Вопрос:

Во-первых, позвольте мне указать, что я имею в виду НЕ сайт по умолчанию, а «Домашний» сервер сервера (как к нему относится IIS). Спасибо.


У меня есть один общедоступный IP-адрес, а в IIS 3 веб-сайта и 2 FTP-сайта. Не проблема, благодаря именованным привязкам. Однако IIS немного не работает, когда дело доходит до «правильного» выбора пути / сертификата для указанных именованных привязок. Я не могу вспомнить ссылку, которую я использовал, но вы должны указать SSL-сертификат FTP на уровне «Home» И на уровне сайта, чтобы установить безопасное FTP-соединение.

Я использую Certify для управления / обновления своих SSL-сертификатов. Из-за вышеупомянутой проблемы; Я создаю единый сертификат, который включает оба поддомена, и обновляю один FTP-сайт. Затем у меня есть задача, которая выполняется успешно, которая по завершении отправляет новый сертификат на другой FTP-сайт (ниже приведена копия файла).

 Import-Module WebAdministration
$configItem = 'ftpServer.security.ssl.serverCertHash'
$thumb = Get-ItemProperty "IIS:SitesFTP 1" -Name ftpServer.security.ssl.serverCertHash.Value
Set-ItemProperty "IIS:SitesDefault Web Site" -Name $configItem -Value $thumb
Set-ItemProperty "IIS:SitesFTP 2" -Name $configItem -Value $thumb
 

Как вы можете видеть, он также устанавливает SSL-сертификат FTP для «веб-сайта по умолчанию» — просто чтобы попытаться исправить это. Однако это не то, что мне нужно. Что мне нужно сделать, это установить «домашний» SSL-сертификат FTP верхнего уровня из Powershell, который доступен для навигации, как показано ниже.

Переход IIS к quot;домашнемуquot; SSL-сертификату FTP

Я попытался выполнить поиск команды, попробовал пару, которые, как я думал, могли бы сработать, но пока безуспешно.

Заранее спасибо

Комментарии:

1. Похоже, что powershell может устанавливать только сертификат сайта вместо «Home» верхнего уровня. Powershell изменил настройку файла applicationhost.config, чтобы изменить настройки сайта. Но сертификаты не заданы в файле applicationhost.config. Итак, вам нужен конкретный сайт, чтобы можно было установить сертификат.

2. Черт, это позор. Я так и думал, исходя из своих исследований, хотя и надеялся на какую-нибудь чудодейственную команду, которую пропустил. Я открыл проблему на github, чтобы узнать, могут ли они это добавить. ( github.com/PowerShell/PowerShellModuleCoverage/issues/23 )

Ответ №1:

Итак, после долгих поисков мне удалось найти способ сделать это.

TLDR;

Новый сценарий PowerShell:

 Import-Module WebAdministration
$configItem = 'ftpServer.security.ssl.serverCertHash'
$thumb = Get-ItemProperty "IIS:SitesFTP 1" -Name ftpServer.security.ssl.serverCertHash.Value
Set-ItemProperty "IIS:SitesFTP 2" -Name $configItem -Value $thumb
C:windowssystem32inetsrvappcmd.exe set config -section:system.applicationHost/sites /siteDefaults.ftpServer.security.ssl.serverCertHash:"$thumb" /commit:apphost
 

Итак, во время исследования я нашел статью Microsoft о FTP через SSL, в ней упоминается applicationHost.config (также упоминается @BruceZhang). После прокрутки я обнаружил <siteDefaults> , что это сразу после последнего </site> . Там было свойство a для SSL-сертификата (путь « <ftpServer> / <security> / <ssl> «). Еще немного поисков, и я нашел appcmd , что можно использовать для обновления этого файла конфигурации. О чудо, я создал приведенный выше (последняя строка) обновленный сценарий PowerShell.