Nesta página, você aprende a ativar uma porta Secure Sockets Layer (SSL) ao implantar o Extensible Service Proxy V2 (ESPv2) com o Google Kubernetes Engine, Kubernetes ou Compute Engine. Talvez você queira ativar uma porta SSL para o serviço do Endpoints implantado em alguns casos de uso.
Antes de começar, leia os tutoriais sobre o tipo de serviço e ambiente escolhidos e saiba como implantar o ESPv2 sem SSL.
Como configurar chaves e certificados SSL
Para configurar a porta SSL para exibir solicitações HTTPS, siga as etapas abaixo:
Verifique se o nome do arquivo de chave SSL é
server.key
e se o arquivo do certificado se chamaserver.crt
. Para o teste, você pode gerarserver.key
eserver.crt
assinados automaticamente usando o OpenSSL com o seguinte comando:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./server.key -out ./server.crt
Especifique
CN
esubjectAltName
no certificado do servidor. O valor desses atributos precisa corresponder ao DNS ou ao IP usado pelos clientes para chamar o serviço. Caso contrário, o handshake SSL falhará.
Como ativar o SSL para ESPv2 no Kubernetes
Para ativar a porta SSL para ESPv2 no Kubernetes, siga as seguintes etapas:
Crie um secret do Kubernetes com o certificado e a chave SSL:
kubectl create secret generic esp-ssl \ --from-file=./server.crt --from-file=./server.key
Edite os arquivos de configuração do Kubernetes, por exemplo,
echo-ssl.yaml
, conforme mostrado no snippet a seguir:Observação: a amostra de configuração exibe as linhas que precisam ser editadas. Para implantar o arquivo no Cloud Endpoints é necessário o arquivo de configuração completo.
Ative os secrets do Kubernetes criados como volumes seguindo as instruções da página de volumes do Kubernetes (em inglês).
Inicie o ESPv2 conforme descrito em Como especificar opções de inicialização para o ESPv2, mas certifique-se de adicionar a sinalização de inicialização
--ssl_server_cert_path
para especificar o caminho para os arquivos de certificado ativados.Inicie o serviço com o arquivo de configuração atualizado do Kubernetes usando
kubectl
.kubectl apply -f echo-ssl.yaml
Use o comando OpenSSL a seguir para gerar o certificado raiz do cliente:
openssl x509 -in ./server.crt -out ./client.pem -outform PEM
Se o cliente estiver usando
curl
, o arquivoclient.pem
poderá ser usado na sinalização--caroot
. Para gRPC, oclient.pem
é usado como o certificado raiz da credencial SSL para o canal gRPC.
Atualizar certificados SSL
É importante atualizar o certificado SSL periodicamente. Para atualizar seus certificados SSL, é necessário executar as seguintes etapas:
- Crie novos certificados, conforme descrito na etapa 1 acima.
- Ative os novos certificados nos secrets do Kubernetes, conforme descrito na etapa 3 acima.
- Atualize a implantação do ESPv2 do Kubernetes, conforme descrito na etapa 5 acima.
- Gere o arquivo de certificado raiz do cliente novamente, conforme descrito na etapa 6 acima.
Como ativar o SSL para o ESPv2 no Compute Engine
Para ativar o SSL no Compute Engine, primeiro copie os arquivos server.key
e server.crt
para a
pasta /etc/nginx/ssl
da instância do Compute Engine usando as seguintes etapas:
Execute o seguinte comando e substitua INSTANCE_NAME pelo nome da instância do Compute Engine:
gcloud compute scp server.* INSTANCE-NAME
Conecte-se à instância usando
ssh
.gcloud compute ssh INSTANCE-NAME
Na caixa "VM da instância", crie o diretório e copie os arquivos:
sudo mkdir -p /etc/esp/ssl
sudo cp server.* /etc/esp/ssl/
Siga as instruções para o tipo de serviço a implantar com o Docker. Quando você for executar o contêiner do Docker ESPv2, use este comando:
sudo docker run --name=esp \ --detach \ --publish=443:9000 \ --net=esp_net \ --volume=/etc/esp/ssl:/etc/esp/ssl \ gcr.io/endpoints-release/endpoints-runtime:2 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_server_cert_path=/etc/esp/ssl \ --listener_port=9000
Em comparação com o comando
docker run
não SSL, a versão SSL do comando cria uma configuração diferente. Por exemplo, o comando SSL:- monta a pasta com arquivos de chave e CRT no contêiner usando
--volume
; - usa
--ssl_server_cert_path=/etc/esp/ssl
para informar ao ESPv2 para encontrar os arquivos de certificado do servidorserver.key
eserver.crt
na pasta/etc/esp/ssl
; altera a sinalização de mapeamento de porta
--publish
. As solicitações recebidas para a porta HTTPS 443 são mapeadas para a porta 9000 do ESPv2.
- monta a pasta com arquivos de chave e CRT no contêiner usando
Atualizar certificados SSL
É importante atualizar o certificado SSL periodicamente. Para atualizar seus certificados SSL, é necessário executar as seguintes etapas:
- Crie novos certificados e copie-os em instâncias de VM, conforme descrito na etapa 1 acima.
- Copie os novos certificados para o diretório
/etc/esp/ssl
, conforme descrito na etapa 3 acima. - Interrompa e reinicie o contêiner do ESPv2 usando o comando
sudo docker run
, conforme descrito na etapa 4 acima.
Teste da porta SSL
Para facilitar o teste da porta SSL, defina as seguintes variáveis de ambiente:
Defina IP_ADDRESS como o endereço IP da instância do Compute Engine com o novo certificado SSL.
Defina ENDPOINTS_KEY como uma chave de API válida.
Com a porta SSL ativada, você pode usar HTTPS para enviar solicitações ao Extensible Service Proxy. Se o certificado for assinado automaticamente, use -k
para ativar a opção não segura em curl
:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
Como alternativa, gere o certificado no formato pem
e use a opção --cacert
para usar o certificado assinado automaticamente em curl
, como mostrado abaixo:
openssl x509 -in server.crt -out client.pem -outform PEM
curl --cacert "./client.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY