写在前面
OPENSSL:
OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
加密通信:
关于加密通信这里不做过多的讲解,消息通信时都需要加密,如果不加密,在请求和响应的过程中,如果消息中途被黑客劫持或篡改后果不堪设想;加密通信可以采用的方式有两种,一种是对称加密,一种是非对称或者叫公钥加密。对称加密的特点是发送方和接收方采用相同的 key ,非对称加密发送方和接收方采用的是不同的 key。
一、准备工作:
制作证书所需相关工具如下:
操作系统: | OPENSSL: | JAVA | |
Windows7 64位 | OpenSSL 1.1.1i 8 Dec 2020 | JAVA SE Development Kit7 |
(1)需要配置Windows操作系统的系统环境变量
具体配置值如下:
新建系统变量JAVA_HOME 和CLASSPATH
JAVA_HOME | C:Javajdk1.7.0_13 |
CLASSPATH | C:ProgramFiles(x86)Javajdk1.7.0_13libtools.jar;C:ProgramFiles (x86)Javajdk1.7.0_13libdt.jar |
选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。
Path | %JAVA_HOME%bin;%JAVA_HOME%jrebin; |
二、配置 openssl.cfg 文件
用记事本打开 C:Program Files (x86)OpenSSL-Win32bin路径下的 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*** # 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 = ca-cert.pem*** #The CA certificate ################
serial = $dir/serial # 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 = ca-key.pem*** # The private key ################
***RANDFILE = $dir/private/.rand*** # private random number file################
三、制作证书
1.打开 cmd.exe,用“cd C:Program Files (x86)OpenSSL-Win32bin”命令,切换到 C:OpenSSLbin 目录下,执行如下命令:
>set OPENSSL_CONF=C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.cfg
>echo %OPENSSL_CONF%
>rd /s /q ca --删除ca文件夹
>mkdir .\ca
>mkdir .\ca\newcerts
>mkdir .\ca\private
>copy nul ca\index.txt
>set /p="01"<nul>>ca\serial
>mkdir server_ssl
>mkdir client_ssl
2.echo 生成 ca 私钥(ca-key.pem)和 ca 自签名证书(ca-cert.pem),需输入 ca 私钥存储密码
>openssl req -new -x509 -days 3650 -keyout cakey.pem -out ca-cert.pem -subj "/C=cn/ST=hubei/L=wuhan/O=dameng/OU=developer/CN=fhx/emailAddress=fhx@demeng.com"
3.生成server端私钥和被ca签名的server数字证书,在上述命令行程序中继续执行下述语句:
>set OPENSSL_CONF=C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.cfg
>echo %OPENSSL_CONF%
rem 生成 server 私钥 server-key.pem,输入私钥密码
>openssl genrsa -out server-key.pem 1024
rem 生成 server 证书请求 server.csr
>openssl req -new -key server-key.pem -out server.csr -subj "/C=cn/ST=hubei/L=wuhan/O=dameng/OU=developer/CN=server/emailAddress=server@demeng.com"
>openssl ca -startdate 20120531235959-0700 -enddate 20220531235959-0700 -in server.csr -out server-cert.pem
openssl ca -startdate 201110000000Z -enddate 301110000000Z -in server.csr -out server-cert.pem
这种方式生成的有GMT标识,时间参数为YYMMDDHHMMSSZ,其中的Z和java语言中时间格式的Z含义一致,表示UTC国际标准时间(也称GMT)如果需要证书带GMT格式且有效期需要人工指定,那么-startdate和--enddate 参数值需要严格按照YYMMDDHHMMSSZ格式要求书写,所以修改时间字符如下
>openssl ca -startdate 20120531235959Z -enddate 20220531235959Z -in server.csr -out server-cert.pem
4.server 可信证书转换为格式 X509
>openssl x509 -in server-cert.pem -out server.cer
>copy ca-cert.pem server_ssl\
>copy ca-key.pem server_ssl\
>copy server.csr server_ssl\
>copy server.cer server_ssl\
>copy server-cert.pem server_ssl\
>copy server-key.pem server_ssl\
5.生成用户私钥和被ca签名的用户数字证书
此处的用户名为 TEST,若是其他用户名只需全局替换用户名即可。
在上述命令行程序中继续执行下述语句:
>set OPENSSL_CONF=C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.cfg
>echo %OPENSSL_CONF%
>rd /s /q TEST --删除TEST的文件夹
>mkdir .\TEST
rem 生成 TEST 私钥 client-key.pem,输入私钥密码
>openssl genrsa -out TEST/client-key.pem 1024
rem 生成 TEST 证书请求 client.csr
>openssl req -new -key TEST/client-key.pem -out TEST/client.csr -subj "/C=cn/ST=hubei/L=wuhan/O=dameng/OU=developer/CN=TEST/emailAddress=TEST@dameng.com"
>openssl ca -startdate 20120531235959Z -enddate 20220531235959Z -in TEST/client.csr -out TEST/client-cert.pem
>openssl pkcs12 -export -inkey TEST/client-key.pem -in TEST/client-cert.pem -out TEST/client-pkcs.p12
C:\Java\jdk1.7.0_13\bin\keytool -import -alias ca1 -trustcacerts -file ca-cert.pem -keystore TEST/.keystore -deststorepass changeit -noprompt
C:\Java\jdk1.7.0_13\bin\keytool -import -alias server -trustcacerts -file server.cer -keystore TEST/.keystore -deststorepass changeit -noprompt
C:\Java\jdk1.7.0_13\bin\keytool -v -importkeystore -srckeystore TEST/client-pkcs.p12 -srcstoretype PKCS12 -keystore TEST/.keystore -deststorepass changeit
>copy ca-cert.pem TEST\
>move TEST client_ssl\
6.证书的使用
修改dm.ini文件中的enable_enecrypt=1打开OPENSSL登录
将操作系统Openssl文件夹中生成的client_ssl文件夹中对应的用户目录拷贝到/home/dmdba/dmdbms/bin/client_ssl/TEST
将操作系统Openssl文件夹中生成的server_ssl文件夹中的文件拷贝到/home/dmdba/dmdbms/bin/server_ssl目录中
测试效果如下:
数据库通信加密测试
Windows直接使用Wireshark软件,Linux环境使用tcpdump进行抓包,然后使用Wireshark打开抓包数据进行查看验证或者直接查看文件简单搜索进行比较。
未加密:
加密:
以上证书制作就完成了,感兴趣的胖友可以自己动手尝试一下呢,以下为相关工具的下载地址,可以自行提取:
Openssl:
链接:https://pan.baidu.com/s/1IuGOafrgkZCoXla1pbMIpA
提取码:40ir
(2)JAVA
JAVA1.7:
链接:https://pan.baidu.com/s/12Bv8phPiG7MMuszLccuFUA
提取码:bhf7
评论已关闭