Conecte-se a uma instância do ApsaraDB RDS for PostgreSQL por meio de uma conexão SSL criptografada usando pgAdmin, psql ou JDBC.
Pré-requisitos
Antes de começar, verifique se você tem:
Criptografia SSL ativada na instância RDS. Caso não esteja ativada, consulte Configurar um certificado cloud para ativar a criptografia SSL ou Configurar um certificado personalizado para ativar a criptografia SSL
O arquivo do certificado CA do servidor. Para obter esse arquivo, consulte Configurar criptografia SSL para uma instância do ApsaraDB RDS for PostgreSQL ou Configurar um certificado personalizado em uma instância do ApsaraDB RDS for PostgreSQL
(Obrigatório apenas se você configurou um certificado CA de cliente) Os arquivos
client.crteclient.key. Consulte Configurar um certificado CA de cliente em uma instância do ApsaraDB RDS for PostgreSQL
Escolha um método de conexão
|
Ferramenta |
Mais indicado para |
|
pgAdmin |
Gerenciamento de banco de dados com interface gráfica e consultas interativas |
|
psql |
Scripts, automação e fluxos de trabalho em linha de comando |
|
JDBC |
Aplicações Java que se conectam ao banco de dados programaticamente |
Referência de modos SSL
Os três métodos de conexão utilizam os mesmos valores de modo SSL. Escolha conforme seus requisitos de segurança:
|
Modo SSL |
Comportamento |
Quando usar |
|
|
Criptografa a conexão, mas não valida o certificado do servidor |
Criptografia básica sem verificação de certificado |
|
|
Criptografa a conexão e valida o certificado CA do servidor |
Recomendado para a maioria dos cenários de produção |
|
|
Criptografa a conexão, valida o certificado CA do servidor e verifica se o CN ou DNS no certificado do servidor corresponde ao endpoint de conexão |
Maior nível de segurança; protege contra ataques man-in-the-middle |
|
|
Sem criptografia SSL. Disponível apenas se nenhuma lista de controle de acesso (ACL) estiver configurada na instância |
Apenas para desenvolvimento ou testes em redes confiáveis |
Se houver ACLs configuradas na instância RDS, ela aceitará apenas conexões SSL. Defina o modo SSL comorequire,verify-caouverify-full.
Conectar usando pgAdmin
O pgAdmin 4 é incluído quando você instale o PostgreSQL a partir do site oficial do PostgreSQL. Para usar o pgAdmin sem instalar o PostgreSQL, baixe-o separadamente em pgAdmin.
Os passos a seguir usam o pgAdmin 4 V6.2.0 como exemplo.
-
Inicie o pgAdmin 4.
No primeiro login, o pgAdmin solicita que você defina uma senha mestra para proteger senhas salvas e credenciais.
-
Clique em com o botão direito em Servers e escolha Register > Server.

-
Na aba General, insira um nome para o servidor.

-
Na aba Connection, insira os detalhes da conexão.
Parâmetro
Descrição
Host name/address
Endpoint da instância RDS. Use o endpoint interno para conexões VPC ou o endpoint público para conexões pela Internet. Encontre essa informação na página Database Connection. Consulte Visualize e alterar endpoints e números de porta de uma instância do ApsaraDB RDS for PostgreSQL.
Port
Número da porta para a conexão. Encontre essa informação na página Database Connection.
Username
Nome de usuário da conta do banco de dados. Consulte Crie um banco de dados e uma conta.
Password
Senha da conta do banco de dados.

-
Na aba Parameters, configure as definições de SSL.
É possível usar um certificado personalizado (
server-ca.crt) ou um certificado cloud (ApsaraDB-CA-Chain.pem) como certificado raiz. Utilize o caminho real do arquivo no seu sistema.Parâmetro
Descrição
SSL mode
Modo SSL. Consulte Referência de modos SSL para visualizar os valores disponíveis e quando usar cada um.
Client certificate
Caminho para
client.crt. Obrigatório apenas se você configurou um certificado CA de cliente.Client certificate key
Caminho para
client.key. Obrigatório apenas se você configurou um certificado CA de cliente.Root certificate
Caminho para o arquivo do certificado CA do servidor. Obrigatório quando o SSL mode está definido como Verify-CA ou Verify-Full.
-
Clique em Save. Se a conexão for bem-sucedida, a árvore de bancos de dados será expandida no painel do pgAdmin.
ImportanteO banco de dados
postgresé o banco de dados padrão do sistema. Não execute operações nele.
Conectar usando psql
O cliente PostgreSQL deve estar instalado na sua máquina. Consulte a documentação do PostgreSQL .
-
No diretório
/var/lib/pgsql, crie uma pasta chamada.postgresql.mkdir /var/lib/pgsql/.postgresql -
Copie os arquivos de certificado para a pasta
.postgresql.Os arquivos
client.crteclient.keysão necessários apenas se você configurou um certificado CA de cliente. Você pode usar um certificado personalizado (server-ca.crt) ou um certificado cloud (ApsaraDB-CA-Chain.pem). Use o caminho real do arquivo ao executar os comandos.cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/ -
Defina a propriedade e as permissões dos arquivos na pasta
.postgresql.chown postgres:postgres /var/lib/pgsql/.postgresql/* chmod 600 /var/lib/pgsql/.postgresql/* -
Abra o arquivo de variáveis de ambiente para edição.
vim /var/lib/pgsql/.bash_profile -
Pressione
ipara entrar no modo de edição e adicione as seguintes variáveis de ambiente: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.
export PGSSLMODE="verify-full" -
Conecte-se à instância RDS.
Marcador
Descrição
Onde encontrar
<Endpoint>Endpoint protegido por SSL da instância RDS
Protected Host na aba SSL Encryption da página Data Security
<Username>Nome de usuário da conta do banco de dados
Página Accounts
<Port number>Número da porta (padrão:
5432)Página Database Connection
<Database name>Nome do banco de dados ao qual se conectar
Página Database Connection
psql -h <Endpoint> -U <Username> -p <Port number> -d <Database name>Substitua os marcadores pelos seus valores reais:
O banco de dados postgres é o banco de dados padrão do sistema. Não execute operações nele.
Conectar usando JDBC
Passo 1: Obter os arquivos de certificado
Baixe os seguintes arquivos para o host onde sua aplicação Java é executada:
server-ca.crt: Certificado CA do servidor. Consulte a seção Pré-requisitos para saber como obtê-lo.client.crteclient.key: Necessários apenas se você configurou um certificado CA de cliente.
Passo 2: Converter a chave privada do cliente para o formato PKCS8 (PK8)
O JDBC exige a chave privada do cliente no formato PKCS8 (PK8). Execute o seguinte comando no host onde sua aplicação é executada:
openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
# Enter the encryption password when prompted. You will use this password in your code.
Enter Encryption Password:
Verifying - Enter Encryption Password:
Execute este comando no mesmo host onde sua aplicação é executada. Se você executá-lo em um host diferente e copiar o arquivo, os seguintes erros podem 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
Passo 3: Adicionar a dependência do driver JDBC do PostgreSQL
Adicione a seguinte dependência ao seu pom.xml:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Passo 4: Conectar à instância RDS
O exemplo abaixo usa um certificado personalizado (server-ca.crt). Para usar um certificado cloud, substituaserver-ca.crtporApsaraDB-CA-Chain.pem.
public class PgSslDemo {
public static void main(String[] args) {
// Endpoint of the RDS instance
String hostname = "pgm-bp1gclw58u36s6****.pg.rds.aliyuncs.com";
// Port number (default: 5432)
String port = "5432";
// Database name
String dbname = "postgres";
String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname + "?binaryTransfer=true";
Properties properties = new Properties();
// Database account username
properties.setProperty("user", "test_user");
// Database account password
properties.setProperty("password", "test_pwd");
// Directory where certificate files are stored
String path = "D:\\ssl\\";
// Enable SSL
properties.setProperty("ssl", "true");
// Path to the server CA certificate
properties.setProperty("sslrootcert", path + "/" + "server-ca.crt");
// Path to the client private key (PKCS8 format)
properties.setProperty("sslkey", path + "/" + "client.pk8");
// Path to the client certificate
properties.setProperty("sslcert", path + "/" + "client.crt");
// The encryption password set when converting client.key to PKCS8 format
properties.setProperty("sslpassword", "test_ssl_pwd");
// SSL mode: require, verify-ca, or verify-full
properties.setProperty("sslmode", "verify-ca");
try {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl, properties);
// Example: query all rows 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();
}
}
}