这是当时构建系统框架时,写的一份接入配置手册,摘选部分内容现发上来与大家分享下。
-
目标
DSPS系统,通过数字签名的方式来完成客户端与服务端之间的数据安全传输,以保数据的完整性和不可抵赖性。
所谓数字签名就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹或数字摘要)进行 RSA 算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH 函数)生成的,对这些 HASH 函数的特殊要求是:
- 接受的输入报文数据没有长度限制;
- 对任何输入报文数据生成固定长度的摘要(数字指纹)输出
- 从报文能方便地算出摘要;
- 难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要;
- 两个不同的报文难以生成相同的摘要
-
流程
-
步骤
1. 客户端生成自签名证书
使用JDK自带工具keytool生成自签名证书,keytool工具的详细使用方法,请自行参考帮助文档。
命令:keytool -genkeypair -alias client -keyalg RSA;
命令说明:keyalg是加密算法,有DSA,RSA,默认是DSA,因为DSA只能用于加密,不能用户证书签名,所以这里必须指定使用RSA算法
2.客户端生成证书请求
通过自签名证书(步骤一生成),生成一个证书请求。
命令:keytool -certreq -alias client -file client.csr。
3.客户端发送证书请求
通过线下的方式,客户端将证书请求提交给服务端。
4.服务端生成认证证书
服务端收到客户端提交的证书请求,进行认证并生成证书文件。
命令:keytool -gencert -alias rootca -infile name.csr -outfile client.cer
说明:“rootca”为服务端自签名的根证书;“client.csr”为客户端提交的证书请求;“client.cer”为服务端认证后的客户端证书。
5.服务端将认证证书发给客户端
服务端通过线下的方式将认证证书提交给客户端。
6.客户端将认证证书导入密钥库
客户端将服务端交付的认证证书导入自己的密钥库。
命令: keytool -importcert –alias client -file client.cer
注意:导入的密钥库必须是之前生成证书请求的密钥库,并且alias也要和之前一样。因为证书只包含公钥,而私钥在密钥库中,所以必须导入之前生成证书请求的密钥库,并且alias必须和之前相同,只有这样才知道这个证书属于哪个别名。