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密钥长度位数


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部