https认证其实是基于证书认证,一般常用的x509认证。
关于x509认证,我们需要理解几个名称
Private key 指的是证书中的私钥。
Public key 指的是证书中的公钥。
KeyStore 指的是存储公钥的容器。
TrustStore 指的是存储私钥的容器。
简单的介绍下,x509认证的基本原理
1、客户端发送soap到服务端
首先A(客户端)需要使用自己的私钥进行签名,使用B(服务端)的公钥进行加密,然后将soap传给B,B用私钥进行解密,用A的公钥进行验签。
2、服务端返回数据到客户端
首先B用自己的私钥进行签名,用A的公钥进行加密,然后将soap传回给A,A用私钥进行解密,用B的公钥进行验签。
了解了相关的概念后,我们开始制作相关的证书。
在java中制作证书可以采用jdk中提供的keytool和openssl,这两者主要的区别在于,如
果制作的证书没有相关的证书链那么完全可以采用keytool,否则就需要用openssl工具。
下载openssl工具,可以从官网进行下载
http://www.yassl.com/yaSSL/Home.html
首先简单介绍下,我需要制作证书的结构,其中包括根证书,二级证书,服务端证书,客户端
证书。 由根证书签署服务端证书和二级证书,二级证书签署客户端证书。
根证书
根证书一般是其认证作用的,也可以称作CA,有相关的CA认证机构,不过一般需要花钱去实现CA认证,在这里根证书采
的是自签的方式。
其相关命令如下:
mkdir root
//制作根证书
openssl genrsa -out root/root-key.pem 1024
//创建证书请求
openssl req -new -out root/root-req.csr -key root/root-key.pem -subj /C=CN/ST=GuangDong/L=ShenZhen/O="ShanCao Technologies Co. Ltd."/OU="ShanCao EOMS System Team"/OU="Copyright (c) 1998-2018 ShanCao Technologies Co. Ltd."/CN="ShanCao EOMS Root Authority"/[email protected]
//自签署根证书
openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
//将证书导入到JKS文件中
keytool -import -v -trustcacerts -storepass changeit -alias root -file root/root-cert.pem -keystore root/root-id.jks
//将证书导出成cer文件
keytool -export -alias root -keystore root/root-id.jks -file root/root-id.cer -storepass changeit
服务端
服务证书制作命令如下:
cd root
mkdir server
//创建服务器端证书,并自用根证书签署
//创建私钥
openssl genrsa -out root/server/temip-key.pem 1024
//创建证书请求
openssl req -new -out root/server/temip-req.csr -key root/server/temip-key.pem -subj /C=CN/ST=GuangDong/L=ShenZhen/O="ShanCao Technologies Co. Ltd."/OU="ShanCao EOMS System Team"/OU="Copyright (c) 1998-2018 ShanCao Technologies Co. Ltd."/CN=localhost/[email protected]
注意cn如果是本机应该填写localhost,如果是网站则填写域名.
//签署服务器端证书
openssl x509 -req -in root/server/temip-req.csr -out root/server/temip-cert.pem -CA root/root2.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
//将服务器端证书PKCS12格式
openssl pkcs12 -export -clcerts -in root/server/temip-cert.pem -inkey root/server/temip-key.pem -out
root/server/temip-id.p12
二级证书
二级证书制作命令如下:
mkdir client
//创建私钥
openssl genrsa -out root/client/eomsca-key.pem 1024
//创建证书请求
openssl req -new -out root/client/eomsca-req.csr -key root/client/eomsca-key.pem -subj /C=CN/ST=GuangDong/L=ShenZhen/O="ShanCao Technologies Co. Ltd."/OU="ShanCao EOMS System Team"/OU="Copyright (c) 1998-2018 ShanCao Technologies Co. Ltd."/CN="ShanCao EOMS Secure Server Authority"/[email protected] -reqexts v3_req
//自签署客户端证书
openssl x509 -req -in root/client/eomsca-req.csr -out root/client/eomsca-cert.pem -signkey root/client/eomsca-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
//将客户端证书导出成浏览器可导入的PKCS12格式
openssl pkcs12 -export -clcerts -in root/client/eomsca-cert.pem -inkey root/client/eomsca-key.pem -out root/client/eomsca-id.p12
客户端
客户端证书制作命令如下:
//创建私钥
openssl genrsa -out root/client/hw_shangcao-key.pem 1024
//创建证书请求
openssl req -new -out root/client/hw_shangcao-req.csr -key root/client/hw_shangcao-key.pem -subj /C=CN/ST=GuangDong/L=ShenZhen/O="ShanCao Technologies Co. Ltd."/OU="ShanCao EOMS System Team"/OU="Copyright (c) 1998-2018 ShanCao Technologies Co. Ltd."/CN=localhost/[email protected]
//自签署客户端证书
openssl x509 -req -in root/client/hw_shangcao-req.csr -out root/client/hw_shangcao-cert.pem -signkey root/client/hw_shangcao-key.pem -CA root/client/eomsca-cert.pem -CAkey root/client/eomsca-key.pem -CAcreateserial -days 3650
//将客户端证书导出成浏览器可导入的PKCS12格式
openssl pkcs12 -export -clcerts -in root/client/hw_shangcao-cert.pem -inkey root/client/hw_shangcao-key.pem -out root/client/hw_shangcao-id.p12
补充相关证书类型之间的转换
转换成cer格式证书
keytool -export -alias temip -keystore root/server/temip-id.jks -file root/server/temip-id.cer
-storepass changeit。
转换成keystore和jks格式的
//jks格式
keytool -import -v -trustcacerts -storepass changeit -alias temip -file root/server/temip-cert.pem -
keystore root/server/temip-id.jks
//keystore格式
keytool -import -v -trustcacerts -storepass changeit -alias temip -file root/server/temip-cert.pem -
keystore root/server/server.keystore
关于https需要的相关证书已经制作完成,接下来编写cxf https认证的服务端和客户端相关代码。