如何为Azure容器实例绑定SSL证书以启用443端口访问
绑定SSL证书到Azure容器实例(Linux)实现443端口访问
嗨,我来帮你一步步搞定把SSL证书绑定到已运行的Linux容器实例这件事,咱们分步骤来:
一、准备工作
首先得确保你的SSL证书符合ACI的要求,并且存放在Azure Key Vault里:
- 转换证书格式:ACI只支持PFX格式的证书,如果你的证书是PEM格式(比如
.crt和.key文件),可以用openssl转换成PFX:
执行时会要求你设置一个PFX密码,记好这个密码,后面会用到。openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt - 上传证书到Azure Key Vault:
- 如果还没有Key Vault,先创建一个:
az keyvault create --name <你的Key Vault名称> --resource-group <资源组名> --location <区域,比如eastus> - 上传PFX证书到Key Vault:
az keyvault certificate import --vault-name <Key Vault名称> --name <证书在KV里的名称> --file certificate.pfx --password <你的PFX密码> - 给Key Vault启用“允许Azure资源部署访问”:在Key Vault的「访问策略」里,添加一条策略,授予容器实例的系统分配身份(或者你指定的服务主体)“获取”证书的权限;如果你的账号有足够权限,后续CLI操作也会自动处理这个权限配置。
- 如果还没有Key Vault,先创建一个:
二、更新现有容器实例绑定证书
如果你想直接在已运行的容器实例上修改,用Azure CLI的az container update命令:
az container update \ --resource-group <你的资源组名> \ --name <现有容器实例名> \ --ports 80 443 \ --ip-address Public \ --ssl-certificate <Key Vault里的证书名称> \ --ssl-certificate-key-vault <Key Vault的资源ID> \ --ssl-certificate-key-vault-password <你的PFX密码>
参数说明:
--ports 80 443:保留原有的80端口,同时开启443端口--ssl-certificate:Key Vault中存储的证书名称--ssl-certificate-key-vault:Key Vault的资源ID,可以用az keyvault show --name <KV名称> --query id -o tsv获取
三、(可选)重新创建容器实例绑定证书
如果更新遇到问题,或者你想重新部署,用az container create命令,加上证书相关参数:
az container create \ --resource-group <你的资源组名> \ --name <新的容器实例名> \ --image <ACR镜像地址,比如youracr.azurecr.io/nodeapp:latest> \ --registry-login-server <ACR登录服务器,比如youracr.azurecr.io> \ --registry-username <ACR用户名> \ --registry-password <ACR密码> \ --ports 80 443 \ --ip-address Public \ --dns-name-label <你的DNS前缀,比如my-node-app> \ --ssl-certificate <Key Vault证书名> \ --ssl-certificate-key-vault <Key Vault资源ID> \ --ssl-certificate-key-vault-password <PFX密码>
这里加了--dns-name-label,可以生成一个固定的DNS名称(比如my-node-app.eastus.azurecontainer.io),避免动态IP变化带来的麻烦。
四、验证配置
部署完成后,做以下检查:
- 查看容器实例状态:
az container show --resource-group <资源组名> --name <容器实例名> --query "{status:instanceView.state, ip:ipAddress.ip, fqdn:ipAddress.fqdn}" -o table - 访问
https://<容器实例IP>或者https://<你的FQDN>,确认443端口正常访问,浏览器显示证书有效。
重要注意事项
- SSL终止在ACI层:你的Node.js应用不需要修改,继续监听80端口即可。ACI会在443端口处理SSL加密,然后把明文请求转发到容器的80端口。
- 静态IP设置:如果需要固定IP,在创建/更新ACI时加上
--ip-address Public --dns-name-label <前缀>,这样会分配一个静态IP和FQDN。 - 权限问题:如果ACI无法读取Key Vault的证书,检查Key Vault的访问策略,确保容器实例的身份有“获取”证书的权限。
内容的提问来源于stack exchange,提问作者Bala krishna
相关产品推荐
相关产品推荐

