数字签名科普(数字签名简介)

对数据进行签名(加密)是我们在网络中最常见的安全操作签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数据的发布者否认其发布了该数据  签名同时使用了非对称性加密算法和消息摘要算法,对一块数据签名时,会先对这块数据进行消息摘要运算生成一个摘要,然后对该摘要使用发布者的私钥进行加密 比如微信公众平台开发中最常见的调用api接口方法是将参数进行字典序排序,然后将参数名和参数值接成一个字符串,组合的字符串也就相当于我们这里说的摘要,然后将摘要用平台密钥加密  接收者(客户端)接收到数据后,先使用发布者的公钥进行解密得到原数据的摘要,再对接收到的数据计算摘要,如果两个摘要相同,则说明数据没有被篡改同时,因为发布者的私钥是不公开的,只要接收者通过发布者的公钥能成功对数据进行解密,就说明该数据一定来源于该发布者   那么怎么确定某公钥一定是属于某发布者的呢?这就需要证书了证书由权威认证机构颁发,其内容包含证书所有者的标识和它的公钥,并由权威认证机构使用它的私钥进行签名信息的发布者通过在网络上发布证书来公开它的公钥,该证书由权威认证机构进行签名,认证机构也是通过发布它的证书来公开该机构的公钥,认证机构的证书由更权威的认证机构进行签名,这样就形成了证书链证书链最顶端的证书称为根证书,根证书就只有自签名了总之,要对网络上传播的内容进行签名和认证,就一定会用到证书关于证书遵循的标准,最流行的是 X.509,下面我们就来聊聊关于数字签名科普?接下来我们就一起去了解一下吧!

数字签名科普(数字签名简介)

数字签名科普

一、 什么是证书?为什么要使用证书?

对数据进行签名(加密)是我们在网络中最常见的安全操作。签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数据的发布者否认其发布了该数据。  签名同时使用了非对称性加密算法和消息摘要算法,对一块数据签名时,会先对这块数据进行消息摘要运算生成一个摘要,然后对该摘要使用发布者的私钥进行加密。 比如微信公众平台开发中最常见的调用api接口方法是将参数进行字典序排序,然后将参数名和参数值接成一个字符串,组合的字符串也就相当于我们这里说的摘要,然后将摘要用平台密钥加密。  接收者(客户端)接收到数据后,先使用发布者的公钥进行解密得到原数据的摘要,再对接收到的数据计算摘要,如果两个摘要相同,则说明数据没有被篡改。同时,因为发布者的私钥是不公开的,只要接收者通过发布者的公钥能成功对数据进行解密,就说明该数据一定来源于该发布者。   那么怎么确定某公钥一定是属于某发布者的呢?这就需要证书了。证书由权威认证机构颁发,其内容包含证书所有者的标识和它的公钥,并由权威认证机构使用它的私钥进行签名。信息的发布者通过在网络上发布证书来公开它的公钥,该证书由权威认证机构进行签名,认证机构也是通过发布它的证书来公开该机构的公钥,认证机构的证书由更权威的认证机构进行签名,这样就形成了证书链。证书链最顶端的证书称为根证书,根证书就只有自签名了。总之,要对网络上传播的内容进行签名和认证,就一定会用到证书。关于证书遵循的标准,最流行的是 X.509。

二、 数字证书管理

KeyStore 和 TrustStore是JSSE中使用的两种文件。这两种文件都使用java的keytool来管理,他们的不同主要在于用途和相应用途决定的内容的不同。这两种文件在一个SSL认证场景中,KeyStore用于服务器认证服务端,而TrustStore用于客户端认证服务器。比如在客户端(服务请求方)对服务器(服务提供方)发起一次HTTPS请求时,服务器需要向客户端提供认证以便客户端确认这个服务器是否可信。这里,服务器向客户端提供的认证信息就是自身的证书和公钥,而这些信息,包括对应的私钥,服务器就是通过KeyStore来保存的。当服务器提供的证书和公钥到了客户端,客户端就要生成一个TrustStore文件保存这些来自服务器证书和公钥。 KeyStore 和 TrustStore的不同,也主要是通过上面所描述的使用目的的不同来区分的,在Java中这两种文件都可以通过keytool来完成。不过因为其保存的信息的敏感度不同,KeyStore文件通常需要密码保护。正是因为 KeyStore 和 TrustStore Java中都可以通过 keytool 来管理的,所以在使用时多有混淆。记住以下几点,可以最大限度避免这些混淆 :

1、如果要保存你自己的密码,秘钥和证书,应该使用KeyStore,并且该文件要保持私密不外泄,不要传播该文件; 2、如果要保存你信任的来自他人的公钥和证书,应该使用TrustStore,而不是KeyStore; 3、在以上两种情况中的文件命名要尽量提示其安全敏感程度而不是有歧义或者误导 比如使用KeyStore的场景把文件命名为 truststore.jks,或者该使用TrustStore的情况下把文件命名为keystore.jks之类,这些用法都属于严重误导随后的使用者,有可能把比较私密的文件泄露出去; 4、拿到任何一个这样的文件时,确认清楚其内容然后决定怎样使用; 因为 KeyStore 文件既可以存储敏感信息,比如密码和私钥,也可以存储公开信息比如公钥,证书之类,所有实际上来讲,可以将KeyStore文件同样用做TrustStore文件,但这样做要确保使用者很明确自己永远不会将该KeyStore误当作TrustStore传播出去。

KeyStore内容 一个KeyStore文件可以_包含私钥(private key)和关联的证书(certificate)或者一个证书链。证书链由客户端证书和一个或者多个CA证书。KeyStore类型 KeyStore 文件有以下类型,一般可以通过文件扩展名部分来提示相应KeyStore文件的类型:

JCEKS JKS DKS PKCS11 PKCS12 Windows-MY BKS

以上KeyStore的类型并不要求在文件名上体现,但是使用者要明确所使用的KeyStore的格式。

TrustStore内容 一个TrustStore仅仅用来包含客户端信任的证书,所以,这是一个客户端所信任的来自其他人或者组织的信息的存储文件,而不能用于存储任何安全敏感信息,比如私钥(private key)或者密码。客户端通常会包含一些大的CA机构的证书,这样当遇到新的证书时,客户端就可以使用这些CA机构的证书来验证这些新来的证书是否是合法的。

三、 证书生成

keytool 命令解释:

-genkey (生成key) -alias webclient(别名) -keypass ouyushan.pass(别名密码) -keyalg RSA(算法) -keysize 1024(密钥长度) -validity 365(有效期,天单位) -storetype PKCS12 (指定证书格式) -keystore D:/ouyushan.keystore(指定生成证书的位置和证书名称) -storepass ouyushan.pass(获取keystore信息的密码)

在制作证书时,确保指定证书所在目录的文件夹已存在,否则会报错.

同时keytool在jdk的bin目录下,需进入其所在目录后执行以下命令。

3.1、 为服务器生成证书

keytool -genkey -alias webserver -keypass ouyushan.pass -keyalg RSA -keysize 1024 -validity 365 -keystore D:/ouyushan/jks/webserver.keystore -storepass ouyushan.pass

您的名字与姓氏是什么?(CN) webserver 您的组织单位名称是什么?(OU) ouyushan 您的组织名称是什么?(O) ouyushan 您所在的城市或区域名称是什么?(L) beijing 您所在的省/市/自治区名称是什么?(ST) beijing 该单位的双字母国家/地区代码是什么?(C) CN

执行后生成:

webserver.keystore

提示1024位RSA密钥存在风险。使用以下命令迁移到PKCS12行业标准

keytool -importkeystore -srckeystore D:/ouyushan/jks/webserver.keystore -destkeystore D:/ouyushan/jks/webserver.keystore -deststoretype pkcs12

执行后会将原webserver.keystore 备份为webserver.keystore.old并生成新的webserver.keystore

或者直接指定证书格式为PKCS12,执行:

keytool -genkey -alias webserver -keypass ouyushan.pass -keyalg RSA -keysize 2048 -validity 365 -storetype PKCS12 -keystore D:/ouyushan/jks/webserver.p12 -storepass ouyushan.pass

生成

webserver.p12,此证书等效于webserver.keystore,且不会提示警告,无需转换

3.2、为客户端生成证书

keytool -genkey -alias webclient -keypass ouyushan.pass -keyalg RSA -keysize 2048 -validity 365 -storetype PKCS12 -keystore D:/ouyushan/jks/webclient.p12 -storepass ouyushan.pass

您的名字与姓氏是什么?(CN) webclient 您的组织单位名称是什么?(OU) ouyushan 您的组织名称是什么?(O) ouyushan 您所在的城市或区域名称是什么?(L) beijing 您所在的省/市/自治区名称是什么?(ST) beijing 该单位的双字母国家/地区代码是什么?(C) CN

执行后生成:

webclient.p12

3.3、 导出客户端/服务端证书

keytool -export -alias webclient -keystore D:/ouyushan/jks/webclient.p12 -storetype PKCS12 -keypass ouyushan.pass -file D:/ouyushan/jks/webclient.cer

执行完生成:

webclient.cer

keytool -export -alias webserver -keystore D:/ouyushan/jks/webserver.p12 -storetype PKCS12 -keypass ouyushan.pass -file D:/ouyushan/jks/webserver.cer

执行完生成:

webserver.cer

3.4、 客户端证书导入到服务器的证书库,添加为一个信任证书:

keytool -import -v -file D:/ouyushan/jks/webclient.cer -keystore D:/ouyushan/jks/webserver.p12 -storepass ouyushan.pass

执行完cer证书将被添加到.p12

keytool -import -v -file D:/ouyushan/jks/webserver.cer -keystore D:/ouyushan/jks/webclient.p12 -storepass ouyushan.pass

四、 证书转换

以下命令需安装openssl(https://www.openssl.org/source/)

以下命令,需在keytool所在的jdk目录下进行。

1、p12转jks keytool -importkeystore -srckeystore webclient.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore webclient.jks 输入目标密钥库口令(新jks口令): 再次输入新口令: 输入源密钥库口令:(p12文件口令) 已成功导入别名 1 的条目。 已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消 2、jks转p12 keytool -importkeystore -srckeystore webclient.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore webclient.p12 输入目标密钥库口令(新p12口令): 再次输入新口令: 输入源密钥库口令(原webclient.jks设置口令): 输入 <1> 的密钥口令(生成webclient.jks的原p12口令): 已成功导入别名 1 的条目。 已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页