понедельник, 8 октября 2018 г.

Замена сертификатов в vSphere Integrated Containers

Работа с сертификатами является важной составной частью процедуры настройки платформы для запуска контейнеров VMware vSphere Integrated Containers. Сертификаты используются в VIC для подключения администраторов к веб-консоли VIC, проверки подлинности хранилища образов Harbor, аутентификации пользователей в Virtual Container Host.

VIC Appliance и VCH могут использовать самозаверенные сертификаты, которые автоматически создаются при развертывании данных компонентов, либо импортированные сертификаты от доверенного Удостоверяющего Центра. Использование сертификатов, выданных доверенным УЦ, позволяет обеспечить больший уровень защищенности и упростить эксплуатацию платформы, избавившись от необходимости повсюду добавлять самозаверенные сертификаты в доверенные или отключать проверку подлинности. Ниже я опишу основные шаги по замене сертификатов для новой и уже существующей инфраструктуры VIC.

Выдача сертификатов

Ниже я рассмотрю пример выдачи сертификатов для VIC Appliance и для VCH на базе УЦ Microsoft Windows Server. Во-первых, требуется включить на сервере поддержку Subject Alternative Name сертификатов, т.к. обращение к компонентам VIC будет осуществляться и по DNS именам, и по IP адресам. Во-вторых, будет проще создать отдельный шаблон сертификата из типового шаблона Web Server и разрешить в нем экспорт закрытого ключа.

При запросе сертификата у УЦ, разрешите экспорт закрытого ключа (Mark key as exportable) и укажите несколько дополнительных имен в поле атрибутов (например, короткое имя и IP адрес сервера VIC), например:
SAN:dns=vic02.company.local&dns=vic02&ipaddress=192.168.1.21

После запроса сертификата экспортируйте его вместе с закрытым ключом в формат PFX. Повторите аналогичную процедуру для каждого сервера VCH.

Замена сертификатов для VIC Appliance

Замена сертификатов для VIC выполняется путем редактирования настроек vApp Options виртуального апплайнса. Для развертываемого с нуля апплайнса достаточно скопировать содержимое файлов с сертификатом, закрытым ключем и сертификатом УЦ в соответствующие поля в мастере настройке VIC при импорте шаблона.

Сертификаты сервера VIC и удостоверяющего центра должно быть сохранены в PEM формате в стандарте PKCS#12. Для закрытого ключа поддерживаются стандарты PKCS#1 и PKCS#8, при этом сам закрытый ключ не должен быть зашифрован.

Если у вас уже есть PFX файл с закрытым ключом (cert.pfx), то вы можете воспользоваться утилитой OpenSSL для конвертации и экспорта сертификатов и ключей в требуемый формат.

Для экспорта сертификата из PFX файла в PEM формат используйте команду:
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem

Для экспорта закрытого ключа используйте команду:
openssl pkcs12 -in cert.pfx  -nocerts -out enckey.pem

Затем для конвертации закрытого ключа в формат PKCS#8 используйте команду:
openssl pkcs8 -topk8 -in enckey.pem -out key.pem -nocrypt

Наконец, сохраните сертификат доверенного УЦ в формате Base64 (ca.pem).

После этого откройте файлы cert.pem, key.pem и ca.pem в любом тестовом редакторе и скопируйте содержимое файлов в соответствующие поля в форме (копируемый текст сертификатов должен начинаться с -----BEGIN CERTIFICATE----- и заканчиваться -----END CERTIFICATE-----).

Для уже развернутого VIC Appliance потребуется предварительно выключить ВМ, затем зайти в ее настройки в vSphere Web Client (Edit Settings -> vApp Options -> 1. Appliance Configuration) и скопировать содержимое сертификатов в нужные поля.

После загрузки ВМ, подключитесь к Web-интерфейсу и проверьте, что новый сертификат отображается корректно.

Замена сертификатов для Virtual Container Host

Экспорт файлов сертификата и закрытого ключа для VCH выполняется теми же командами OpenSSL, что и для VIC Appliance.

При создании нового VCH через веб-интерфейс вы можете указать путь к сертификатам в соответствующих полях мастера.

Заменить сертификаты для существующего VCH можно при помощи утилиты командной строки vic-machine, входящей в состав vSphere Integrated Containers Engine bundle (сам бандл можно загрузить с веб-портала VIC Appliance, подключившись по адресу https://<vic_ip>:9443).

Для замены сертификата вам потребуется определить ID виртуальной машины VCH. Сделать это можно при помощи команды:
vic-machine-windows.exe ls --target vc.vm.local -u administrator@vsphere.local --thumbprint 1B:00:FD:5D:6F:C4:1E:0A:E1:0D:4B:64:1E:D2:BC:2F:12:2C:1B:FC --compute-resource test

, где --target указывает на адрес сервера vCenter, где установлен VIC;
-u задает логин учетной записи для подключения к серверу vCenter;
--thumbprint задает отпечаток сертификата vCenter;
--compute-resource задает имя кластера, на котором установлен VCH.

Для замены сертификата используйте команду:
vic-machine-windows.exe configure --target vc.vm.local -u administrator@vsphere.local --thumbprint 1B:00:FD:5D:6F:C4:1E:0A:E1:0D:4B:64:1E:D2:BC:2F:12:2C:1B:FC --compute-resource test --id "vm-2343" --tls-server-cert cert.pem --tls-server-key key.pem --tls-cname vch03.company.local --tls-ca ca.pem

, где --tls-server-cert указывает путь к файлу сертификата;
--tls-server-key указывает путь к закрытому ключу;
--tls-cname задает FQDN имя для сервера VCH;
--tls-ca указывает путь к сертификату УЦ.

Учтите, что при указании сертификата доверенного УЦ, автоматически выключается анонимный доступ и включается режим аутентификации Docker клиентов по сертификатам.

Это значит, что каждому Docker клиенту потребуется выдать по сертификату с закрытым ключом для доступа к VCH. Выдаваемый сертификат должен быть предназначен для аутентификации клиентов (Enhanced Key Usage: Client Authentication (1.3.6.1.5.5.7.3.2)).

Сохраните выданный сертификат на клиенте Docker (в виде файлов cert.pem и key.pem), а также сертификат УЦ (в файле ca.pem) в каталоге ~/.docker/ , либо настройте переменные окружения, указав путь к каталогу, где хранятся файлы:
export DOCKER_HOST=<IP VCH:2376>
export DOCKER_CERT_PATH=<путь к папке с cert.pem>
export DOCKER_KEY_PATH=<путь к папке с key.pem>
export DOCKER_CA_PATH=<путь к папке ca.pem>

Теперь запросы к VCH будут работать корректно.