入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

java加密技术-双向加密

创建时间:2015-03-29 投稿人: 浏览次数:1500


转载于  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。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像