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
Ошибки должны уйти.