首页 数据库

写在前面

OPENSSL:
OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
加密通信:
关于加密通信这里不做过多的讲解,消息通信时都需要加密,如果不加密,在请求和响应的过程中,如果消息中途被黑客劫持或篡改后果不堪设想;加密通信可以采用的方式有两种,一种是对称加密,一种是非对称或者叫公钥加密。对称加密的特点是发送方和接收方采用相同的 key ,非对称加密发送方和接收方采用的是不同的 key。

0228.jpg
02281.jpg

一、准备工作:

制作证书所需相关工具如下:

操作系统:OPENSSL:JAVA
Windows7 64位OpenSSL 1.1.1i 8 Dec 2020JAVA SE Development Kit7

注:JAVA会默认安装在C:Program Files (x86)Javajdk1.7.0_13中,但是后面在pkcs12 格式文件转换时,在cmd窗口输入C:Program Files (x86)时会报错'C:Program' 不是内部或外部命令,也不是可运行的程序,原因为Program Files中间有空格,导致了该路径被作为一条命令被执行了,解决办法:安装完成后将整个Java目录拷贝至C:Java便于后期调用。

(1)需要配置Windows操作系统的系统环境变量

修改与添加环境变量方法:
11111111.png

具体配置值如下:
新建系统变量JAVA_HOME 和CLASSPATH

JAVA_HOMEC:Javajdk1.7.0_13
CLASSPATHC:ProgramFiles(x86)Javajdk1.7.0_13libtools.jar;C:ProgramFiles (x86)Javajdk1.7.0_13libdt.jar

注:其中变量值为你自己安装jdk的文件目录
选择“系统变量”中变量名为“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################

注:我在操作时将上方星号的修改项在C:Program Files (x86)OpenSSL-Win32bincnfopenssl.cnf文件中也对应的做了更改。如果不改可能会造成openssl的bin目录下生成的ca-cert.pem为cacert.pem缺少“-”导致cmd无法调用。

三、制作证书

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

2.png

>set /p="01"<nul>>ca\serial
>mkdir server_ssl
>mkdir client_ssl

3.png

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"

注:最后一条命令执行过程会要求用户输入长度大于等于4字符的ca私钥存储密码,我们统一输入“123456”。记住:这个ca私钥的存储密码在给各个用户签名时还要用
4.png

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"

5.png

rem 生成 server 经 ca 签名证书 server-cert.pem

>openssl ca -startdate 20120531235959-0700 -enddate 20220531235959-0700 -in server.csr -out server-cert.pem

6.png

注:这里会报错,是由于rem 生成server经ca签名证书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

7.png

注:这里还是会报错,打开openssl的bin目录会发现生成的ca-key.pem文件名为cakey.pem缺少“-”手动修改文件名后再执行
8.png

9.png

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\

10.png

注:执行过程中,当要求输入 cakey.pem 的存储私钥时,请输入“123456”

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"

11.png

注:这时,又会报错文件名不对,手动修改文件名后再次执行
12.png

rem 生成 TEST 经 ca 签名证书 client-cert.pem(ca-key.pem:一定要输123456)

>openssl ca -startdate 20120531235959Z -enddate 20220531235959Z -in TEST/client.csr -out TEST/client-cert.pem

13.png

rem 将 X.509 格式的 client-key.pem 和 client-cert.pem 合并转换为 pkcs12 格式的文件 client-pkcs.p12 rem 务必输入 export password 为 changeit(小写)

>openssl  pkcs12  -export  -inkey  TEST/client-key.pem  -in  TEST/client-cert.pem  -out TEST/client-pkcs.p12

14.png

C:\Java\jdk1.7.0_13\bin\keytool -import -alias ca1 -trustcacerts -file ca-cert.pem -keystore TEST/.keystore -deststorepass changeit -noprompt

15.png

C:\Java\jdk1.7.0_13\bin\keytool -import -alias server -trustcacerts -file server.cer -keystore TEST/.keystore -deststorepass changeit -noprompt

16.png

C:\Java\jdk1.7.0_13\bin\keytool  -v  -importkeystore  -srckeystore  TEST/client-pkcs.p12  -srcstoretype  PKCS12  -keystore TEST/.keystore -deststorepass changeit

17.png

>copy ca-cert.pem TEST\
>move TEST client_ssl\

18.png

注:执行过程中,当要求输入 ca-key.pem 的存储私钥时,请输入“123456”,当要求输入 pkcs.p12 的 export password 时,请务必输入小写的“changeit”。
19.png

20.png

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目录中
测试效果如下:
21.png

21.png

22.png

数据库通信加密测试

Windows直接使用Wireshark软件,Linux环境使用tcpdump进行抓包,然后使用Wireshark打开抓包数据进行查看验证或者直接查看文件简单搜索进行比较。

未加密:

jmcs.png

jmcs1.png

加密:

jmcs2.png

以上证书制作就完成了,感兴趣的胖友可以自己动手尝试一下呢,以下为相关工具的下载地址,可以自行提取:
Openssl:
链接:https://pan.baidu.com/s/1IuGOafrgkZCoXla1pbMIpA
提取码:40ir
(2)JAVA
JAVA1.7:
链接:https://pan.baidu.com/s/12Bv8phPiG7MMuszLccuFUA
提取码:bhf7


文章评论