SSL сертификаты в ESXi | VMware

По умолчанию при установке ESXi генерит самоподписанные сертификаты и при соединении с хостом мы получаем предложение установить сертификат и ошибку при подключении в CLI:

#connect-viserver servername.com

WARNING: There were one or more problems with the server certificate: 
* The X509 chain could not be built up to the root certificate. 
The certificate's CN name does not match the passed value. 

При коннекте через vShere Client – ставим галочку и нажимаем кнопку Ignore – непрвильный сертификат установится и больше беспокоить не будет.

Для того чтобы сгенерить новые сертификаты достаточно зайти на хост ESXi по ssh и запустить команду:

#/sbin/generate_сertificates.sh

Однако перед этим необходимо дать хосту FQDN и прописать в зоне DNS.
Итак имя хоста задали (это можно сделать в консоли ESXi или по ssh или через vShere Client), в ДНС прописали. Теперь подключаемся к хосту по ssh и делаем generate_сertificates.sh. Перезагружаемся.

После этого при подлкючении уйдёт ошибка:

The certificate's CN name does not match the passed value.

Теперь можно попытаться побороть ошибку:

* The X509 chain could not be built up to the root certificate.

Для этого надо сгенерить ключ, запрос на подпись и подписать запрос у авторизованного CA. Если подписывать самоподписанным – смысла нет – проще сгенерить автоматом (см выше).

Генерим ключ:

#cd /etc/vmware/ssl
#openssl genrsa 1024 > rui.key

Или так:

#cd /etc/vmware/ssl
#openssl genrsa -des3 -rand /dev/urandom -out rui.key 1024

Далее генерим запрос на подпись:

#openssl req -new -key rui.key > rui.csr

При этом получим ругань на то что у нас нет файла конфигурации:

/etc/pki/tls/openssl.conf

Более того на ESXi нет и директорий pki и tls. Создаём.

#mkdir /etc/pki
#mkdir /etc/pki/tls

Далее создаём файл и редактируем в vi

#touch /etc/pki/tls/openssl.conf

Или (что проще) через vShere Client подключаемся к хосту, поключаем сетевой диск (NFS, samba) копируем на этот диск уже готовый конфиг. В конфиге должно быть следующее:

[ req ]
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = RU
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Moscow
localityName                    = Locality Name (eg, city)
localityName_default            = Moscow
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = IT Dep
organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = 
commonName                      = *.server.net
commonName_max                  = 64
emailAddress                    = info@server.net
emailAddress_max                = 64

Копируем конфиг из сетевой папки:

#cp /vmfs/volumes/your-directory/openssl.cnf /etc/pki/tls/openssl.cnf

Снова пробуем сгененрить запрос, всё должно пройти нормально – задаст вопросы. отвечаем как обычно, не забываем про важность CN – имя должно совпадать с именем хоста:

#openssl req -new -key rui.key > rui.csr

или стандартно:

#openssl req -new -key rui.key -out rui.csr

Далее копируем запрос в сетевую папку и подписываем корневым сертификатом или отсылаем в сертификационную службу на подпись.

Ещё один вариант – если у вас есть подписанный валидный сертификат – можете просто положить его в директорию /etc/vmware/ssl в файлы rui.key и rui.crt

Если у вас есть сертификат в формате pkcs12 с расширением .pfx извлекаем из него нужные нам ключ и сертификат:

Копируем pfx файл на хост esxi:

#cp /vmfs/volumes/pub/cert.pfx /etc/vmware/ssl/tec.pfx

Извлекаем сертификат:

#openssl pkcs12 -in filename.pfx -clcerts -nokeys -out rui.crt
Извлекаем ключ:

#openssl pkcs12 -in filename.pfx -nocerts -out key.pem

Убираем парольную фразу:

#openssl rsa -in key.pem -out rui.key

В результате получим рабочие ключ и сертификат. Проверяем через CLI:

#connect-viserver servername.com

Ошибки должны уйти.