在使用客户端程序连接数据库时,您可以启用SSL加密功能提高数据链路的安全性,保障数据的完整性。您可以根据自身应用特点选用任何兼容Tair协议的客户端程序。本文列举一些常见的客户端程序的代码示例,帮助您快速连接。
前提条件
注意事项
准备工作
Java
下述示例代码以Jedis客户端的3.6.0版本为例,推荐使用最新版本。
说明 您需要根据注释提示修改代码。关于如何获取Tair实例的连接地址、端口号、密码,请参见准备工作中的步骤2。
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class JedisSSLTest {
private static SSLSocketFactory createTrustStoreSSLSocketFactory(String jksFile) throws Exception {
KeyStore trustStore = KeyStore.getInstance("jks");
InputStream inputStream = null;
try {
inputStream = new FileInputStream(jksFile);
trustStore.load(inputStream, null);
} finally {
inputStream.close();
}
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init(trustStore);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, new SecureRandom());
return sslContext.getSocketFactory();
}
public static void main(String[] args) throws Exception {
//ApsaraDB-CA-Chain.jks为证书文件名称
final SSLSocketFactory sslSocketFactory = createTrustStoreSSLSocketFactory("ApsaraDB-CA-Chain.jks");
//连接池的设置分别为实例的连接地址、端口号、超时设置、密码
JedisPool pool = new JedisPool(new GenericObjectPoolConfig(), "r-bp1zxszhcgatnx****.redis.rds.aliyuncs.com",
6379, 2000, "redistest:Test1234", 0, true, sslSocketFactory, null, null);
try (Jedis jedis = pool.getResource()) {
jedis.set("key", "value");
System.out.println(jedis.get("key"));
}
}
}
Python
下述示例代码以redis-py客户端为例,推荐使用最新版本。
说明 您需要根据注释提示修改代码。关于如何获取Tair实例的连接地址、端口号、密码,请参见准备工作中的步骤2。
#!/bin/python import redis #设置连接信息,分别将host、port、password的值分别替换为实例的连接地址、端口号、密码 #ApsaraDB-CA-Chain.pem为证书文件名称 client = redis.Redis(host="r-bp1zxszhcgatnx****.redis.rds.aliyuncs.com", port=6379, password="redistest:Test1234", ssl=True, ssl_cert_reqs="required", ssl_ca_certs="ApsaraDB-CA-Chain.pem") client.set("hello", "world") print client.get("hello")
#!/bin/python import redis #设置连接池,分别将host、port、password的值分别替换为实例的连接地址、端口号、密码 #ApsaraDB-CA-Chain.pem为证书文件名称 pool = redis.ConnectionPool(connection_class=redis.connection.SSLConnection, max_connections=100, host="r-bp1zxszhcgatnx****.redis.rds.aliyuncs.com", port=6379, password="redistest:Test1234", ssl_cert_reqs=True, ssl_ca_certs="ApsaraDB-CA-Chain.pem") client = redis.Redis(connection_pool=pool) client.set("hi", "redis") print client.get("hi")
PHP
以下示例以predis客户端为例,推荐使用最新版本。如果您使用的是phpredis客户端,连接示例请参见此issue。
说明 您需要根据注释提示修改代码。关于如何获取Tair实例的连接地址、端口号、密码,请参见准备工作中的步骤2。
<?php
require __DIR__.'/predis/autoload.php';
/* 设置连接信息,分别将host、port、password的值分别替换为实例的连接地址、端口号、密码
ApsaraDB-CA-Chain.pem为证书文件名称*/
$client = new Predis\Client([
'scheme' => 'tls',
'host' => 'r-bp1zxszhcgatnx****.redis.rds.aliyuncs.com',
'port' => 6379,
'password' => 'redistest:Test1234',
'ssl' => ['cafile' => 'ApsaraDB-CA-Chain.pem', 'verify_peer' => true],
]);
/* 依次替换下述代码中的连接地址和端口 */
//$client = new Predis\Client('tls://r-bp1zxszhcgatnx****.redis.rds.aliyuncs.com:6379?ssl[cafile]=ApsaraDB-CA-Chain.pem&ssl[verify_peer]=1');
$client->set("hello", "world");
print $client->get("hello")."\n";
?>
C#
以下示例以StackExchange.Redis客户端为例,推荐使用最新版本。
说明 您需要根据注释提示修改代码。关于如何获取Tair实例的连接地址、端口号、密码,请参见准备工作中的步骤2。
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using StackExchange.Redis;
namespace SSLTest
{
class Program
{
private static bool CheckServerCertificate(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
var ca = new X509Certificate2(
"/your path/ApsaraDB-CA-Chain/ApsaraDB-CA-Chain.pem");
return chain.ChainElements
.Cast<X509ChainElement>()
.Any(x => x.Certificate.Thumbprint == ca.Thumbprint);
}
static void Main(string[] args)
{
// 设置连接信息,分别将host、port、password的值分别替换为实例的连接地址、端口号、密码。
// ApsaraDB-CA-Chain.pem为证书文件名称。
ConfigurationOptions config = new ConfigurationOptions()
{
EndPoints = {"r-bp10q23zyfriodu*****.redis.rds.aliyuncs.com:6379"},
Password = "redistest:Test1234",
Ssl = true,
};
config.CertificateValidation += CheckServerCertificate;
using (var conn = ConnectionMultiplexer.Connect(config))
{
Console.WriteLine("connected");
var db = conn.GetDatabase();
db.StringSet("hello", "world");
Console.WriteLine(db.StringGet("hello"));
}
}
}
}