DM客户端使用OpenSSL连接数据库
OpenSSL基础知识:http://www.blogjava.net/yxhxj2006/archive/2012/10/15/389547.html
OpenSSL命令详解:
http://blog.csdn.net/boss666666/article/details/10284649
步骤:
1、安装Win32OpenSSL-1_0_1g,安装过程中如果提示需要安装Visual C++ 2008 Redistributables。那么可以在微软的官网下载。这里我在安装Win32OpenSSL的时候路径为C:\OpenSSL。添加环境变量” OPENSSL_CONF”值为“C:\OpenSSL\bin\openssl.cfg“,或者在后面的生成证书的cmd窗口使用set命令来设置。
2、确保安装了JDK,并将JDK下的keytool.exe所在的文件路径加到path环境变量中去。如果没有,你可以用dmdbms自带的jdk,例如,将c:\dmdbms\jdk\bin加入到path环境变量中去。
3、配置openssl.cfg[U1] 文件
用记事本打开C:\OpenSSL\bin\路径下的openssl.cfg文件,然后在[ CA_default ]一节 修改如下的配置项(红色加粗字体表示手动配置的项,其他的均为默认值)。
[ CA_default ]
dir = ./ca # Where everything is kept ################
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt[U2] # database index file. ################
#unique_subject = no # Set to ‘no’ to allow creation of
several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs. ################
certificate = $dir/private/ca-cert.pem[U3] #The CA certificate ################
serial = $dir/serial [U4] # The current serial number
crlnumber = $dir/crlnumber # the current crl number
must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/ca-key.pem[U5] # The private key ################
RANDFILE = $dir/private/.rand[U6] # private random number file################
4、生成对应目录
打开cmd
cd C:\OpenSSL\bin
mkdir .\ca
mkdir .\ca\newcerts
mkdir .\ca\private
copy nul ca\index.txt
mkdir server_ssl
mkdir client_ssl
mkdir client_ssl\SYSDBA
set /p=“01”>ca\serial[U7]
5、生成CA私钥和根证书
这里会要求输入CA私钥的存储密码,我设置的是123456
openssl req -new -x509 -days 3650 -keyout [U8] ca\private\ca-key.pem -out [U9] ca\private\ca-cert.pem -subj “/C=cn/ST=hubei/L=wuhan/O=dameng/OU=developer/CN=fhx/emailAddress=fhx@demeng.com”
6、生成server端的私钥和被CA签名的server端数字证书
首先构建服务器私钥(需要输入服务器私钥存储密码,我的是server):
openssl genrsa [U10] -aes256 [U11] -out server_ssl\server-key.pem 1024[U12]
然后生成服务器证书签发申请(这里会提示输入服务器私钥存储密码,我的是server):
openssl req -new -key server_ssl\server-key.pem -out server_ssl\server.csr -subj “/C=cn/ST=hubei/L=wuhan/O=dameng/OU=developer/CN=server/emailAddress=server@demeng.com”
自此,我们已经获得了根证书和签发申请,可以使用该根证书签发服务器证书(这里会提示你输入CA私钥的存储密码,我的是123456?,)
openssl ca[U13] -startdate 20120531235959-0700 -enddate 20220531235959-0700 -in server_ssl\server.csr -out server_ssl\server-cert.pem
这里我们同样需要将OpenSSL产生的数子证书转化为X509编码格式。完整命令如下(这里要输入server的私钥密码)
openssl x509 -in server_ssl\server-cert.pem -out server_ssl\server.cer
最后将CA的自签名证书拷贝到server_ssl中。
copy ca\private\ca-cert.pem server_ssl\
7、生成用户私钥和被CA签字的用户数字证书(假设客户端用户是SYSDBA)
首先生成该用户的私钥密码(这里会提示输入客户端私钥存储密码,我的密码是SYSDBA,如果不需要密码,那么就不要-aes256选项)
openssl genrsa -aes256[U14] -out client_ssl\SYSDBA\client-key.pem 1024[U15]
然后生成客户证书的签发申请(这里会提示输入客户端私钥存储密码,输入设置好的SYSDBA)
openssl req -new -key client_ssl\SYSDBA\client-key.pem -out client_ssl\SYSDBA\client.csr -subj “/C=cn/ST=hubei/L=wuhan/O=dameng/OU=developer/CN=SYSDBA/emailAddress=SYSDBA@dameng.com”
接着生成经过CA签名的客户证书(这里会提示你输入CA私钥的存储密码,我的是123456)
openssl ca -startdate 20120531235959-0700 -enddate 20220531235959-0700 -in client_ssl\SYSDBA\client.csr -out client_ssl\SYSDBA\client-cert.pem
接着将之前生成的X509格式的client-key.pem和client-cert.pem合并转换为pkcs12格式的文件client-pkcs.p12,务必输入export password为changeit(小写)(这里可能会提示客户端私钥密码,我的是SYSDBA)
openssl pkcs12 -export -inkey client_ssl\SYSDBA\client-key.pem -in client_ssl\SYSDBA\client-cert.pem -out client_ssl\SYSDBA\client-pkcs.p12
然后生成通过jdbc访问需要的.keystore文件:
keytool -import -alias ca -trustcacerts -file ca\private\ca-cert.pem -keystore client_ssl\SYSDBA.keystore -deststorepass changeit -noprompt
keytool -import -alias server -trustcacerts -file server_ssl/server.cer -keystore client_ssl\SYSDBA.keystore -deststorepass changeit -noprompt
下面的命令会提示输入源密钥库口令,输入changeit即可。
keytool -v -importkeystore -srckeystore client_ssl\SYSDBA\client-pkcs.p12 -srcstoretype PKCS12 -keystore client_ssl\SYSDBA.keystore\ -deststorepass changeit
最后将CA自签名认证拷贝到client_ssl\SYSDBA文件夹中
copy ca\private\ca-cert.pem client_ssl\SYSDBA\
至此,完成了所有SSL证书生成工作。下面需要将这些证书部署到指定的客户端和服务端上。
8、部署server端证书
将以上server_ssl中的ca-cert.pem(CA自签名证书),server-cert.pem(服务端数字证书),server-key.pem(服务端私钥)拷贝到服务器的达梦数据库安装目录/bin/server_ssl下。或者将其中的全部文件拷贝过去也可以。
9、部署client端证书
将以上client_ssl中的ca-cert.pem(CA自签名证书),client-cert.pem(服务端数字证书),client-key.pem(服务端私钥),.keystore(密钥库文件)拷贝到达梦数据库客户端安装目录/bin/ client _ssl下。或者将其中的全部文件拷贝过去也可以。
备注:如果是通过jdbc接口来加密访问数据库,是使用的.keystore文件,如果是通过ODBC或者其他方式加密访问数据库,那么是使用ca-cert.pem、client-cert.pem和client-key.pem三个文件。
备注2:如果服务端的私钥是带存储密码的,那么启动服务器的时候一定要使用命令行方式来启动,即dmserver c:\dmdbms\data\DAMENG\dm.ini,否则不能开启通信加密,因为,只有这种方式才会让你输入服务端私钥的密码。
另外,如果要使用jdbc以SSL方式连接数据库,jdbcUrl需要改成:
jdbcUrl=jdbc:dm://192.168.1.116:5236?sslFilesPath=D:/dmdbms/bin/client_ssl/SYSDBA
其中D:/dmdbms/bin/client_ssl/SYSDBA目录存放SYSDBA的用户私钥和数字证书。
[U1]在使用OpenSSL生成证书之前,需要先配置文件中的默认项。如果在生成证书的过程中没有指定证书的名称,那么就会按照这个默认的值来代替。另外,在生成服务端证书和客户端证书的时候,会使用到CA自签名证书,会默认到该配置文件指定的地方去找。
[U2]OpenSSL会把所有生成的证书条目写入这个文档中
[U3] [U3]默认的CA自签名证书
[U4]在生成服务端证书和客户端证书的时候需要该序列文件
[U5]默认的CA私钥文件
[U6]在生成CA私钥之前需要先生成随机数字文件。
[U7]在cfg位置生成序列文件
[U8]创建私钥文件
[U9]创建根证书
[U10]生成RSA密钥
[U11]使用AES算法(256位密钥)对产生的私钥加密,如果不希望对私钥加密,那么可以去掉该参数
[U12] [U12]指RSA密钥长度位数
[U13]模拟自己就是CA,不过估计是nobody trusted CA
[U14]使用AES算法(256位密钥)对产生的私钥加密,如果不希望对私钥加密,那么可以去掉该参数
[U15] [U15]指RSA密钥长度位数
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
