websphere 配置文件


一、什么是?为何需要?

数据在网络中的签名(加密)是我们最常见的安全操作。签名有两个主要作用:一是确保数据的完整性,证明数据未被篡改;二是防止数据发布者否认其发布了该数据。

签名过程中涉及非对称性加密算法和消息摘要算法。在对数据进行签名时,会先对数据进行消息摘要运算生成一个摘要,然后使用发布者的私钥对这个摘要进行加密。以微信公众平台开发为例,调用api接口方法时,会将参数进行字典序排序,然后将参数名和参数值组合成一个字符串,这个字符串就相当于这里的摘要。然后将摘要用平台密钥加密。

接收者(客户端)接收到数据后,会使用发布者的公钥进行解密得到原数据的摘要,然后再对接收到的数据计算摘要。如果两个摘要相同,则说明数据未被篡改。由于发布者的私钥是保密的,只要接收者能通过发布者的公钥对数据进行成功解密,就说明该数据一定来源于该发布者。

那么如何确认某公钥一定属于某发布者呢?这就需要了。由权威认证机构颁发,包含所有者的标识和其公钥,并由权威认证机构使用其私钥进行签名。信息发布者通过网络发布来公开其公钥。也是由权威认证机构签名的,这些认证机构也会通过发布自己的来公开其公钥。链就是这些认证机构的,最顶端的称为根,根只有自签名。对网络传播的内容进行签名和认证,一定会用到。目前最流行的标准是X.509。

二、的管理

Keytool是Java数据的管理工具,主要存在于JDK\jre\bin\security目录下。所有的数字以一条条的形式(通过别名区分)存入库中,库中的每个包含该条的私钥、公钥和对应的数字信息。

库中的可以导出为数字文件,这些文件只包含主体信息和对应的公钥。Keytool将密钥(key)和(certificates)存储在一个名为keystore的文件中。在keystore里,包含两种数据:

1. 密钥实体(Key entity):包含密钥(秘密密钥)或私钥和配对公钥(采用非对称加密)。

2. 可信任的实体(trusted certificate entries):只包含公钥。

以下是创建的示例命令:

keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "d:\mykeystore.keystore" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass "123456" -storepass -validity 180

各选项的说明如下:

-genkeypair:表示要创建一个新的密钥。

-dname:表示密钥的Distinguished Names,表明了密钥的发行者身份。CN要和服务器的域名相同(在本地测试则使用localhost)。

-keyalg:使用加密的算法,这里是RSA。

-alias:和keystore关联的别名。

-keypass:私有密钥的密码。

-keystore:密钥保存的位置。

-storepass:存取密码。

-validity:该密钥的有效期。

除了生成,Keytool还可以导出、导入、删除、查看等。常见的异常是“未找到可信任的”,这通常是因为没有在客户端将服务器下发的导入到JVM中。可以使用keytool -list命令来查看是否已导入到JVM中。数字中Keytool命令的具体使用方式如下:

-alias:指定的别名。

-keystore:指定密钥库的名称。

-storepass:指定密钥库的密码。

-keypass:指定别名条目的密码。

-list:显示密钥库中的信息。

-v:显示的详细信息。

-export:将别名指定的导出到文件。

-file:指定导出到的文件名。

-delete:删除密钥库中的某条目。

-import:将已签名的数字导入密钥库。

密钥库文件格式详解:

密钥库是一个存储公钥和私钥以及的地方。因为需要签名,所以必须使用非对称加密算法和HASH算法,常见的如MD5WithRSA或SHA1WithRSA。

以下是几种常见的密钥库文件格式:

1. JKS:Java Keystore,Java平台的密钥库格式,使用SUN作为provider,密钥库和私钥分别用不同密码保护。

2. JCEKS:JCE Keystore,是JKS的增强版,采用SUN JCE作为provider,安全级别更高,使用TripleDES保护Keystore私钥。

3. PKCS12:个人信息交换语法标准,包含私钥、公钥及其,密钥库和私钥使用相同密码保护。

4. S和UBER:分别是Bouncycastle Keystore和Bouncycastle UBER Keystore的格式,基于JCE实现,提供更高级别的安全性。

文件格式说明:

文件格式用于存储信息。以下是几种常见的文件格式及其特点:

1. DER格式:二进制格式,用于存放,不包含私钥。

2. PKCS7格式:加密信息语法标准,可以树状展示链,也可以作为CA对请求签名的回复。

3. PEM格式:在RFC1421中定义的编码格式,广泛用于密钥管理,是Privacy-Enhanced Mail的简写。

4. PKCS10格式:公钥加密标准,用于存储签名请求。

5. SPC格式:微软公司特有的双文件格式,用于代码签名,包含pvk(保存私钥)和spc(保存公钥)。

关于格式转换工具:

Java和.Net平台都有相应的管理工具。Java的keytool和.Net的makecert都是常用的工具。由于两者遵循的标准并不完全兼容,很多时候需要进行格式转换。在这个过程中,除了上述工具外,OpenSSL是一个很有用的工具,可以完成各种格式间的转换。

注意事项及推荐工具:

1. Java平台keytool对X.509的支持在不同版本间存在差异。6.0版本之前生成的主要是v1版本,这在某些应用场合可能会引发问题。但从6.0开始,keytool支持v3版本的生成。

2. 推荐使用Eclipse插件SecureX,这是一款国人开发的生成、管理工具,功能强大且可以下载源代码学习。

3. KeyTool IUI是一款老外编写的Keytool GUI工具,功能类似SecureX,可以通过application或Java Web Start启动查看。