Openssl自签名和认证技术

众所周知,HTTPS通道相对于HTTP通道是比较安全的,HTTPS使用的是RSA非对称128位加密,如果是安全交易类甚至会使用RSA 1024位加密算法,想要突破基于HTTPS协议的网站,你就首先必须突破这个HTTTPS协议,因此,对于高安全交易类的应用等常采用它。

HTTPS是SSL的一种,那么它是如何进行加密传输数据的呢,就是建立一个“信任关系”,先建立起信任关系,然后再开始数据传输,在加密的世界中“建立信任”就需要用到至少2张证书,即ROOTCA, SERVER CA,把这个信任建立的过程称为“Hands Shakes”,握手协议

既然构建HTTPS通道,必须要有ROOTCA和SERVERCA,而且这张服务器证书是需要由客户端信任的“ROOT”级机构所签发出来的。ROOTCA是全球的根,这个“树”的根是全球任何IE、FireFox、Safari里的证书库里都有这个RootCA的,因为它们是权威,所以全球的电子证书拿它们做“根”.

在实际开发环境中,我们使用Openssl自己来模拟这个ROOTCA,然后用自己模拟出来的ROOTCA去签我们服务器的证书,这个过程就被称为“自签”。一般生成证书由以下几个步骤构成:

A、自签ROOTCA的过程:

1.       生成密钥

a、生成密钥:openssl genrsa -des3 -out  ca.key 1024


b、去除ca口令密码:openssl  rsa -in ca.key -out ca.key

2.       用密钥产生请求,同时进行“自签”Sign

openssl req -new -x509 -key ca.key -out ca.crt  

3导入CA到internet浏览器中


B、生成SERVERCA并用ROOTCA签名的过程

1.       生成一对不对称密钥,即公钥public key和私钥 private key

a、生成密钥:openssl genrsa -des3 -out  server.key 1024

b、去除口令密码:openssl  rsa -in server.key -out server.key

2.       用密钥产生请求,同时把我的请求交给ROOT机构

openssl req -new -key server.key -out server.csr 

3.       ROOT机构对我提交的请求进行“签名”Sign

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

生成证书后,就可以将证书部署到web服务器,比如Apache服务器,通过https协议访问相应的应用了。

------------------------------------------------------------------------------------------------------------------------------------------------------------

当Apache HttpServer已经走https协议了,如果你也用到了App Server即tomcat/weblogic/was,因为我们的架构是Web Server + App Server,因此,我们的App Server也必须走https协议。如果只是Web Server走https协议,而App Server没有走https协议,这就叫“假https架构”,是一种极其偷赖和不负责任的做法。概念同产生Apache的HttpServer的证书一样,只是这边的信任域有点不一样。Web的信任域就是你的IE里的内容里的证书里的“根级信任域”,App Server的信任域是打不开也不能访问这块地方的,而且App Server的信任域格式也不是crt文件,而是.jks(javakey store的简称)。

现在使用%JAVA_HOME%\bin目录下的keytool工具来产生证书
1、 生成JKS密钥对,密码使用6个a,alias代表“别名”,CN代表Common Name,必须与主机名完全一致,错了不要怪我自己负责。
keytool -genkey -alias jubaoX509 -keyalg RSA -keysize 1024 -dname "CN=jubao001 , OU=insurance-dart, O=Cognizant, L=SH, S=SH, C=CN" -keypass aaaaaa -keystore jubao.jks -storepass aaaaaa
2、  生成JSK的CSR
keytool -certreq -alias jubaoX509 -sigalg "MD5withRSA" -file jubao.csr -keypass aaaaaa -keystore jubao.jks -storepass aaaaaa
3、使用openssl结合ca.crt与ca.key为jsk的csr来签名认证并产生jks格式的crt
openssl x509 -req -in jubao.csr -out jubao.crt -CA ca.crt  -CAkey ca.key -days 3650 -CAcreateserial -sha1 -trustout -CA ca.crt -CAkey ca.key -days  3650 -CAserial ca.srl -sha1 -trustout

4、生成符合x509格式的jks文件
a      将Root CA导入jks信任域
keytool -import -alias rootca -trustcacerts -file ca.crt -keystore jubao.jks -storepass aaaaaa

b     补链:keytool -import -alias  shnlap93X509 -file shnlap93.crt -keystore jubao.jks -storepass aaaaaa

生成jubao.jks,那么在tomcat的https协议通道配置中加入secure="true" SSLEnabled="true"  clientAuth="false" sslProtocol="TLS"  keystoreFile="d:/tomcat/conf/jubao.jks" keystorePass="aaaaaa"。。就可以使用安全的https协议了

测试:如果你是在Apache上启用了https而没有在tomcat上启用https协议,那么我们在tomcat中布署一个servlet,含一条打印语句: System.out.println(“”+request.getScheme()),那么它将打印出来http。反之则是https。


ps:pem格式自签

一、根证书

Openssl genrsa -out ca/cakey.pem 512

Openssl req -new -out ca/careq.csr -key ca/cakey.pem

Openssl x509 -req -in ca/careq.csr -out /ca/cacert.pem -signkey ca/cakey.pem -days 3650

Keytool -import -v -trustcacerts -storepass 111111 -alias caRoot -file ca/cacert.pem -keystore  d:\re

二.服务器证书

Keytool -genkey -alias caServer -validity 3650 -keyalg RSA -keysize 512 -keystore server/server.jks

Keytool -certreq -alias caServer -file server/server.csr -keypass 111111 -keystore server/server.jks -storepass 111111

Openssl x509 -req -in server/server.csr -out server/servercert.pem -CA ca/cacert.pem -Cakey ca/cakey.pem -days 3650

Keytool -import -v -trustcacerts -storepass 111111 -alias caRoot-file ca/cacert.pem -keystore  server/server.jks

Keytool -import -v -alias cas_server -file server/sercercert.pem -storepass 111111  -keystore  server/server.jks

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值