Konfigurera certifikat för Azure CLI på Azure Stack Hub eller Azure Stack Development Kit

Följ stegen i den här artikeln för att konfigurera Azure Command-Line Interface (CLI) för att hantera Azure Stack Development Kit-resurser (ASDK) från Linux-, Mac- och Windows-klientplattformar. Du kan också följa dessa steg om du använder ett integrerat system Azure Stack Hub i en frånkopplad miljö eller om dina certifikat inte utfärdas av en certifikatutfärdare i programmet för betrodda rötter.

Den här artikeln beskriver hur du hämtar dina certifikat och litar på dem på fjärrhanteringsdatorn. Information om hur du installerar Azure CLI och ansluter till din miljö finns i Installera Azure CLI på Azure Stack Hub.

Förbereda för Azure CLI

Du behöver CA-rotcertifikatet för Azure Stack Hub för att kunna använda Azure CLI på utvecklingsdatorn. Du använder certifikatet för att hantera resurser via CLI.

  • Azure Stack Hub CA-rotcertifikatet krävs om du använder CLI från en arbetsstation utanför Azure Stack Hub-miljön.

  • Den virtuella datorns aliasslutpunkt tillhandahåller ett alias, till exempel "UbuntuLTS" eller "Win2012Datacenter". Det här aliaset refererar till en avbildningsutgivare, ett erbjudande, en SKU och en version som en enda parameter när du distribuerar virtuella datorer.

I följande avsnitt beskrivs hur du hämtar dessa värden.

Exportera rotcertifikatet för Azure Stack Hub CA

Exportera ca-rotcertifikatet. Så här exporterar du ASDK-rotcertifikatet i PEM-format:

  1. Hämta namnet på rotcertifikatet för Azure Stack Hub:

    1. Logga in på Azure Stack Hub-användaren eller Azure Stack Hub-administratörsportalen.
    2. Välj låset i webbläsarens adressfält.
    3. I popup-fönstret väljer du Anslutning är säker.
    4. I fönstret Certifikat väljer du fliken Certifieringssökväg .
    5. Anteckna namnet på rotcertifikatet för Azure Stack Hub, till exempel *.<locale>.<FQDN>

    Rotcertifikat för Azure Stack Hub

  2. Skapa en virtuell Windows-dator på Azure Stack Hub.

  3. Logga in på den virtuella datorn, öppna en upphöjd PowerShell-prompt och kör sedan följande skript:

      $label = "*.<locale>.<FQDN> from step 1"
      Write-Host "Getting certificate from the current user trusted store with subject CN=$label"
      $root = Get-ChildItem Cert:\CurrentUser\Root | Where-Object Subject -eq "CN=$label" | select -First 1
      if (-not $root)
      {
          Write-Error "Certificate with subject CN=$label not found"
          return
      }
    
    Write-Host "Exporting certificate"
    Export-Certificate -Type CERT -FilePath root.cer -Cert $root
    
  4. För Linux krävs även följande kommando:

    export REQUESTS_CA_BUNDLE=~/.local/lib/python3.9/site-packages/certifi/cacert.pem
    # RECOMMENDED: set the env var automatically for your subsequent sessions
    echo 'export REQUESTS_CA_BUNDLE=~/.local/lib/python3.9/site-packages/certifi/cacert.pem' >> ~/.bash_profile
    
  5. Kopiera certifikatet till den lokala datorn.

Konfigurera den virtuella datorns aliasslutpunkt

Du kan konfigurera en offentligt tillgänglig slutpunkt som är värd för en VM-aliasfil. Vm-aliasfilen är en JSON-fil som ger ett eget namn för en avbildning. Du använder namnet när du distribuerar en virtuell dator som en Azure CLI-parameter.

  1. Om du publicerar en anpassad avbildning noterar du utgivaren, erbjudandet, SKU:n och versionsinformationen som du angav under publiceringen. Om det är en avbildning från Marketplace kan du visa informationen med hjälp av cmdleten Get-AzureVMImage .

  2. Ladda ned exempelfilen från GitHub.

  3. Skapa ett lagringskonto i Azure Stack Hub. När det är klart skapar du en blobcontainer. Ange åtkomstprincipen till "offentlig".

  4. Ladda upp JSON-filen till den nya containern. När det är klart kan du visa blobens URL. Välj blobnamnet och välj sedan URL:en från blobegenskaperna.

Lita på certifikatet

Om du vill använda Azure CLI med ASDK måste du lita på CA-rotcertifikatet på fjärrdatorn.

  1. Hitta certifikatplatsen på datorn. Platsen kan variera beroende på var du har installerat Python.

  2. Om du vill hitta platsen öppnar du en CMD-prompt eller en upphöjd PowerShell-prompt och skriver: az --version. Platsen version och python visas i prompten.

    azure-cli                         2.30.0
    
    core                              2.30.0
    telemetry                          1.0.6
    
    Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'
    Extensions directory 'C:\Users\username\.azure\cliextensions'
    
    Python (Windows) 3.8.9 (tags/v3.8.9:a743f81, Apr  6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
    
    Legal docs and information: aka.ms/AzureCliLegal
    
    Your CLI is up-to-date.
    
    Please let us know how we are doing: https://aka.ms/azureclihats
    and let us know if you're interested in trying out our newest features: https://aka.ms/CLIUXstudy
    
  3. Ändra till katalogen där Azure CLI har installerat Python. Du kan till exempel använda platsen i steg 2, cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\.

  4. Ange följande kommando:

    .\python -c "import certifi; print(certifi.where())"
    

    Då returneras sökvägen till certifikatplatsen på datorn. Din specifika sökväg beror på operativsystemet och vilken version av Python du har installerat. Exempel:

    C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
    

    Anteckna certifikatplatsen. Du kommer att använda sökvägen i nästa steg.

  5. Lita på Azure Stack Hub CA-rotcertifikatet genom att lägga till det i det befintliga Python-certifikatet.

    $cerFile = "<Fully qualified path to the cer certificate exported from `
    your Azure Stack Hub and saved. For example: C:\Users\user1\Downloads\root.cer"
    $pythonCertStore = <result from step 4>
    
    $cerDir = Split-Path -Parent $cerFile
    $pemFile = "$cerDir\root.pem"
    Write-Host "Converting certificate to PEM format at $pemFile"
    certutil -encode $cerFile $pemFile
    $root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
    $root.Import($pemFile)
    
    # X509Certificate2.Thumbprint calculates SHA1 hash of the public key. You can get sha1 of the pem file by using openssl, 
    # e.g. openssl x509 -noout -fingerprint -sha1 -inform pem -in ./root.pem
    # Alternatively, 'Get-FileHash' gives the same value (without ':') for the corresponding cer file
    # Since the thumbprint is a unique value for the certificate, it is commonly used to find a particular certificate in a certificate store
    Write-Host "Extracting required information from the cert file"
    $md5Hash    = (Get-FileHash -Path $cerFile -Algorithm MD5).Hash.ToLower()
    $sha1Hash   = (Get-FileHash -Path $cerFile -Algorithm SHA1).Hash.ToLower()
    $sha256Hash = (Get-FileHash -Path $cerFile -Algorithm SHA256).Hash.ToLower()
    
    $issuerEntry  = [string]::Format("# Issuer: {0}", $root.Issuer)
    $subjectEntry = [string]::Format("# Subject: {0}", $root.Subject)
    $labelEntry   = [string]::Format("# Label: {0}", $root.Subject.Split('=')[-1])
    $serialEntry  = [string]::Format("# Serial: {0}", $root.GetSerialNumberString().ToLower())
    $md5Entry     = [string]::Format("# MD5 Fingerprint: {0}", $md5Hash)
    $sha1Entry    = [string]::Format("# SHA1 Fingerprint: {0}", $sha1Hash)
    $sha256Entry  = [string]::Format("# SHA256 Fingerprint: {0}", $sha256Hash)
    $certText = (Get-Content -Path $pemFile -Raw).ToString().Replace("`r`n","`n")
    
    $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + `
    $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText
    
    Write-Host "Adding the certificate content to Python Cert store"
    Add-Content $pythonCertStore $rootCertEntry
    
    Write-Host "Python Cert store was updated to allow the Azure Stack Hub CA root certificate"
    

Anvisningar om hur du installerar och ansluter med Azure CLI finns i Installera Azure CLI på Azure Stack Hub.

Nästa steg

Installera Azure CLI på Azure Stack Hub