java加密技术-双向加密
转载于 http://snowolf.iteye.com/blog/510985
对于双向认证,做一个简单的描述。
服务器端下发证书,客户端接受证书。证书带有公钥信息,用于验证服务器端、对数据加密/解密,起到OSI五类服务的认证(鉴别)服务和保密性服务。这只是单向认证,为什么?因为客户端可以验证服务器端,但服务器端不能验证客户端!
如果客户端也有这样一个证书,服务器端也就能够验证客户端,这就是双向认证了!
换言之,当你用银行的“U盾”之类的U盘与银行账户交互时,在你验证银行服务器的同时,服务器也在验证你!这种双重验证,正是网银系统的安全关键!
单向认证见Java加密技术(十)
双向认证需要一个CA机构签发这样的客户端、服务器端证书,首先需要CA机构构建一个根证书。keytool可以构建证书但不能构建我们需要的根证书,openssl则可以!
根证书签发客户端证书,根私钥签发服务器端证书!
我们直接使用linux下的openssl来完成CA,需要修改openssl.cnf文件,在ubuntu下的/etc/ssl/目录下,找到[ CA_default ]修改dir变量。
原文
引用
[ CA_default ]
#dir = ./demoCA # Where everything is kept
我们把c盘的ca目录作为CA认证的根目录,文件修改后如下所示:
引用
[ CA_default ]
dir = $ENV::HOME/ca # Where everything is kept
我们需要在用户目录下构建一个ca目录,以及子目录,如下所下:
ca
|__certs
|__newcerts
|__private
|__crl
执行如下操作:
Shell代码 收藏代码
#!/bin/bash
ca_path=ca
certs_path=$ca_path/certs
newcerts_path=$ca_path/newcerts
private_path=$ca_path/private
crl_path=$ca_path/crl
echo 移除CA根目录
rm -rf ca
echo 构建CA根目录
mkdir ca
echo 构建子目录
mkdir certs
mkdir newcerts
mkdir private
mkdir crl
#构建文件
touch $ca_path/index.txt
echo 01 > $ca_path/serial
echo
#构建随机数
openssl rand -out $private_path/.rand 1000
echo
echo 生成根证书私钥
openssl genrsa -des3 -out $private_path/ca.pem 2048
echo
echo 查看私钥信息
openssl rsa -noout -text -in $private_path/ca.pem
echo
echo 生成根证书请求
openssl req -new -key $private_path/ca.pem -out $certs_path/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=ca.zlex.org"
echo
echo 查看证书请求
openssl req -in $certs_path/ca.csr -text -noout
echo
echo 签发根证书
openssl ca -create_serial -out $certs_path/ca.crt -days 3650 -batch -keyfile $private_path/ca.pem -selfsign -extensions v3_ca -infiles $certs_path/ca.csr
#openssl x509 -req -sha1 -extensions v3_ca -signkey $private_path/ca.pem -in $certs_path/ca.csr -out $certs_path/ca.crt -days 3650
echo
echo 查看证书详情
openssl x509 -in $certs_path/ca.crt -text -noout
echo
echo 证书转换——根证书
openssl pkcs12 -export -clcerts -in $certs_path/ca.crt -inkey $private_path/ca.pem -out $certs_path/ca.p12
echo
echo 生成服务器端私钥
openssl genrsa -des3 -out $private_path/server.pem 1024
echo
echo 查看私钥信息
openssl rsa -noout -text -in $private_path/server.pem
echo
echo 生成服务器端证书请求
openssl req -new -key $private_path/server.pem -out $certs_path/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=www.zlex.org"
echo
echo 查看证书请求
openssl req -in $certs_path/server.csr -text -noout
echo
echo 签发服务器端证书
openssl ca -in $certs_path/server.csr -out $certs_path/server.crt -cert $certs_path/ca.crt -keyfile $private_path/ca.pem -days 365 -notext
#openssl x509 -req -days 365 -sha1 -extensions v3_req -CA $certs_path/ca.crt -CAkey $private_path/ca.pem -CAserial $ca_path/serial -CAcreateserial -in $certs_path/server.csr -out $certs_path/server.crt
echo
echo 查看证书详情
openssl x509 -in $certs_path/server.crt -text -noout
echo
echo 证书转换——服务器端
openssl pkcs12 -export -clcerts -in $certs_path/server.crt -inkey $private_path/server.pem -out $certs_path/server.p12
echo
echo 生成客户端私钥
openssl genrsa -des3 -out $private_path/client.pem 1024
echo
echo 生成客户端私钥
openssl genrsa -des3 -out $private_path/client.pem 1024
echo
echo 查看私钥信息
openssl rsa -noout -text -in $private_path/client.pem
echo
echo 生成客户端证书请求
openssl req -new -key $private_path/client.pem -out $certs_path/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=zlex"
echo
echo 查看证书请求
openssl req -in $certs_path/client.csr -text -noout
echo
echo 签发客户端证书
openssl ca -in $certs_path/client.csr -out $certs_path/client.crt -cert $certs_path/ca.crt -keyfile $private_path/ca.pem -days 365 -notext
#openssl x509 -req -days 365 -sha1 -extensions dir_sect -CA $certs_path/ca.crt -CAkey $private_path/ca.pem -CAserial $ca_path/serial -in $certs_path/client.csr -out $certs_path/client.crt
echo
echo 查看证书详情
openssl x509 -in $certs_path/client.crt -text -noout
echo
echo 证书转换——客户端
openssl pkcs12 -export -clcerts -in $certs_path/client.crt -inkey $private_path/client.pem -out $certs_path/client.p12
echo
echo 生成证书链PKCS#7
openssl crl2pkcs7 -nocrl -certfile $certs_path/server.crt -certfile $certs_path/ca.crt -certfile $certs_path/client.crt -out
form PEM -out $certs_path/zlex.p7b
echo
echo 查看证书链
openssl pkcs7 -in $certs_path/zlex.p7b -print_certs -noout
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
