Java Cryptography Architecture (JCA) 实践(二)

        本文主要介绍Java加密框架(JCA,Java Cryptography Architecture)实践。Java加密框架主要由java.security和javax.crypto两个包下的API提供服务。


2    加密工具简介
2.1    Keytool
Keytool与Java API中的KeyStore配合使用。Keytool是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。Keytool作为JDK自带的加密工具,所在目录为:C:\Program Files\Java\jdk1.6.0_45\bin\。
用法示例:
(1)生成用于生成公 / 私密钥对,即jks文件(证书私钥,keystore.jks)
"C:\Program Files\Java\jdk1.6.0_45\bin\keytool" -genkeypair -alias alias -keyalg RSA -keysize 2048 -dname "CN=CN, OU=OU, O=O, L=L, ST=ST, C=CN" -keypass keypass -validity 100 -storetype JKS -keystore keystore.jks -storepass storepass
(2)导出证书(cert.cert)
"C:\Program Files\Java\jdk1.6.0_45\bin\keytool" -exportcert -alias alias -keypass keypass -storetype JKS -keystore keystore.jks -file cert.cert -rfc -storepass storepass
(3)导入可信证书
"C:\Program Files\Java\jdk1.6.0_45\bin\keytool" -importcert -alias testkey -keypass keypass -storetype JKS -keystore keystore.jks -file cert.cert -rfc -storepass storepass
(4)创建证书签发请求
"C:\Program Files\Java\jdk1.6.0_45\bin\keytool" -certreq -alias alias -keypass keypass -storetype JKS -keystore keystore.jks -storepass storepass -file certreq.certreq
(5)列出密钥库中全部的项,以及查看与别名相关的项。
"C:\Program Files\Java\jdk1.6.0_45\bin\keytool" -list -storetype JKS -keystore keystore.jks -storepass storepass
(6)删除密钥库。
"C:\Program Files\Java\jdk1.6.0_45\bin\keytool" -delete -alias alias -storetype JKS -keystore keystore.jks -storepass storepass


2.2    openSSL命令
OpenSSL 是一个强大的安全套接字层密码库,包括了加密算法,常用密钥和证书管理,SSL协议等功能。OpenSSL提供的命令非常多,这里只简单列出OpenSSL生成密钥和证书的一些操作(Window需要以管理员身份运行cmd)。

(1)查看openSSL版本
openssl version
openssl version –a

(2)密钥生成
#生成RSA密钥对。位长度为2048,保持到rsakey.pem文件中
openssl genrsa -out rsakey.pem 2048
#生成RSA密钥对。使用DES3加密,密钥使用密码保护,位长度为1024
openssl genrsa -des3 -out des3.key -passout pass:123456 1024
#生成RSA密钥,位长度为2048,格式为DER
openssl genpkey -algorithm RSA -out der.der -pkeyopt rsa_keygen_bits:2048 -outform DER
#openssl req请求时生成新的密钥对
openssl req -x509  -days 365 -newkey rsa:2048 -keyout private.pem -out public.pem –nodes

(3)密钥文件管理和转换
#提取密钥公钥到单独的文件
openssl rsa -in ori/rsakey.pem -pubout -out rsakey.pub
#转换密钥格式(DER->PEM)
openssl rsa -in ori/der.der -inform DER -out keypair.pem
#改加密算法,移除密码保护
openssl rsa -in keypair.pem -passin pass:123456  -des3 -out keypair1.pem

(4)使用密钥加密
使用RSA加密时,要求被加密的数据长度与RSA密钥长度一致,数据过短时会补齐。过长时会分段加密。
实际应用中很少会使用非对称加密算法对大的文件进行加密操作,而是使用对称加密算法加密文件,
然后再使用<非对称加密算法>对<对称算法的密钥>进行加密。
#使用公钥加密
openssl rsautl -in test.txt -out test_enc.txt -inkey rsakey.pub -pubin -encrypt
#使用私钥解密
openssl rsautl -in test_enc.txt -out test_dec.txt -inkey ori/rsakey.pem -decrypt
#使用私钥签名
openssl rsautl -in test.txt -out test_sign.txt -inkey ori/rsakey.pem -sign
#使用公钥验证签名
openssl rsautl -in test_sign.txt -out test_unsign.txt -inkey rsakey.pub -pubin –verify

(5)证书管理
#生成X509格式的自签名证书
openssl req -x509 -new -days 365 -key rsakey.pem -out crt.crt
#生成要求根证书签发子证书的请求文件
openssl req -new -key rsakey.pem -out subcsr.csr
#使用根证书签发子证书
openssl x509 -req -in subcsr.csr -CA crt.crt -CAkey rsakey.pem -CAcreateserial -days 365 -out subcrt.crt
#将证书和密钥打包为pkcs12格式的库中
openssl pkcs12 -export -in subcrt.crt -inkey rsakey.pem -out subcrt.p12
#查看证书内容
openssl x509 -noout -text -in crt.crt
#验证证书
openssl verify -CAfile crt.crt subcrt.crt
#从证书中提取公钥
openssl x509 -in crt.crt  -noout -pubkey > pubkey.pem
#提取密钥对
openssl pkcs12 -in subcrt.p12 -nocerts -nodes -out keypaire.pem

2.3    openSSH命令
OpenSSH是SSH协议的开源版本(SSH:Secure SHell)。使用SSH透过计算机网络实现加密通讯,可以进行远程控制,在计算机之间传送文件等等。SSH传输的数据都进行了加密,比telnet,rcp,ftp,rlogin,rsh等以明文传输密码的工具更安全。
OpenSSH提供了实现SSH协议的很多工具。其中ssh-keygen用于生成,管理和转换用于认证的密钥和证书。
Windows/Linux下均可以使用openSSH命令生成公私密钥对。
命令:ssh-keygen -t rsa
生成的公私钥默认是在用户目录下:
windows一般为 c:\User\username\.ssh
linux一般为 /home/username/.ssh

猜你喜欢

转载自blog.csdn.net/hualei_c/article/details/87988758
JCA