#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, который доступен для навигации, как показано ниже.
Я попытался выполнить поиск команды, попробовал пару, которые, как я думал, могли бы сработать, но пока безуспешно.
Заранее спасибо
Комментарии:
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.