Crie uma CA subordinada a partir de uma CA externa

Esta página descreve como criar uma autoridade de certificação (AC) subordinada que se encadeia a uma AC de raiz externa.

Se tiver uma hierarquia de infraestrutura de chave pública (PKI) existente que contenha uma AC raiz e ACs subordinadas, pode manter a mesma AC raiz e criar uma AC subordinada no serviço de AC que se encadeia até à sua AC raiz externa. A chave e as operações da AC raiz externa permanecem fora do Google Cloud. Só pode usar a AC de raiz externa para emitir o certificado da AC subordinada para Google Cloud. A CA subordinada é imediatamente considerada fidedigna por qualquer carga de trabalho que considere fidedigna a CA raiz externa. Em seguida, pode usar a AC subordinada para emitir certificados sem ter de contactar a AC raiz externa no momento da execução.

Antes de começar

  • Certifique-se de que tem a função do IAM de gestor de operações do serviço de AC (roles/privateca.caManager) ou administrador do serviço de AC (roles/privateca.admin). Para mais informações, consulte o artigo Configure políticas de IAM.
  • Identifique a AC de raiz externa.
  • Defina o nome, o assunto, o período de validade e o tamanho da chave para a AC subordinada. Para mais informações, consulte o artigo Determine CA Settings.

Crie uma CA subordinada a partir de uma CA externa

A criação de uma CA subordinada a partir de uma CA externa envolve os seguintes passos:

  1. Gere o pedido de assinatura de certificado (CSR) da AC subordinada: o primeiro passo é gerar um CSR para a AC subordinada e, em seguida, transferir o CSR.

  2. Obtenha o certificado da AC subordinada assinado pela AC de raiz externa: o segundo passo é enviar o CSR para a AC de raiz externa para assinatura. Certifique-se de que segue as instruções específicas da AC de raiz externa para enviar CSRs e obter certificados assinados.

  3. Importe o certificado da AC subordinada assinado para o serviço de AC: o passo final consiste em carregar a cadeia de certificados PEM assinada através da CLI do Google Cloud ou da Google Cloud consola.

A secção seguinte mostra como criar uma AC subordinada a partir de uma AC raiz externa.

Crie um CSR

Consola

  1. Aceda ao menu Segurança > Serviço de autoridade de certificação na Google Cloud consola.

    Aceda ao serviço de autoridade de certificação

  2. Clique no separador Gestor de AC.

  3. Clique em Criar AC.

Selecione o tipo de AC:

  1. Clique em CA subordinado.
  2. No campo Válido durante, introduza a duração durante a qual quer que os certificados emitidos pelo certificado da CA sejam válidos.
  3. Clique em A AC de raiz é externa.
  4. Escolha uma das opções disponíveis para o Nível da CA. Para mais informações, consulte Selecione os níveis de operações.
  5. Em Regionalização, selecione uma localização de CA na lista.
  6. Clicar em Seguinte.
Configure o nome do assunto da AC
  1. No campo Organização (O), introduza o nome da sua empresa.
  2. Opcional: no campo Unidade organizacional (UO), introduza a subdivisão da empresa ou a unidade empresarial.
  3. Opcional: no campo Nome do país (C), introduza um código do país de duas letras.
  4. Opcional: no campo Nome do estado ou da província, introduza o nome do seu estado.
  5. Opcional: no campo Nome da localidade, introduza o nome da sua cidade.
  6. No campo Nome comum (CN) da AC, introduza o nome da AC.
  7. Clique em Continuar.
Configure o tamanho da chave e o algoritmo da AC
  1. Escolha o algoritmo de chave que melhor se adapta às suas necessidades. Para obter informações sobre como decidir o algoritmo de chave adequado, consulte Escolha um algoritmo de chave.
  2. Clique em Continuar.
Configure artefactos da CA
  1. Escolha se quer usar um contentor do Cloud Storage gerido pela Google ou pelo cliente.
    1. Para um contentor do Cloud Storage gerido pela Google, o serviço de AC cria um contentor gerido pela Google na mesma localização que a AC.
    2. Para um contentor do Cloud Storage gerido pelo cliente, clique em Procurar e selecione um dos contentores do Cloud Storage existentes.
  2. Clique em Continuar.
Adicione etiquetas

Os passos seguintes são opcionais.

Se quiser adicionar etiquetas à CA, faça o seguinte:

  1. Clique em Adicionar item.
  2. No campo Chave 1, introduza a chave da etiqueta.
  3. No campo Valor 1, introduza o valor da etiqueta.
  4. Se quiser adicionar outra etiqueta, clique em Adicionar item. Em seguida, adicione a chave e o valor da etiqueta, conforme mencionado nos passos 2 e 3.
  5. Clique em Continuar.
Reveja as definições

Reveja cuidadosamente todas as definições e, de seguida, clique em Concluído para criar a CA.

Transfira o CSR

  1. Na página Autoridade de certificação, selecione a CA que quer ativar.
  2. Clique em Ativar.
  3. Na caixa de diálogo apresentada, clique em Transferir CSR.

    Transfira o CSR da AC.

gcloud

  1. Para criar um conjunto de ACs para a AC subordinada, execute o seguinte comando. Para mais informações, consulte o artigo Crie um conjunto de CA.

    gcloud privateca pools create SUBORDINATE_POOL_ID --location=LOCATION
    

    Substitua o seguinte:

    • SUBORDINATE_POOL_ID: o nome do grupo de ACs.
    • LOCATION: a localização do grupo de ACs.
  2. Para criar uma AC subordinada no conjunto de ACs criado, execute o seguinte comando gcloud. O comando gcloud também cria um CSR e guarda-o no ficheiro FILE_NAME.

      gcloud privateca subordinates create SUBORDINATE_CA_ID \
          --pool=SUBORDINATE_POOL_ID \
          --location=LOCATION \
          --create-csr --csr-output-file=FILE_NAME \
          --key-algorithm="ec-p256-sha256" \
          --subject="CN=Example Server TLS CA, O=Example LLC"
    

    Substitua o seguinte:

    • SUBORDINATE_CA_ID: o identificador exclusivo da AC subordinada.
    • SUBORDINATE_POOL_ID: o nome do grupo de ACs.
    • LOCATION: a localização do grupo de ACs.
    • FILE_NAME: o nome do ficheiro onde o CSR codificado em PEM é escrito.

    A flag --key-algorithm usa o algoritmo criptográfico que quer usar para criar uma chave do Cloud HSM gerida para a CA.

    A flag --subject usa o nome X.501 do assunto do certificado.

    Para mais informações sobre o comando gcloud privateca subordinates create, consulte gcloud privateca subordinates create.

A seguinte declaração é devolvida quando o pedido de assinatura de certificado é criado:

Created Certificate Authority [projects/my-project-pki/locations/us-west1/caPools/SUBORDINATE_POOL_ID/certificateAuthorities/SUBORDINATE_CA_ID] and saved CSR to FILE_NAME.

Para ver a lista exaustiva de definições disponíveis, execute o seguinte comando:

gcloud privateca subordinates create --help

Se perder o CSR, pode transferi-lo novamente através do seguinte comando:

gcloud privateca subordinates get-csr SUBORDINATE_CA_ID \
    --pool=SUBORDINATE_POOL_ID \
    --location=LOCATION

Terraform

  1. Para criar um conjunto de ACs e uma AC subordinada nesse conjunto de ACs, use o seguinte ficheiro de configuração:

    resource "google_privateca_ca_pool" "default" {
      name     = "test-ca-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
    }
    
    resource "google_privateca_certificate_authority" "sub-ca" {
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = "my-certificate-authority-sub"
      location = "us-central1"
      config {
        subject_config {
          subject {
            organization = "HashiCorp"
            common_name = "my-subordinate-authority"
          }
          subject_alt_name {
            dns_names = ["hashicorp.com"]
          }
        }
        x509_config {
          ca_options {
            is_ca = true
            # Force the sub CA to only issue leaf certs
            max_issuer_path_length = 0
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign = true
            }
            extended_key_usage {
            }
         }
       }
      }
      lifetime = "86400s"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
      type = "SUBORDINATE"
    }
    
  2. Para obter o CSR, anexe a seguinte configuração.

    data "google_privateca_certificate_authority" "sub-ca-csr" {
      location = "us-central1"
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = google_privateca_certificate_authority.sub-ca.certificate_authority_id
    }
    
    output "csr" {
      value = data.google_privateca_certificate_authority.sub-ca-csr.pem_csr
    }
    
  3. Corrida terraform apply.

Assine o CSR

Transmita o ficheiro CSR gerado ao membro da sua organização responsável pela emissão de certificados e peça-lhe que o assine. Os passos específicos dependem da configuração da sua organização.

Pode experimentar uma AC raiz simples através dos seguintes comandos openssl:

Shell

Configure as definições da nova AC raiz.

cat > root.conf <<- EOM
[ req ]
distinguished_name = req_distinguished_name
x509_extensions    = v3_ca
prompt             = no
[ req_distinguished_name ]
commonName = Sample Root
[ v3_ca ]
subjectKeyIdentifier=hash
basicConstraints=critical, CA:true
EOM

Crie a nova CA raiz.

openssl req -x509 -new -nodes -config root.conf -keyout rootCA.key \
  -days 3000 -out rootCA.crt -batch

Configure as extensões que têm de ser adicionadas ao novo certificado de AC subordinada.

cat > extensions.conf <<- EOM
basicConstraints=critical,CA:TRUE,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
extendedKeyUsage=critical,serverAuth
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOM

Assine o CSR da CA subordinada com esta raiz.

openssl x509 -req -in FILE_NAME -CA rootCA.crt -CAkey rootCA.key \
  -CAcreateserial -out subordinate.crt -days 1095 -sha256 -extfile extensions.conf

Concatene toda a cadeia de certificados num único ficheiro.

cat subordinate.crt > chain.crt
cat rootCA.crt >> chain.crt

Carregue o certificado assinado

Para ativar uma AC subordinada através de um certificado assinado, faça o seguinte:

Consola

  1. Aceda à página Serviço de autoridade de certificação na Google Cloud consola.

    Aceda ao serviço de autoridade de certificação

  2. Clique no separador Gestor de AC.

  3. Em Autoridades de certificação, escolha a CA subordinada que criou.

  4. Clique em Ativar.

  5. Na caixa de diálogo apresentada, clique em Transferir CSR para transferir o ficheiro CSR codificado em PEM que a AC emissora pode assinar.

  6. Clicar em Seguinte.

  7. No campo Carregar cadeia de certificados, clique em Procurar.

  8. Carregue o ficheiro de certificado assinado com a extensão .crt.

  9. Clique em Ativar.

gcloud

gcloud privateca subordinates activate SUBORDINATE_CA_ID \
    --pool=SUBORDINATE_POOL_ID \
    --location=LOCATION \
    --pem-chain ./chain.crt

Substitua o seguinte:

  • SUBORDINATE_CA_ID: o identificador exclusivo da AC subordinada que quer ativar.
  • SUBORDINATE_POOL_ID: o nome do conjunto de ACs que contém a AC subordinada.
  • LOCATION: a localização do grupo de ACs. Para ver a lista completa de localizações, consulte Localizações.

A flag --pem-chain é obrigatória. Esta flag usa o ficheiro que contém a lista de certificados codificados em PEM. A lista de certificados começa com o certificado da AC atual e termina com o certificado da AC de raiz.

Para mais informações sobre o comando gcloud privateca subordinates activate, consulte gcloud privateca subordinates activate.

A seguinte declaração é devolvida quando o certificado assinado é carregado:

Activated certificate authority [SUBORDINATE_CA_ID].

Terraform

  1. Guarde o certificado da AC assinado localmente como subordinate.crt.
  2. Guarde os certificados da AC do signatário localmente como rootCA.crt.
  3. Remova a configuração para obter o CSR mencionado no primeiro passo, uma vez que tenta obter o CSR, o que não é permitido após a ativação da AC.
  4. Atualize a configuração da AC subordinada com os seguintes campos e execute terraform apply.

    pem_ca_certificate     = file("subordinate.crt")
    subordinate_config {
      pem_issuer_chain {
          pem_certificates = [file("rootCA.crt")]
      }
    }
    

Se a cadeia de emissão incluir mais do que uma AC, especifique o valor como [file("intermediateCA.cert"), file("rootCA.crt")].

O que se segue?