
直接访问ESXi的Web管理界面时浏览器每次都会弹出“连接不是私密连接”的大红警告要么点“高级”继续要么干脆被安全策略拦死。这个问题看着不大但在生产环境中会带来两个实实在在的麻烦一是运维人员天天点“继续访问”养成了肌肉记忆哪天真的遇到中间人攻击也会下意识点过去二是VMware vCenter、vSphere客户端做托管或插件调用时证书不受信任会导致API通信直接报错很多自动化任务根本跑不起来。对于个人玩家或小团队来说最省钱的解决方案就是给ESXi申请一个阿里云免费SSL证书然后通过SSH或vSphere Client把证书替换上去。这套流程操作下来大约需要30到40分钟成本为零效果是浏览器地址栏直接显示小锁图标vCenter纳管也不再报证书错误。本篇文章就把我这次从申请到配置的全过程拆开讲清楚包括证书格式怎么处理、ESXi侧的命令怎么敲、替换完哪些服务必须重启、以及最常见的几个翻车点。1. 项目背景与整体方案选型1.1 为什么ESXi的HTTPS证书总是提示不安全ESXi在安装完成之后会生成一张默认的自签名证书有效期通常是825天左右。自签名证书的意思就是“自己给自己签发”证书链里根本没有CA证书颁发机构的信任锚点所以浏览器、操作系统、vCenter都不认它。还有一个容易忽略的细节ESXi生成自签名证书时如果主机名是默认的localhost或者临时IP那么证书里的Common NameCN和Subject Alternative NameSAN字段基本是“废”的。即使你手动导入信任了这张证书使用IP地址或后来修改的主机名访问时仍然会因为名称不匹配而报警。也就是说ESXi的默认HTTPS证书属于“证书不受信任”和“证书名称不匹配”双重叠加光靠改浏览器设置解决不了根本问题。1.2 阿里云免费SSL证书的适用场景与限制阿里云SSL证书服务里有一个免费版DigiCert目前是DV单域名证书申请门槛低只要你有域名并且能控制域名DNS解析记录就能在几分钟内签发下来。这里要注意免费证书的几个硬性限制只能保护一个域名不能保护通配符*.example.com下的所有子域名。签发速度很快但有效期通常是3个月以前有一年后来规则改了到期前需要续期并重新部署。只支持域名验证DV不支持企业组织验证OV或扩展验证EV所以证书详情里不会显示企业名称但对ESXi管理界面来说完全够用。对于ESXi场景来说免费DV证书保护一个管理域名比如esxi.example.com非常合适。你可以用这个域名加端口访问ESXi Web界面浏览器不再报警vCenter也能正常识别证书身份。1.3 为什么选择阿里云SSL而不是直接自建CA有人可能会问公司内部有AD域已经装好了企业CA服务器给ESXi签发一张内网证书不也行吗确实可以内网企业CA证书对于纯内网环境反而更合适因为它能和域环境联动。但如果你有以下几个需求阿里云免费证书是更好选的ESXi管理地址需要暴露到公网或者通过公网域名端口映射访问此时内网CA的信任链在外部设备上行不通。你没有搭建CA服务器的条件或者不想在内网增加任何额外的安全基础设施。希望证书能被手机、笔记本电脑、异地终端直接信任不依赖统一推送根证书。我这次选的就是“阿里云免费SSL证书 ESXi自带证书替换机制”整个方案没有新增任何组件也不涉及反向代理等额外架构纯粹靠ESXi系统本身的证书管理能力完成HTTPS证书替换后期维护非常轻量。2. 申请证书前的准备工作与域名规划2.1 域名和DNS解析准备要想让一张证书正常生效最重要的一件事就是决定用什么域名访问ESXi。计划用IP地址配合证书是不现实的因为免费证书不支持签发裸IP即使有些CA支持IP证书那也价格高、流程复杂完全没必要。所以一定要有一个域名。建议的做法是给ESXi设置一个专用子域名比如esxi.example.comesxi02.example.comvsphere.example.com申请证书之前需要先把该域名的DNS解析记录做好。如果你用IP地址直接访问ESXi那就在A记录里填ESXi的IP如果你通过域名访问内网ESXiA记录可以填内网IP如果要从外网访问并且有公网IP和端口映射就填公网IP。我在第1次部署时图省事先申请了证书再去加DNS记录结果阿里云验证时提示“DNS验证失败”。后来把A记录加好等待解析生效之后再验证不到1分钟就通过了。顺序一定要是先解析后申请。还有一个细节值得提醒如果域名DNS托管在阿里云云解析那么在阿里云SSL证书控制台的“验证”步骤里可以一键自动添加DNS记录非常省事。如果DNS托管在其他服务商则需要手动去你的DNS管理平台添加一个TXT解析记录或CNAME记录原理相同只是操作位置不同。2.2 确认ESXi版本和CPU架构整个过程涉及SSH登录和命令行操作而不同ESXi版本的证书文件路径和服务管理命令基本一致从6.x到8.x都适用。不过我强烈建议在动手前先确认一下版本因为8.0的VAMI管理服务健康状态检查和6.7的界面布局有一些差异好在我们操作的核心命令不受影响。在ESXi Web界面左侧“主机” - “管理” - “系统”页面可以用下方命令检查版本vmware -v常见的版本输出类似VMware ESXi 8.0.3 build-24022510只要是6.7及以上版本本文的命令都可以直接复制使用。6.5及更早版本我也在测试环境跑过一轮大体流程一致但部分路径有出入建议升级后再操作。2.3 准备SSH登录工具和证书上传方式ESXi默认关闭SSH需要在Web界面里临时打开。准备一个SSH客户端Windows上可以用PowerShell自带的ssh命令Linux/macOS直接用终端再准备一个SFTP文件传输工具比如WinSCP或FileZilla用于把证书文件上传到ESXi。有人可能会问直接用vSphere Client的证书管理功能上传证书不就行了吗理论上8.0版本支持在“管理 - 证书”界面直接替换但实际操作中导入PEM证书时经常遇到格式校验不通过的问题而且上传后需要重启主机管理服务才能生效控制台操作反而不如命令行直观。所以我还是沿用老办法SSH命令行替换可控性最强。关于文件上传还有个本地技巧阿里云下载的证书是一组文件不是单个文件。我们需要把它们合并处理然后统一放到一个临时目录里。下文会给出完整操作。3. 阿里云免费SSL证书申请实操3.1 定位申请入口与选择证书规格登录阿里云控制台在顶部搜索框输入“SSL证书”进入“数字证书管理服务”控制台。界面改版过几次但核心逻辑没变。选择“证书申请”或“SSL证书”菜单点击“申请证书”按钮。在证书规格选择上注意选“免费证书个人测试”有些账号会有“免费证书扩容”或“证书资源包”等选项注意别选成付费的。申请时需要填写的关键信息配置项建议值说明证书类型单域名免费版只支持单域名域名esxi.example.com填写你解析好的完整域名验证方式DNS验证后期可通过云解析一键添加记录联系人邮箱可用邮箱用于接收到期提醒CSR生成方式系统自动生成不需要自己生成CSR免费版直接由系统生成这里需要注意一点系统自动生成的CSR意味着私钥保留在阿里云的证书服务端下载证书时会附带对应的私钥文件。自己生成CSR的方式在免费证书里基本用不到也不建议用因为自己生成的CSR和阿里云签发的证书匹配性虽然在技术不成问题但对于“无脑快速部署”的诉求来说默认自动生成最简单。3.2 DNS验证的两种操作路径提交申请后证书状态会变更为“待验证”或“验证中”。点击“验证”阿里云会给出两条验证方式方式一自动DNS验证如果域名DNS托管在阿里云云解析控制台会有一个“自动添加DNS记录”按钮点击后阿里云自动在你的域名解析列表里新增一条TXT记录然后等待CA验证通常10分钟内完成。方式二手动DNS验证如果DNS在其他服务商则需要把控制台展示的“主机记录”和“记录值”复制下来去DNS服务商平台手动添加一条TXT解析。添加后约5到10分钟生效回到阿里云控制台点击“验证”按钮即可。我在实际操作中遇到过一个问题手动添加TXT记录后点击验证提示“验证失败未检测到正确记录”。排查了DNS确实生效也没问题后来发现是验证节点有缓存多等了几分钟再点就好了。所以如果第一次验证失败不要着急重新申请先确认TXT记录值有没有填错再等时间刷新。3.3 下载证书并解压检查文件结构证书签发成功后状态变为“已签发”在证书列表中点击“下载”选择对应的服务器类型实际上不同服务器类型的证书文件内容一样只是格式封装略有不同。下载下来的压缩包里通常包含以下文件esxi.example.com.pem证书文件也常命名为cert.pemesxi.example.com.key私钥文件也常命名为key.pemesxi.example.com_chain.pem中间证书链文件有的版本叫chain.pemesxi.example.com_fullchain.pem完整证书链文件证书中间证书有的叫fullchain.pemESXi在配置证书时需要的是“证书文件”和“私钥文件”两个部分而且证书文件里最好包含完整的证书链即把服务器证书和中间证书合并在一起。如果只放入单独的pem而缺少中间证书ESXi虽然能配置成功但有些客户端在验证时仍会报警“证书链不完整”。为了稳妥我建议直接用fullchain.pem作为证书文件同时用key.pem作为私钥文件。如果阿里云下载的包里没有fullchain文件可以用cat命令手动合并cat esxi.example.com.pem esxi.example.com_chain.pem esxi.example.com_fullchain.pem好证书申请和下载这一步就完成了。接下来是重头戏——ESXi侧如何把默认证书替换成这张新证书。4. ESXi侧HTTPS证书配置全流程4.1 开启SSH并登录ESXi主机在vSphere Client或直接浏览器访问ESXi Web界面进入“主机 - 服务”找到“SSH”和“ESXi Shell”两个服务点击“启动”。如果用root账号直接SSH登录在ESXi 7.0之后默认策略只允许root在控制台登录SSH登录需要额外授权。不过实际测试中如果ESXi处于评估模式或未加入域环境root通过SSH登录一般没问题。如果提示“Permission denied”进入Web界面的“主机 - 管理 - 安全与用户 - 用户”确认root用户没有被锁。登录命令ssh root192.168.1.100登录后建议先确认当前证书状态esxcli system security cert list这个命令会列出当前使用的证书文件、私钥文件位置以及证书的指纹信息。替换前可以先把这个信息截图或记录下来方便后续对比确认是否替换成功。4.2 备份原有证书和私钥替换证书前一定要备份。ESXi默认的证书路径是/etc/vmware/ssl/rui.crt # 证书文件 /etc/vmware/ssl/rui.key # 私钥文件备份命令cp /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.bak.$(date %Y%m%d) cp /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.bak.$(date %Y%m%d)把备份文件留在原目录的好处是如果后续证书替换出错可以快速通过命令行恢复不用重新安装系统或重置配置。4.3 上传新证书和私钥到临时目录用WinSCP或scp命令把刚才下载的fullchain文件和key文件上传到ESXi的/tmp目录方便后续复制。例如上传到/tmp/cert/下mkdir -p /tmp/cert然后在本地电脑上执行注意SFTP路径scp /path/to/esxi.example.com_fullchain.pem root192.168.1.100:/tmp/cert/ scp /path/to/esxi.example.com.key root192.168.1.100:/tmp/cert/如果本机没有scp命令直接使用WinSCP图形化拖拽上传也可以文件权限后续通过命令行调整。上传完毕后在ESXi上检查文件是否完整ls -l /tmp/cert/同时用openssl命令确认证书和私钥的匹配度openssl x509 -in /tmp/cert/esxi.example.com_fullchain.pem -noout -modulus | md5sum openssl rsa -in /tmp/cert/esxi.example.com.key -noout -modulus | md5sum两个命令输出的md5值应完全一致如果不一样说明你下载的证书文件和私钥文件不匹配直接替换的话ESXi服务会无法启动千万不要继续。4.4 正式替换证书并设置权限这一步是整个流程的核心。先把新证书和私钥复制到ESXi的ssl目录下cp /tmp/cert/esxi.example.com_fullchain.pem /etc/vmware/ssl/rui.crt cp /tmp/cert/esxi.example.com.key /etc/vmware/ssl/rui.key然后设置文件权限证书文件建议600私钥文件必须600或400chmod 600 /etc/vmware/ssl/rui.crt chmod 600 /etc/vmware/ssl/rui.key chown root:root /etc/vmware/ssl/rui.crt chown root:root /etc/vmware/ssl/rui.key权限这一步特别容易漏。ESXi对证书文件的权限检查很严格如果权限过宽服务重启时可能会因为“unsafe permissions”而拒绝读取导致HTTPS服务无法启动。我第一次部署时没改权限重启hostd之后一直提示证书加载失败查日志才发现是权限问题。4.5 重启管理服务使证书生效替换证书后必须重启ESXi的管理服务。常见做法是重启两个守护进程/etc/init.d/hostd restart /etc/init.d/vpxa restart如果有vCenter纳管vpxa服务是必重启的如果只是独立ESXi至少重启hostd。另外hostd重启的瞬间会断开你当前的SSH会话吗不会SSH和hostd是不同进程但Web界面会短暂断开十几秒到几十秒这是正常现象。也有人会直接重启整个ESXi主机效果一样但生产环境不建议因为ESXi上的虚拟机会跟着一起重启影响面太大。所以优先选择重启服务。4.6 验证HTTPS证书是否生效等待服务重启完成后新开一个浏览器窗口访问https://esxi.example.com注意这里必须使用你申请证书时的域名而不是IP地址。如果浏览器显示小锁图标说明证书生效。如果不放心可以用openssl命令在线检查openssl s_client -connect esxi.example.com:443 -servername esxi.example.com -showcerts /dev/null 2/dev/null | openssl x509 -noout -subject -dates输出会显示证书的Subject和有效期确认Subject里面有你申请的域名即可。另外在vSphere Client的“主机 - 证书”页面也可以看到更新时间变成了当天的日期指纹信息也变化了。4.7 如果一定要用IP地址访问而不想报警这一点我必须单独说明申请阿里云免费DV证书的前提是你必须用域名访问ESXi这没有问题。但很多人在家里用内网IP访问ESXi习惯直接敲https://192.168.x.x即使证书更换后浏览器依然会提示“该证书不是有效的因为它的名字与该站点名不匹配”。解决办法两个一是坚持用域名访问在内网DNS或路由器的DNS里加一条解析把esxi.example.com解析到内网IP就可以在浏览器里用域名访问了。二是在ESXi的“管理 - 高级系统设置”里调整Security.HostCertificateConfig或类似参数允许IP地址访问的告警豁免。这个方案不太推荐容易掩盖真实异常。更推荐的方案是平时内网访问直接用域名IP访问留给紧急情况。5. 常见问题与排查技巧实录5.1 证书替换后浏览器仍然报错这是我被问得最多的问题而绝大多数情况下并不是证书没有替换成功而是访问地址仍然用IP。换个域名访问后问题立刻消失。如果确定已经用域名访问但仍然报错检查三件事证书文件里是否包含完整证书链openssl x509 -in /etc/vmware/ssl/rui.crt -text | grep -A 10 Certificate Chain看一下是否有中间证书。证书和私钥是否匹配按上文第4.3小节的md5校验方法跑一遍。服务的证书缓存是否清除重启hostd后浏览器有时还会缓存旧证书换个无痕窗口再访问一次。5.2 重启service后管理界面完全打不开如果执行/etc/init.d/hostd restart之后发现Web界面始终连接不上大概率是证书格式有问题。用SSH登录ESXi主机查看服务状态/etc/init.d/hostd status如果显示failed检查日志tail -n 100 /var/log/hostd.log日志里出现SSL或certificate关键字时把证书目录恢复成备份然后再次重启服务恢复访问cp /etc/vmware/ssl/rui.crt.bak.* /etc/vmware/ssl/rui.crt cp /etc/vmware/ssl/rui.key.bak.* /etc/vmware/ssl/rui.key /etc/init.d/hostd restart这个恢复办法在实际排障里非常实用所以再次强调第一步的备份是保命操作不可跳过。5.3 免费证书3个月到期后如何平滑续期阿里云免费证书现在的有效期是3个月到期前一周控制台会有邮件和短信提醒。续期操作其实很简单到阿里云SSL证书控制台签发一张新证书域名不变时一般不用重新验证点击“续期绑定”即可。下载新证书重新走一遍第3和第4章节的替换流程。有人问能不能不重启ESXi就自动加载新证书答案是不行ESXi的证书加载机制不支持热更新必须重启hostd服务。但相比公网证书每年换一次的频率3个月一次的维护成本稍微有点高这里提供两个实际建议在日历里设置一个“证书续期提醒”提前一周提醒自己避免到期之后发现访问管理界面已经进不去了。如果你真的很反感频繁续期可以考虑在ESXi前面加一层反向代理比如Nginx把HTTPS证书终止在反向代理层由Nginx统一管理证书续期ESXi只监听内网地址。但这套架构会引入新组件和网络配置复杂度对于只有一台ESXi的小环境来说反而更麻烦。5.4 “ESXi主机证书状态”在vCenter里仍显示未知在vCenter中纳管ESXi时主机“证书状态”列显示“未知”或“已警示”。这有两个可能一个是ESXi已经替换了新证书但vCenter还未重新采集指纹。右键主机 - “重新连接”或“刷新证书”即可。另一个是vCenter的信任根存储里没有阿里云中间CA的证书。遇到这种情况把阿里云的中间证书链导入vCenter的可信根证书目录问题即可解除。实际上只要浏览器能正常访问HTTPSvCenter这边绝大多数是缓存或重新连接的问题不必过度惊慌。5.5 给相似场景的额外建议同一个域名存在多个ESXi主机怎么办如果你的环境里有多台ESXi最省事的做法是每台主机使用不同的子域名比如esxi01、esxi02各自申请一张免费证书。因为免费版不支持多域名或通配符这样做虽然证书数量多点但每张证书独立续期和管理互不影响排查问题也方便。如果偏要省证书一般是用付费通配符证书覆盖所有子域名。对于个人环境而言我还是建议免费证书加多子域名的方案反正续期流程走顺了也就几分钟。写在最后的实操体会第1次给ESXi配置HTTPS证书时我在“证书链合并”和“权限设置”两个地方卡了最久后来把流程固化下来其实总共需要敲的命令不超过20条。如果你之前只是靠浏览器“继续访问”凑合强烈建议花一点时间把这套配置做完安全姿态和运维体验都会提升一个台阶。最后再分享一个细节ESXi Web界面右上角如果显示“主机证书状态未知”点进去“管理 - 证书”页面选择“续订”或“重新生成”时系统会提示你确认回调地址。此时用你申请证书的域名访问并使用此域名作为回调地址证书验证链路就完全一致了。这个操作在新版本里对消除界面告警很有效值得一试。