O ApsaraDB RDS for PostgreSQL oferece suporte à criptografia SSL com certificados gerenciados pela Alibaba Cloud e certificados personalizados. Utilize um certificado personalizado quando for necessário controlar a autoridade certificadora (CA) ou proteger vários endpoints com Nomes Alternativos do Assunto (SANs).
Este tópico descreve como gerar um certificado personalizado usando o OpenSSL e configurá-lo na sua instância RDS.
Pré-requisitos
Antes de começar, certifique-se de ter:
Uma instância RDS executando o PostgreSQL 10 ou posterior com discos em nuvem. Instâncias RDS Serverless não são suportadas.
O OpenSSL instalado. O Linux inclui o OpenSSL por padrão. No Windows, baixe e instale-o a partir da página Win32/Win64 OpenSSL.
Notas de uso
A habilitação da criptografia SSL aumenta a utilização da CPU e as latências de leitura e gravação.
Após habilitar a criptografia SSL, feche as conexões existentes e estabeleça novas para que a alteração tenha efeito.
-
As operações a seguir acionam uma reinicialização da instância RDS, o que leva cerca de 3 minutos. Execute-as durante horários de menor movimento:
Configuração de um certificado personalizado
Modificação de um certificado personalizado existente
Desabilitação da criptografia SSL
Etapa 1: Gerar os arquivos de certificado
Não habilite a criptografia por senha ao criar uma chave privada para um certificado de servidor ou certificado autoassinado. Chaves privadas criptografadas por senha impedem a habilitação da criptografia SSL.
Os comandos a seguir usam o CentOS como exemplo. No Windows, execute os mesmos comandos openssl, mas use o copy 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 Visualizar e alterar os endpoints e números de porta de uma instância do ApsaraDB RDS for PostgreSQL.
Múltiplos endpoints (Nomes Alternativos do Assunto)
Para proteger vários endpoints, inclua-os como Nomes Alternativos do Assunto (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, oopenssl.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 /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 |
Estado ou província |
|
|
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 confirmar 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 |
Prova que o servidor possui o certificado |
|
|
Certificado de CA autoassinado |
Usado pelos clientes para verificar o certificado do servidor |
|
|
Chave privada do certificado de CA |
Usada para assinar o certificado do servidor |
Etapa 2: Habilitar a criptografia SSL com o certificado personalizado
Após configurar um certificado personalizado, o status da instância muda de Running para Modifying SSL e volta para Running em cerca de 3 minutos.
Acesse a página Instâncias. Na barra de navegação superior, selecione a região onde sua instância está localizada. Clique no ID da instância.
No painel de navegação à esquerda, clique em Data Security. Na página exibida, clique 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 o conteúdo completo de cada arquivo, incluindo as linhas de cabeçalho e rodapé. Clique em OK. Se o seu 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-----a-----END CERTIFICATE-----Private Key of Server Certificate
server.keyDe
-----BEGIN PRIVATE KEY-----a-----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 Conectar-se a uma instância do ApsaraDB RDS for PostgreSQL via SSL.
Etapa 4: (Opcional) Atualizar o certificado personalizado
Esta operação aciona uma reinicialização da instância RDS. Prossiga 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) Desabilitar a criptografia SSL
Esta operação aciona uma reinicialização da instância RDS. Prossiga com cautela.
Antes de desabilitar a criptografia SSL, certifique-se de que a criptografia SSL forçada esteja desabilitada. Para obter instruções, consulte Método 3: Habilitar ou desabilitar a criptografia SSL forçada usando o OpenAPI.
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 (Nome Comum) ou SAN (Nome Alternativo do Assunto) do certificado não contém o endpoint da instância RDS. Certificados curinga (por exemplo, *.example.com) não são suportados.
Para resolver esse problema, regenere o certificado e defina o valor CN ou uma entrada SAN como o endpoint completo da instância RDS (por exemplo, pgm-xxx.pg.rds.aliyuncs.com). Para obter informações sobre como visualizar o endpoint, consulte Visualizar e alterar os endpoints e números de porta de uma instância do ApsaraDB RDS for PostgreSQL.
Por que a configuração do SSL falha com um erro de chave privada?
A chave privada foi gerada com criptografia por senha. Chaves privadas criptografadas por senha não são suportadas.
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 o 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 fazer o upload de um arquivo de certificado no formato PEM. O conteúdo deve começar com -----BEGIN CERTIFICATE----- e terminar com -----END CERTIFICATE-----, sem texto extra fora dessas linhas.