首页 > 解决方案 > 对 Azure ubuntu 虚拟机的 HTTPS 访问

问题描述

我有一个在 Microsoft azure 上运行的 Ubuntu VM。目前我可以使用 HTTP 访问它,但不能使用 HTTPS。在网络接口,入站端口规则,443 已经被允许。

我已经在虚拟机中添加了一个证书,通过创建一个密钥库和一个证书,按照本文档准备部署:

az keyvault update -n <keyvaultname> -g <resourcegroupname> --set properties.enabledForDeployment=true

然后在这个答案之后添加了证书。

在 Azure CLI 中:

$secret=$(az keyvault secret list-versions \
          --vault-name <keyvaultname> \
          --name <certname> \
          --query "[?attributes.enabled].id" --output tsv)
$vm_secret=$(az vm secret format --secret "$secret")

az vm update -n <vmname> -g <keyvaultname> --set osProfile.secrets="$vm_secret"

我收到以下错误:

Unable to build a model: Cannot deserialize as [VaultSecretGroup] an object of type <class 'str'>, DeserializationError: Cannot deserialize as [VaultSecretGroup] an object of type <class 'str'>

但是,当我az vm show -g <resourcegroupname> -n <vmname>在那之后,在 中osProfile,秘密已经包含我添加的秘密

"secrets": [
      {
        "sourceVault": {
          "id": "/subscriptions/<subsID>/resourceGroups/<resourcegroupName>/providers/Microsoft.KeyVault/vaults/sit-key-vault"
        },
        "vaultCertificates": [
          {
            "certificateStore": null,
            "certificateUrl": "https://<keyvaultname>.vault.azure.net/secrets/<certname>/<certhash>"
          }
        ]
      }
    ],

使用 HTTPS 访问时,我失败了。我可以使用 HTTP 访问它,但 chrome 仍然在地址旁边显示“不安全”标记。

我错过了什么?

我还检查了类似问题的答案,但在 VM 控制面板页面的任何地方都找不到“启用直接服务器返回”。

标签: azuresslhttps

解决方案


据我所知,我们可以按照以下步骤为 nginx 服务器配置 SSL。

  1. 添加 SSL 证书

    $secret=$(az keyvault secret list-versions --vault-name "keyvault_name" --name "cert name" --query "[?attributes.enabled].id" --output tsv)

    $vm_secret=$(az vm 密钥格式 --secrets "$secret")

    az vm update -n “虚拟机名称” -g “资源组名称” --set osProfile.secrets="$vm_secret"

  2. 安装 Nginx

    sudo apt-get 更新

    sudo apt-get 安装 nginx

  3. 配置 SSL 证书

     #get cert name
     find /var/lib/waagent/ -name "*.prv" | cut -c -57
    
     #paste cert
     mkdir /etc/nginx/ssl
     cp “your cert name” /etc/nginx/ssl/mycert.cer
     cp “your cert name” /etc/nginx/ssl/mycert.prv
    
     #change nginx configuration file
     sudo nano /etc/nginx/sites-available/default
     PS: add the next content in the file
     server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/mycert.cert;
        ssl_certificate_key /etc/nginx/ssl/mycert.prv;
               }
      service nginx restart
    

推荐阅读