O ApsaraDB RDS for PostgreSQL oferece suporte à criptografia ssl com certificados gerenciados pela Alibaba Cloud e certificados personalizados. Use um certificado personalizado quando precisar controlar a autoridade certificadora (CA) ou proteger vários endpoints com Subject Alternative Names (SANs).
Este tópico descreve como gerar um certificado personalizado com o OpenSSL e configurá-lo na sua instância RDS.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância RDS executando o PostgreSQL 10 ou posterior com discos em nuvem. Instâncias RDS Serverless não têm suporte.
OpenSSL instalado. O Linux inclui o OpenSSL por padrão. No Windows, baixe e instale-o na página Win32/Win64 OpenSSL.
Observações de uso
Ativar a criptografia ssl aumenta o uso da CPU e as latências de leitura e gravação.
Após ativar a criptografia ssl, feche as conexões existentes e estabeleça novas para que a alteração tenha efeito.
-
As operações a seguir reiniciam a instância RDS, processo que leva cerca de 3 minutos. Execute-as fora do horário de pico:
Configure um certificado personalizado
Modifique um certificado personalizado existente
Desativar a criptografia ssl
Etapa 1: Gerar os arquivos de certificado
Não ative a criptografia por senha ao crie uma chave privada para um certificado de servidor ou certificado autoassinado. Chaves privadas criptografadas por senha impedem a ativação da criptografia ssl.
Os comandos a seguir usam o CentOS como exemplo. No Windows, execute os mesmos comandos openssl, mas use copiar e colar e um editor de texto em vez de cp e vim.
Endpoint único
Execute os três comandos a seguir em sequência:
# 1. Create a self-signed CA certificate and its private key
openssl req -new -x509 -days 365 -nodes -out server-ca.crt -keyout server-ca.key -subj "/CN=root-server-ca"
# 2. Create a certificate signing request (CSR) and private key for the server certificate
# Replace the CN value with the endpoint you want to protect
openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=pgm-bpxxxxx.pg.rds.aliyuncs.com"
# 3. Sign the CSR with the CA to produce the server certificate
openssl x509 -req -in server.csr -text -days 365 -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out server.crt
Para encontrar o endpoint a ser usado no valor CN, consulte View and change the endpoints and port numbers of an ApsaraDB RDS for PostgreSQL instance.
Vários endpoints (Subject Alternative Names)
Para proteger vários endpoints, inclua-os como Subject Alternative Names (SANs) no certificado.
# 1. Create a self-signed CA certificate and its private key
openssl req -new -x509 -days 365 -nodes -out server-ca.crt -keyout server-ca.key -subj "/CN=root-server-ca"
# 2. Copy the default OpenSSL config to a temp file
cp /etc/pki/tls/openssl.cnf /tmp/openssl.cnf
No Windows, o arquivoopenssl.cnfestá no diretório\bin\cnfdentro da pasta de instalação do OpenSSL. Copie-o para qualquer diretório de sua preferência.
Abra o arquivo /tmp/openssl.cnf em um editor de texto e adicione o seguinte conteúdo:
# Add to the end of the [ req ] section
req_extensions = v3_req
# Add a new [ v3_req ] section
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
# Add a new [ alt_names ] section — list each endpoint as a DNS entry
[ alt_names ]
DNS.1 = pgm-bpxxxxx.pg.rds.aliyuncs.com
DNS.2 = pgm-bpyyyyy.pg.rds.aliyuncs.com
Em seguida, gere o CSR e o certificado do servidor:
# 3. Create a CSR and server private key using the updated config
openssl req -new -nodes -text -out server.csr -keyout server.key -config /tmp/openssl.cnf
# 4. Sign the CSR with the CA, including the SAN extensions
openssl x509 -req -in server.csr -text -days 365 -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out server.crt -extensions v3_req -extfile /tmp/openssl.cnf
Ao executar a etapa 3, o OpenSSL solicitará os parâmetros do CSR. A tabela a seguir descreve cada campo.
|
Parâmetro |
Descrição |
Exemplo |
|
Country Name |
Código de país ISO 3166 de duas letras |
|
|
State or Province Name |
Província ou estado |
|
|
Locality Name |
Cidade |
|
|
Organization Name |
Nome da empresa |
|
|
Organizational Unit Name |
Nome do departamento |
|
|
Common Name |
Deixe em branco — os nomes de domínio são especificados em |
— |
|
Email Address |
Deixe em branco |
— |
|
A challenge password |
Deixe em branco |
— |
|
An optional company name |
Deixe em branco |
— |
Verificar a saída
Após a conclusão dos comandos, execute ls para confirme se todos os arquivos necessários estão presentes:
server-ca.crt server-ca.key ca.srl server.crt server.csr server.key
A tabela a seguir descreve cada arquivo e sua função no ssl:
|
Arquivo |
Conteúdo |
Finalidade |
|
|
Certificado do servidor |
Enviado aos clientes para identificar o servidor |
|
|
Chave privada do certificado do servidor |
Comprova que o servidor possui o certificado |
|
|
Certificado CA autoassinado |
Usado pelos clientes para verificar o certificado do servidor |
|
|
Chave privada do certificado CA |
Usada para assinar o certificado do servidor |
Etapa 2: Ative a criptografia ssl com o certificado personalizado
Após configure um certificado personalizado, o status da instância muda de Running para Modifying SSL e retorna para Running em aproximadamente 3 minutos.
Acesse a página Instances. Na barra de navegação superior, selecione a região onde a instância está localizada. Clique em no ID da instância.
No painel de navegação à esquerda, clique em Data Security. Na página exibida, clique em na aba SSL.
Defina Select Certificate Source como Custom Certificate. Clique em Configuration ao lado de Configure Database Certificate (to Prevent Database Disguise).
-
Na caixa de diálogo, cole o conteúdo dos arquivos nos campos correspondentes. Copie todo o conteúdo de cada arquivo, incluindo as linhas de cabeçalho e rodapé. Clique em OK. Se o certificado cobrir vários endpoints, cada endpoint aparecerá como um registro separado em Protected Host.
Campo
Arquivo
Intervalo de conteúdo
Server Certificate
server.crtDe
-----BEGIN CERTIFICATE-----até-----END CERTIFICATE-----Private Key of Server Certificate
server.keyDe
-----BEGIN PRIVATE KEY-----até-----END PRIVATE KEY-----

Etapa 3: Conectar-se à instância via ssl
Conecte-se à instância RDS a partir de um cliente via ssl. Para mais informações, consulte Connect to an ApsaraDB RDS for PostgreSQL instance over SSL.
Etapa 4: (Opcional) Atualize o certificado personalizado
Esta operação reinicia a instância RDS. Proceda com cautela.
Na aba SSL, clique em Modify ao lado de Configure Database Certificate (to Prevent Database Disguise). Na caixa de diálogo, insira o novo certificado do servidor e sua chave privada.

Etapa 5: (Opcional) Desativar a criptografia ssl
Esta operação reinicia a instância RDS. Proceda com cautela.
Na aba SSL, clique em Disable SSL.

Perguntas frequentes
Por que recebo o erro "The certificate address does not contain the instance connection string"?
O CN (Common Name) ou SAN (Subject Alternative Name) do certificado não contém o endpoint da instância RDS. Certificados curinga (por exemplo, *.example.com) não têm suporte.
Para resolver esse problema, regenere o certificado e defina o valor CN ou uma entrada SAN com o endpoint completo da instância RDS (por exemplo, pgm-xxx.pg.rds.aliyuncs.com). Para obter informações sobre como visualize o endpoint, consulte View and change the endpoints and port numbers of an ApsaraDB RDS for PostgreSQL instance.
Por que a configuração ssl falha com um erro de chave privada?
A chave privada foi gerada com criptografia por senha. Chaves privadas criptografadas por senha não têm suporte.
Para resolver esse problema, regenere a chave privada sem criptografia por senha. Use a flag -nodes no comando openssl req, conforme mostrado na Etapa 1. O arquivo de chave privada deve começar com -----BEGIN PRIVATE KEY-----.
Por que recebo um erro de formato de certificado ao fazer upload do certificado?
O arquivo de certificado pode não estar no formato PEM ou pode conter conteúdo extra.
Para resolver esse problema, certifique-se de enviar um arquivo de certificado no formato PEM. O conteúdo deve começar com -----BEGIN CERTIFICATE----- e terminar com -----END CERTIFICATE-----, sem texto adicional fora dessas linhas.