相关概念:
SSL通过在发送方和接收方之间建立加密通道,确保数据在传输过程中的安全性和完整性。
SSL的关键特点
加密通信:SSL使用对称和非对称加密技术来加密数据,确保数据在传输过程中不被窃听或篡改。
身份验证:通过数字证书验证通信双方的身份,确保数据发送给正确的接收方。
完整性保护:使用消息认证码(MAC)或散列函数来检查数据在传输过程中是否被修改。
SSL的组件
证书:SSL使用数字证书来验证服务器的身份。每个证书都包含服务器的公钥和身份信息。
证书颁发机构(CA):独立的第三方,用于验证和颁发数字证书,确保它们的可靠性和有效性。
加密算法:SSL使用多种加密算法,如RSA、AES和3DES,来加密和解密数据。
SSL的握手过程
客户端Hello:客户端发送一个包含其SSL版本和加密套件的请求。
服务器Hello:服务器响应客户端的请求,选择一个加密套件,并发送其证书。
密钥交换:客户端和服务器使用选定的加密套件交换密钥,以创建会话密钥。
会话建立:使用会话密钥加密和解密数据,确保数据的私密性和完整性。
CA,即Certificate Authority,数字证书中心。 是指具备一定资质条件的数字证书签发机构,包含根密钥和根证书, 其核心功能就是通过根密钥和根证书并使用一定的算法来”签发”和”管理”数字证书。
数字证书 通常是由相关的CA进行签发,安全性可以得到绝对可靠。通常情况下,数字证书中一般包含公钥并由CA对其进行数字签名,证书的作用也主要是用来证明公钥的真实性与合法性。
数字签名 数字签名是一种基于公钥加密技术的电子签名,用于确保数据的完整性和验证数据发送者的身份。它通过使用发送者的私钥对数据进行加密,接收者则使用发送者的公钥对签名进行解密和验证。
一、安装OPENSSL工具
下载openssl软件库包。
官网 https://www.openssl.org/source/old/
或者:软件下载地址:http://slproweb.com/products/Win32OpenSSL.html
双击运行Win64OpenSSL-3_3_2.exe文件,注意安装路径位置不要带有空格或者中文字符,其他默认下一步即可
注意在写安装路径的时候,不要用Program files路径,系统默认可能选择此路径。后续会报错:
报错:Can’t open “C:\Program Files\OpenSSL-Win64\bin” for reading, Permission denied
用管理员身份执行cmd也报错。
安装路径设置如下路径:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0ee92cf227bc4064adde777e994151df.pn
在这里插入图片描述
在这里插入图片描述
新建系统环境变量:
增加系统环境变量环境变量“OPENSSL_CONF”值为“C:\OpenSSL-Win64\bin\openssl.cfg”。
并将“并将“C:\OpenSSL-Win64\bin\”加到 path 环境变量中。”加到 path 环境变量中。
二、配置openssl.cfg文件
用记事本打开C:\OpenSSL\bin\路径下的openssl.cfg 文件
dir:所有生成的文件存放的默认路径
database:签发过的证书的列表文件
new_certs_dir:存放所有新签发的证书
serial:下一个要签发的证书的序号,第一个从1开始
certificate:CA的证书文件的名字
private_key:CA的私钥文件的名字
default_days:签发证书的默认有效期,365天会经常过期不能用了,我们手动设置为3650天。
default_bit:私钥默认的长度大小,1024不够安全,我们手动设置2048
三、安装JDK
下载地址:
官网下载地址 https://www.oracle.com/java/technologies/javase
四、生成CA私钥和自签名证书
切换到openssl的bin目录下:可以查看帮助菜单
执行以下的脚本:
set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
echo %OPENSSL_CONF%
rd /s /q 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
#echo 生成 ca 私钥(ca-key.pem)和 ca 自签名证书(ca-cert.pem),需输入 ca 私钥存储密码
openssl req -new -x509 -days 3650 -keyout cakey.pem -out cacert.pem -subj "/C=cn/ST=hubei/L=wuhan/O=dameng/OU=tech/CN=tech/emailAddress=tech@test.com"
执行脚本
call SSL.bat
本例设置的密码是123456。生成的ca私钥是ca-key.pem,自签名证书是:ca-cert.pem,都位于C:\OpenSSL-Win64\bin目录下面。
五、生成server端私钥和被ca签名的server数字证书
执行如下脚本:
备注:由于我直接执行会有乱码,所以一条一条的执行如下脚本
set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
echo %OPENSSL_CONF%
#生成server私钥 server-key.pem(无密码)
openssl genrsa -out server-key.pem 2048
#生成server证书请求server.csr
openssl req -new -key server-key.pem -out server.csr -subj "/C=cn/ST=hubei/L=wuhan/O=dameng/OU=tech/CN=server/emailAddress=server@demeng.com"
#生成 server经ca签名的证书server-cert.pem
openssl ca --days 365 -in server.csr -out server-cert.pem
#将server可信证书转换为格式X509格式
openssl x509 -in server-cert.pem -out server.cer
copy cacert.pem server_ssl\
copy cakey.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\
报错:Could not open file or uri for loading CA private key from ./CA/private/cakey.pem: No such file or directory
将cakey.pem以及cacert.pem复制到/CA/private/目录
执行过程中,当要求输入 cakey.pem 的存储私钥时,请输入前面设置的“123456”。
openssl ca --days 365 -in server.csr -out server-cert.pem
六、生成用户私钥和被ca签名的用户数字证书
此处的用户名为 SYSDBA,若是其他用户名只需全局替换用户名即可。在上述命令行程序中继续执行下述语句:
set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
echo %OPENSSL_CONF%
mkdir .\SYSDBA
#生成SYSDBA 私钥 client-key.pem
openssl genrsa -out SYSDBA/client-key.pem 2048
#生成SYSDBA证书请求client.csr
openssl req -new -key SYSDBA/client-key.pem -out SYSDBA/client.csr -subj "/C=cn/ST=hubei/L=wuhan/O=dameng/OU=tech/CN=SYSDBA/emailAddress=SYSDBA@dameng.com"
#生成SYSDBA经ca签名证书client-cert.pem
openssl ca --days 365 -in SYSDBA/client.csr -out SYSDBA/client-cert.pem
#将X509格式的 client-key.pem 和 client-cert.pem 合并转换为 pkcs12 格式的文件client-pkcs.p12
#务必输入export password为 changeit(小写)
openssl pkcs12 -export -inkey SYSDBA/client-key.pem -in SYSDBA/client-cert.pem -out SYSDBA/client-pkcs.p12
keytool -import -alias ca -trustcacerts -file ca-cert.pem -keystore SYSDBA/.keystore -deststorepass changeit -noprompt
keytool -import -alias server -trustcacerts -file server.cer -keystore SYSDBA/.keystore -deststorepass changeit -noprompt
keytool -v -importkeystore -srckeystore SYSDBA/client-pkcs.p12 -srcstoretype PKCS12 -keystore SYSDBA/.keystore -deststorepass changeit
copy ca-cert.pem SYSDBA\
move SYSDBA client_ssl\
注:执行过程中,当要求输入 cakey.pem 的存储私钥时,请输入“123456”,当要求输入 pkcs.p12 的 export password 时,请务必输入小写的“changeit”。
若需生成多个用户则全局替换用户名之后,再次执行,一个用户名只能执行一次,执行两次或以上会出现错误;
最后将目录下的server_ssl和client_ssl文件夹都拷贝到dmdbms\bin\目录下即可使用。