GBase 8a集群SSL配置-集群配置部分,包括正式生成,参数配置部分。
目录导航
要求
加密功能要求系统中安装openssl库,能够执行openssl命令
整体说明
生成CA私钥和公开的证书,服务器端私钥和CSR,客户端私钥和CSR。
然后用CA的私钥和证书给服务器CSR和客户端CSR做认证,生成服务器证书和客户端证书。
这样,服务器和客户端是同一个CA签发认证的,可以用CA的公开证书验证服务器证书和客户端证书是否有效。
生成CA的私钥和公开证书
如果有正式CA机构,则直接获取ca-cert.pem证书,无需再生成私有CA。同时后面的CSR要提交给CA机构进行签发获得服务器端证书server-cert.pem和客户端证书client-cert.pem。
生成CA的私钥 ca-key.pem
在集群server端系统中,根据需要选择生成ssl密钥的目录,以路径/usr/local/ssl为例
*如果没有ssl目录,需手工创建
进入目录
| $ cd /usr/local/ssl |
使用rsa非对称加密算法生成2048位的服务端私钥ca-key.pem
| $ openssl genrsa 2048 > ca-key.pem Generating RSA private key, 2048 bit long modulus …………………………………………………………………………………..+++ ………………………………………………………………………………………………………………….+++ e is 65537 (0x10001) |
如下是笔记本虚拟机生成密钥的内容例子
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAp+FDEgSvreNEko4EKp6xdoLzO8+0gUNd8/6GzunHGyTxVb2N
。。。。。。
XMVjA+GhDAXxYKFydbZ8ReagXIjl1dcf0s0lzLtJsIj0PANeAYJMfJPyPGdekr2q
nz4DzhNiH+kEoKbpZjC87G9pAzReLhTsOoILCpITyW14rmIqGt1e
-----END RSA PRIVATE KEY-----
使用CA私钥,生成自签名的服务端证书ca-cert.pem
需要填写Country Name等信息,本例按照下面方式填写,也可以依据用户实际情况填写,以下是参数说明:
reg: 该指令用来创建和处理PKCS#10格式的证书以及自签名证书,做Root CA
-sha256: 证书采用SHA256哈希算法
-nodes:如果该选项被指定,如果私钥文件已经被创建则不用加密。
-new:本选项产生一个新的CSR,它会要用户输入创建CSR的一些必须的信息
-x509:本选项将产生自签名的证书,即Root CA
-days:指定自签名证书的有效期限。默认为30天。
-key:证书私钥文件的来源
| $ openssl req -sha256 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [XX]:11 State or Province Name (full name) []:1 Locality Name (eg, city) [Default City]:1 Organization Name (eg, company) [Default Company Ltd]:1 Organizational Unit Name (eg, section) []:1 Common Name (eg, your name or your server's hostname) []:1 Email Address []:1 |
证书里包含了如下内容,最重要的是有CA的公钥。其它使用者可以用这个公钥来加密。
CA根证书
├── 证书元数据(版本、序列号、有效期、签发者、主体)
├── 公钥信息(这就是你问的CA公钥)
│ ├── 公钥算法:RSA
│ ├── 公钥长度:2048位
│ ├── 公钥模数n(和ca-key.pem里的模数完全相同)
│ └── 公钥指数e(通常是65537)
├── 扩展字段(CA:TRUE、密钥用法等)
└── 数字签名(用ca-key.pem里的私钥对以上所有内容的哈希值签名)
如下是笔记本虚拟机生成证书的内容样例:
-----BEGIN CERTIFICATE-----
MIIDlzCCAn+gAwIBAgIUBaFWkE4SOr04r5QPkNRCA6Yr3DowDQYJKoZIhvcNAQEL
BQAwWzELMAkGA1UEBhMCMTExCjAIBgNVBAgMATExCjAIBgNVBAcMATExCjAIBgNV
。。。。。。
oXCU57JZwQHYbRZOpR0BOZuwywTglbD0pltXSfVWVUQ8/tykgjwwgK8MQWx3o4VT
Y+pA3bQ1Wbc7FiQ=
-----END CERTIFICATE-----
[gbase@vm161 cert]$
生成服务器端私钥,证书
生成服务器端私钥server-key.pem和服务器证书签名请求server-req.pem
同样填写一些信息,password部分(A challenge password []: )建议填写复杂一些的密码
-newkey rsa:bits:用于生成新的rsa密钥以及证书请求。如果用户不知道生成的私钥文件名称,默认采用privkey.pem,生成的证书请求。如果用户不指定输出文件(-out),则将证书请求文件打印在屏幕上。生成的私钥文件可以用-keyout来指定。生成过程中需要用户输入私钥的保护口令以及证书申请中的一些信息。
-keyout :指明创建的新的私有密钥文件的文件名。
| $ openssl req -sha256 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem Generating a 2048 bit RSA private key ……….+++ ……………………………………………………………………..+++ writing new private key to 'server-key.pem' You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [XX]:11 State or Province Name (full name) []:1 Locality Name (eg, city) [Default City]:1 Organization Name (eg, company) [Default Company Ltd]:1 Organizational Unit Name (eg, section) []:1 Common Name (eg, your name or your server's hostname) []:1 Email Address []:1 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 An optional company name []:1 |
证书签名请求CSR的内部信息如下:向 CA 证明你拥有某个公钥对应的私钥,并提供你希望写入证书的身份信息。
PKCS#10 证书签名请求
├── 1. 可分辨名称(DN):申请者的身份信息
├── 2. 公钥信息:申请者生成的公钥
├── 3. 扩展属性:可选的附加信息(现代证书必备)
└── 4. 申请者签名:用申请者私钥对以上所有内容的签名
移除服务器私钥server-key.pem的密码保护
建议原始私钥先备份,其有密码保护,即使丢失也是安全的。
-out filename:输出证书请求文件
-in filename:输入的证书请求文件
| $ openssl rsa -in server-key.pem -out server-key.pem writing RSA key |
生成密钥时,openssl 会默认用 AES 加密私钥,每次使用这个私钥时,都需要输入密码才能解密。而后台进程无法输入密码,所以通过这个方法移除密码保护。
CA给服务器端CSR签名生成服务器端证书server-cert.pem
CA 用自己的私钥给服务器的证书请求 (CSR) 签名,生成正式有效的服务器数字证书
-set_serial n:设置生成证书的证书序列号
| $ openssl x509 -sha1 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem Signature ok subject=/C=11/ST=1/L=1/O=1/OU=1/CN=1/emailAddress=1 Getting CA Private Key |
生成客户端私钥和证书
生成服务器端证书client-key.per和请求client-req.pen
在服务端,在同一目录下,生成client端的密钥和证书:
生成密钥,输入信息与server端相同
| $ openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem Generating a 2048 bit RSA private key ……………………………………………………….+++ ………+++ writing new private key to 'client-key.pem' You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [XX]:11 State or Province Name (full name) []:1 Locality Name (eg, city) [Default City]:1 Organization Name (eg, company) [Default Company Ltd]:1 Organizational Unit Name (eg, section) []:1 Common Name (eg, your name or your server's hostname) []:1 Email Address []:1 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 An optional company name []:1 |
去掉客户端私钥client-key.pem的密码保护
| $ openssl rsa -in client-key.pem -out client-key.pem writing RSA key |
CA给客户端CSR签名生成client-cert.pem证书
| $ openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem Signature ok subject=/C=11/ST=1/L=1/O=1/OU=1/CN=1/emailAddress=1 Getting CA Private Key |
数据库Server端设置
修改服务端上集群层配置文件gbase_8a_gcluster.cnf,在[gbased]里添加ssl信息,以路径/usr/local/ssl 为例,如下方红字所示
| $ vi /opt/gcluster/config/gbase_8a_gcluster.cnf [client] port=5258 socket=/tmp/gcluster_5258.sock connect_timeout=43200 default-character-set=gbk [gbased] basedir = /opt/gcluster/server datadir = /opt/gcluster/userdata/gcluster socket=/tmp/gcluster_5258.sock pid-file = /opt/gcluster/log/gcluster/gclusterd.pid default-character-set=gbk ssl-ca=/usr/local/ssl/ca-cert.pem ssl-cert=/usr/local/ssl/server-cert.pem ssl-key=/usr/local/ssl/server-key.pem log-error port=5258 core-file |
查看配置是否成功
重启集群服务:
# service gcware restart
登陆集群:
| $ gccli -uroot -p Enter password: GBase client 8.6.1.1 build 65304. Copyright (c) 2004-2016, GBase. All Rights Reserved. gbase> |
查看ssl参数状态,配置成功则显示为“YES”:
| gbase> show variables like 'have_%ssl'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_openssl | YES | | have_ssl | YES | +---------------+-------+ 2 rows in set (Elapsed: 00:00:00.00) |