UXDB内在地支持客户端/服务器之间的SSL连接。为了使用SSL连接,下面几个前提条件是需要满足的:
首先需要UXDB在编译时支持SSL,目前澳门游戏平台注册网站的Linux和 Windows版本UXDB均满足这个要求。
客户端和服务器端均要安装OPENSSL。一般Linux系统已经安装了OPENSSL。Windows上如果没有安装的话,可以从网上下载OPENSSL的安装包进行安装。
启用SSL连接时,服务器和客户端之间可以进行相互认证。
一般情况下,是否建立SSL连接是客户端的选择。但是,也可以在服务器端修改配置文件ux_hba.conf,强制某些或者全部连接使用SSL。具体怎么设置可参照ux_hba.conf文件的说明。
客户端/服务器之间的身份认证依赖于证书。这里,澳门游戏平台注册网站首先生成自签名的证书,然后分别为服务器和客户端生成各自的证书和私钥。
证书存放位置
CA的证书root.crt,服务器的证书和私钥server.crt和server.key都应该放在集群目录,例如集群路径是/home/uxdb/uxdbinstall/uxsql/bin/uxdb_00,服务器证书应该存放在同一目录uxdb_00下面。
客户端证书uxsinodb.crt ,私钥uxsinodb.key,以及认证服务器根证书root.crt应该放在:对于linux系统,位置是~/.uxsinodb目录;对于windows系统,位置是%APPDATA%\uxsinodb。
生成证书
这里在服务器上生成所有的证书和私钥,这当然不是必须的。
进入集群目录:
#cd uxdb_00
生成RSA私钥:
openssl genrsa -des3 -out server.key 1024
为了在以后使用这个key,删除在上面添加的密码。通过如下命令实现:
openssl rsa -in server.key -out server.key
为您的私钥文件设置适当的权限和所有权:
chmod 600 server.key
需要创建基于server.key文件的服务器证书:
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=US/ST=California/L=PaloAlto/O=Jelastic/CN=mysite.com/emailAddress=mail@jelastic.com'
为了得到自己签名的证书,把生成的服务器证书作为受信任的根证书,只需要复制并取一个合适的名字:
cp server.crt root.crt
利用服务器CA证书,澳门游戏平台注册网站生成客户端的证书和私钥,当前目录仍是集群目录。
生成客户端的证书请求和客户端的私钥:
openssl req -new -nodes -text -out uxsinodb.csr -keyout uxsinodb.key -subj "/CN=192.168.1.100 "
其中192.168.1.100是唯一标识客户端的标识符,这里取它的IP。
修改权限:
chmod og-rwx uxsinodb.key
生成由CA签名的客户端证书:
openssl x509 -req -in uxsinodb.csr -text -days 365 -CA root.crt -CAkey server.key -CAcreateserial -out uxsinodb.crt
这里澳门游戏平台注册网站用CA的证书root.crt和CA的私钥server.key签署证书。
最后,澳门游戏平台注册网站把uxsinodb.crt,uxsinodb.key和root.crt(服务器CA的证书)一起拷贝到客户端目录。
为了使服务器启用SSL连接,需要修改配置文件
uxsinodb.conf
参数ssl必须设置为on。ssl_cert_file和ssl_key_file的默认值分别是server.crt和server.key,如果前面生成的server证书是其它名字,需要设置这两个参数的值。ssl_ca_file代表根证书的名字。如果按照前面的方法生成证书,那么此处把参数值修改为root.crt。
ssl_cert_file = 'server.crt' ssl_key_file = 'server.key' ssl_ca_file = 'root.crt'
ux_hba.conf
这个文件是可以不用修改。默认情况下,服务器同时监听SSL连接和非SSL连接。
如果强制使用或不使用SSL连接,可设置相应的hostssl和hostnossl记录。 可以是hostssl记录上使用认证选项clientcert=1。这样强制客户端发送自己的证书,服务器用它鉴别客户端的身份。当hostssl记录没有使用认证选项clientcert=1时,只要客户端指定位置下存在合法的证书,仍然建立SSL连接。
# IPv4 local connections: #host all all 0.0.0.0/0 md5 hostssl all all 0.0.0.0/0 md5 clientcert=1
可以用多种客户端建立连接,比如uxsql,uxdbAdmin等。以uxsql为例:
./uxsql -h 192.168.1.99
如果客户端指定目录下存放正确的证书和私钥,那么建立的连接就是SSL。
./uxsql -h 192.168.1.99 "sslmode=require"
这是建立ssl连接,启用加密,但是不进行服务器认证。
./uxsql -h 192.168.1.99 "sslmode=verify-ca"
启用加密,而且认证服务器的身份。
linux上local连接无法使用SSL
SSL是TCP/IP连接,如果是同一台linux电脑上运行客户端和服务器,那么是无法建立SSL连接的。
防火墙
服务器必须允许在服务器监听端口上的TCP/IP连接,客户端才能连接数据库。 也可直接关闭防火墙。命令:
systemctl stop firewalld
查看openssl配置文件的位置
openssl version -d
其中,OPENSSLDIR: "/etc/pki/tls"是配置文件的位置。