Este tópico descreve como se conectar a um banco de dados usando pgAdmin, psql e JDBC após ativar a criptografia SSL.
Pré-requisitos
A criptografia SSL está ativada. Caso contrário, consulte Ativar a criptografia SSL usando um certificado de nuvem ou Ativar a criptografia SSL usando um certificado personalizado.
-
Os seguintes arquivos foram obtidos:
(Opcional) O certificado do cliente (
client.crt) e a chave privada do cliente (client.key): esses arquivos são necessários se você configurou um certificado de CA do cliente no console do ApsaraDB RDS. Para mais informações, consulte Configurar um certificado de CA do cliente.O certificado de CA do servidor: para mais informações, consulte Baixar um certificado de CA ou Gerar um certificado autoassinado.
Etapas
pgAdmin
O pgAdmin é a ferramenta oficial recomendada pelo PostgreSQL para conexões com bancos de dados. Ao baixar e instalar o PostgreSQL no site oficial do PostgreSQL, o cliente pgAdmin 4 é instalado automaticamente. Este procedimento descreve como se conectar a uma instância do ApsaraDB for RDS for PostgreSQL, usando pgAdmin 4 V6.2.0 como exemplo.
Caso não queira instalar o PostgreSQL, baixe o cliente pgAdmin separadamente para se conectar a bancos de dados remotos.
-
Inicie o pgAdmin 4.
NotaSe esta for a primeira vez que você faz login em uma versão mais recente do pgAdmin, especifique uma senha mestra para proteger as senhas salvas e outras credenciais.
-
Clique com o botão direito em Servers e escolha .

Na aba General da caixa de diálogo Register - Server, insira o nome do servidor onde o pgAdmin está instalado.

-
Na aba Connection, configure as definições de Connection inserindo os seguintes parâmetros da sua instância.
Parâmetro
Descrição
Host name/address
O endpoint e a porta usados para conectar-se à instância RDS.
-
Para conexão via rede interna, insira o endpoint interno e a porta interna da instância RDS.
-
Para conexão via Internet, insira o endpoint público e a porta pública da instância RDS.
Essas informações estão disponíveis na página Database Connection da instância RDS.
Para mais informações, consulte Visualizar e alterar os endpoints e números de porta de uma instância ApsaraDB RDS for PostgreSQL.
Port
Username
O nome de usuário e a senha usados para fazer login na instância RDS.
Para mais informações sobre como criar uma conta em uma instância RDS, consulte Criar uma conta e um banco de dados.
Password
-
-
Selecione a aba Parameters, adicione os parâmetros para autenticação SSL e configure os certificados.
Parâmetro
Descrição
SSL mode
Após ativar a criptografia SSL, sua instância PostgreSQL aceita conexões SSL. Ao conectar-se a partir de um cliente, selecione um valor para o parâmetro SSL mode conforme os cenários abaixo:
-
Se você não configurou um lista de controle de acesso (ACL) para o banco de dados:
-
Para conectar via SSL, defina SSL mode como Require, Verify-CA ou Verify-Full.
-
Para conectar sem SSL, defina SSL mode como Disable.
-
-
Se você configurou um lista de controle de acesso (ACL) para o banco de dados, a conexão deve ser feita via SSL. Defina SSL mode como Require, Verify-CA ou Verify-Full.
Os modos são definidos da seguinte forma:
-
Require: criptografa a conexão, mas não verifica a identidade do banco de dados.
-
Verify-CA: criptografa a conexão e verifica a identidade do banco de dados.
-
Verify-Full: criptografa a conexão, verifica a identidade do banco de dados e valida se o Common Name (CN) ou o nome DNS no certificado corresponde ao endpoint configurado para a conexão.
Client certificate
Se você seguiu o procedimento em Configurar um certificado de CA do cliente, configure este parâmetro. Ele especifica o certificado do cliente (
client.crt).Client certificate key
Se você seguiu o procedimento em Configurar um certificado de CA do cliente, configure este parâmetro. Ele especifica a chave privada do cliente (
client.key).Root certificate
Se você definiu SSL mode como Verify-CA ou Verify-Full, configure este parâmetro. Ele especifica o caminho do certificado de CA do servidor.
Nota-
Neste exemplo, configure os caminhos dos arquivos para o certificado do cliente (
client.crt), a chave privada do cliente (client.key) e o certificado de CA do servidor (server-ca.crt) de acordo com seu ambiente real. -
Este exemplo usa um certificado personalizado. Também é possível configurar um certificado cloud. Por exemplo, substitua
server-ca.crtporApsaraDB-CA-Chain.pem.
-
-
Clique em Save.
Se as informações inseridas estiverem corretas, a página mostrada na figura a seguir será exibida, indicando que a conexão com a instância RDS foi bem-sucedida.
ImportanteO banco de dados postgres é o banco de dados padrão do sistema. Não execute operações no banco de dados postgres.
psql
Este procedimento utiliza a ferramenta de linha de comando psql incluída no cliente PostgreSQL. Certifique-se de ter instalado o cliente PostgreSQL. Para mais informações, consulte a documentação oficial do PostgreSQL.
-
No diretório /var/lib/pgsql, crie uma pasta .postgresql.
mkdir /var/lib/pgsql/.postgresql -
Copie os seguintes arquivos para a pasta .postgresql.
(Opcional) O certificado do cliente (
client.crt) e a chave privada do cliente (client.key): esses arquivos são necessários se você configurou um certificado de CA do cliente no console do ApsaraDB RDS. Para mais informações, consulte Configurar um certificado de CA do cliente.O certificado de CA do servidor: para mais informações, consulte Baixar um certificado de CA ou Gerar um certificado autoassinado.
cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/NotaNeste exemplo, configure os caminhos dos arquivos para o certificado do cliente (
client.crt), a chave privada do cliente (client.key) e o certificado de CA do servidor (server-ca.crt) de acordo com seu ambiente real.Este exemplo usa um certificado personalizado. Também é possível usar um certificado cloud. Por exemplo, substitua
server-ca.crtporApsaraDB-CA-Chain.pem.
-
Altere as permissões da pasta .postgresql e de seu conteúdo.
chown postgres:postgres /var/lib/pgsql/.postgresql/* chmod 600 /var/lib/pgsql/.postgresql/* -
Execute o comando a seguir para editar as variáveis de ambiente do usuário postgres:
vim /var/lib/pgsql/.bash_profile -
Pressione
ipara entrar no modo de edição e adicione o seguinte conteúdo.export PGSSLCERT="/var/lib/pgsql/.postgresql/client.crt" export PGSSLKEY="/var/lib/pgsql/.postgresql/client.key" export PGSSLROOTCERT="/var/lib/pgsql/.postgresql/ca1.crt" Pressione
Escpara sair do modo de edição e insira:wqpara salvar e sair.-
Recarregue as variáveis de ambiente.
source .bash_profile -
Defina o modo SSL para a conexão do cliente.
export PGSSLMODE="verify-full"Após ativar a criptografia SSL, sua instância PostgreSQL aceita conexões SSL. Ao conectar-se a partir de um cliente, selecione um valor para o parâmetro PGSSLMODE conforme os cenários abaixo:
O banco de dados possui controle de acesso de cliente configurado?
SSL obrigatório
Valor de PGSSLMODE
Não
Sim
require, verify-ca ou verify-full
Não
disable
Sim
Sim
require, verify-ca ou verify-full
NotaOs modos são definidos da seguinte forma:
require: criptografa a conexão, mas não verifica a identidade do banco de dados.
verify-ca: criptografa a conexão e verifica a identidade do banco de dados.
verify-full: criptografa a conexão, verifica a identidade do banco de dados e valida se o Common Name (CN) ou o nome DNS no certificado corresponde ao endpoint configurado para a conexão.
-
Conecte-se ao banco de dados.
psql -h <endpoint> -U <username> -p <port> -d <database_name>Obtenha os parâmetros no console do ApsaraDB RDS:
Parâmetro
Origem
endpoint
O endpoint criptografado. Obtenha o endpoint no parâmetro Protected Host na página SSL.
username
Obtenha o nome de usuário na página Accounts.
port
A porta padrão é 5432. Se você alterou o número da porta, obtenha-o na página Database Connection.
database_name
O banco de dados
postgresé o banco de dados padrão do sistema da instância RDS. Não execute operações neste banco de dados. Para conectar-se a outro banco de dados criado na instância RDS, obtenha o nome do banco na página Databases.
JDBC
-
Baixe os seguintes arquivos para o seu dispositivo local:
(Opcional) O certificado do cliente (
client.crt) e a chave privada do cliente (client.key): esses arquivos são necessários se você configurou um certificado de CA do cliente no console do ApsaraDB RDS. Para mais informações, consulte Configurar um certificado de CA do cliente.O certificado de CA do servidor: para mais informações, consulte Baixar um certificado de CA ou Gerar um certificado autoassinado.
-
Converta a chave privada do cliente (
client.key) para o formato PKCS#8.openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES # The command prompts you to enter a password, which is required for the connection. Enter Encryption Password: Verifying - Enter Encryption Password:AvisoExecute este comando no host onde sua aplicação está em execução. Use o comando openssl nesse host para converter a chave privada para o formato PKCS#8. Caso contrário, um dos seguintes erros poderá ocorrer:
org.postgresql.util.PSQLException: Could not decrypt SSL key file C:/Users/XXX/XXX/client.pk8org.postgresql.util.PSQLException: SSL error: Received fatal alert: unexpected_message
-
Para um projeto Maven, adicione a dependência do PostgreSQL ao arquivo
pom.xml.<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.10</version> </dependency> -
No código da sua aplicação, use JDBC para conectar-se ao PostgreSQL via conexão SSL.
NotaEste exemplo usa um certificado personalizado. Também é possível usar um certificado cloud. Por exemplo, substitua
server-ca.crtporApsaraDB-CA-Chain.pem.public class PgSslDemo { public static void main(String[] args) { // Set the endpoint of the ApsaraDB for RDS for PostgreSQL instance. String hostname = "pgm-bp1gclw58u36s6****.pg.rds.aliyuncs.com"; // Set the port of the ApsaraDB for RDS for PostgreSQL instance. String port = "5432"; // Set the name of the database to connect to. String dbname = "postgres"; String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname + "?binaryTransfer=true"; Properties properties = new Properties(); // Set the username to connect to the database. properties.setProperty("user", "test_user"); // Set the password to connect to the database. properties.setProperty("password", "test_pwd"); // Set the directory where the certificates are stored. String path = "D:\\ssl\\"; // Enable SSL connection. properties.setProperty("ssl", "true"); // Specify the file name of the server CA certificate. properties.setProperty("sslrootcert", path + "/" + "server-ca.crt"); // Specify the file name of the client private key in PKCS#8 format. properties.setProperty("sslkey", path + "/" + "client.pk8"); // Specify the file name of the client certificate. properties.setProperty("sslcert", path + "/" + "client.crt"); // Enter the password that you set when converting the private key to the PKCS#8 format. properties.setProperty("sslpassword", "test_ssl_pwd"); // Set the SSL mode. Valid values: require, verify-ca, and verify-full. properties.setProperty("sslmode", "verify-ca"); try { Class.forName("org.postgresql.Driver"); Connection connection = DriverManager.getConnection(jdbcUrl, properties); // This example assumes that a table named students01 exists in the postgres database. // Query data from the students01 table. PreparedStatement preparedStatement = connection.prepareStatement("select * from " + "students01"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { ResultSetMetaData rsmd = resultSet.getMetaData(); int columnCount = rsmd.getColumnCount(); Map map = new HashMap(); for (int i = 0; i < columnCount; i++) { map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1)); } System.out.println(map); } } catch (Exception exception) { exception.printStackTrace(); } } }