Conecte-se a uma instância do ApsaraDB RDS for PostgreSQL por 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. Se ainda não estiver ativada, consulte Configure a cloud certificate to enable SSL encryption ou Configure a custom certificate to enable SSL encryption
O arquivo de certificado CA do servidor. Para obter esse arquivo, consulte Configure SSL encryption for an ApsaraDB RDS for PostgreSQL instance ou Configure a custom certificate on an ApsaraDB RDS for PostgreSQL instance
(Necessário apenas se você configurou um certificado CA de cliente) Os arquivos
client.crteclient.key. Consulte Configure a client CA certificate on an ApsaraDB RDS for PostgreSQL instance
Escolher um método de conexão
|
Ferramenta |
Mais indicado para |
|
pgAdmin |
Gerenciamento de banco de dados via GUI e consultas interativas |
|
psql |
Scripts, automação e fluxos de trabalho de linha de comando |
|
JDBC |
Aplicações Java que se conectam ao banco de dados de forma programática |
Referência de modos SSL
Os três métodos de conexão usam os mesmos valores de modo SSL. Escolha de acordo com 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 confere se o CN ou DNS do certificado do servidor corresponde ao endpoint da conexão |
Segurança máxima; 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 |
Somente 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 o pgAdmin
O pgAdmin 4 já vem incluído quando você instale o PostgreSQL a partir do site oficial do PostgreSQL. Para usar o pgAdmin sem instale 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 as senhas e credenciais salvas.
-
Clique em com o botão direito em Servers e escolha Register > Server.

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

-
Na guia Connection, informe os detalhes de conexão.
Parâmetro
Descrição
Host name/address
O endpoint da instância RDS. Use o endpoint interno para conexões via VPC ou o endpoint público para conexões via Internet. Localize-o na página Database Connection. Consulte View and change the endpoints and port numbers of an ApsaraDB RDS for PostgreSQL instance.
Port
O número da porta da conexão. Localize-o na página Database Connection.
Username
O nome de usuário da conta do banco de dados. Consulte Create a database and an account.
Password
A senha da conta do banco de dados.

-
Na guia Parameters, configure as opções de SSL.
Como certificado raiz, use um certificado personalizado (
server-ca.crt) ou um certificado da cloud (ApsaraDB-CA-Chain.pem). Utilize o caminho real do arquivo no seu sistema.Parâmetro
Descrição
SSL mode
O modo SSL. Consulte Referência de modos SSL para ver os valores disponíveis e quando aplicar cada um.
Client certificate
O caminho para
client.crt. Obrigatório apenas se você configurou um certificado CA de cliente.Client certificate key
O caminho para
client.key. Obrigatório apenas se você configurou um certificado CA de cliente.Root certificate
O caminho para o arquivo de certificado CA do servidor. Necessário quando SSL mode estiver definido como Verify-CA ou Verify-Full.
-
Clique em Save. Se a conexão for bem-sucedida, a árvore de bancos de dados se expande no painel do pgAdmin.
ImportanteO banco de dados
postgresé o banco padrão do sistema. Não execute operações nele.
Conectar usando o 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 da cloud (ApsaraDB-CA-Chain.pem). Utilize o caminho real do arquivo ao executar os comandos.cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/ -
Defina o proprietário 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 edite.
vim /var/lib/pgsql/.bash_profile -
Pressione
ipara entrar no modo de edite 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 edite e digite:wqpara salve e sair.-
Recarregue as variáveis de ambiente.
source .bash_profile -
Defina o modo SSL.
export PGSSLMODE="verify-full" -
Conecte-se à instância RDS.
Placeholder
Descrição
Onde encontrar
<Endpoint>O endpoint da instância RDS protegido por SSL
Protected Host na guia SSL Encryption da página Data Security
<Username>O nome de usuário da conta do banco de dados
Página Accounts
<Port number>O número da porta (padrão:
5432)Página Database Connection
<Database name>O 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 placeholders pelos seus valores reais:
O banco de dados postgres é o banco padrão do sistema. Não execute operações nele.
Conectar usando JDBC
Etapa 1: Obter os arquivos de certificado
Baixe os seguintes arquivos para o host onde sua aplicação Java é executada:
server-ca.crt: o 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.
Etapa 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 em que sua aplicação é executada. Se você executá-lo em outro host e copiar o arquivo, podem ocorrer os seguintes erros:
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
Etapa 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>
Etapa 4: Conectar-se à instância RDS
O exemplo abaixo usa um certificado personalizado (server-ca.crt). Para usar um certificado da 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();
}
}
}