一、什么是SSL
SSL (Secure Sockets Layer) is a standard security technology for establishing an encrypted link between a server and a client—typically a web server (website) and a browser, or a mail server and a mail client (e.g., Outlook).
传输层安全协议(英语:Transport Layer Security,:TLS),及其前身安全套接层(Secure Sockets Layer,:SSL)是一种,目的是为通信,提供安全及数据保障。公司(Netscape)在1994年推出首版,时,推出协议,以SSL进行加密,这是SSL的起源。将SSL进行标准化,1999年公布了第一版TLS标准文件。随后又公布了 (2008年8月)与 (2011年3月)。在、、、、等应用程序中,广泛支持这个协议。主要的网站,如、等也以这个协议来创建安全连接,发送数据。目前已成为上保密通讯的工业标准。
SSL包含记录层(Record Layer)和传输层,记录层协议确定了传输层数据的封装格式。传输层安全协议使用认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
二、双向认证
1、客户端认证。
客户端通过浏览器访问某一网站时,如果该网站为HTTPS网站,浏览器会自动检测系统中是否存在该网站的信任证书,如果没有信任证书,浏览器一般会拒绝访问,IE会有一个继续访问的链接,但地址栏是红色,给予用户警示作用,即客户端验证服务端并不是强制性的,可以没有服务端的信任证书,当然是否继续访问完全取决于用户自己。如何去除地址栏的红色警告呢?后续会介绍导入服务端证书到浏览器的方法。
2、服务器端认证。
服务端需要获取到客户端通过浏览器发送过来的认证证书,该证书在服务端的证书库中已存在,仅仅是个匹配过程,匹配成功即通过认证,可继续访问网站资源,反之则无法显示网页
三、证书制作
相关连接:
基本逻辑:
1、生成服务端密钥库并导出证书; 2、生成客户端密钥库并导出证书; 3、根据服务端密钥库生成客户端信任的证书; 4、将客户端证书导入服务端密钥库; 5、将服务端证书导入浏览器。注意:服务端的密钥库参数“CN”必须与服务端的IP地址相同,否则会报错,客户端的任意。
使用java自带keytool生成密钥库和证书:
1、生成服务器证书库
keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore S:\ssl\server.keystore -dname "CN=127.0.0.1,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 1234562、生成客户端证书库
keytool -validity 365 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore S:\ssl\client.p12 -dname "CN=client,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456
3、从客户端证书库中导出客户端证书
keytool -export -v -alias client -keystore S:\ssl\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file S:\ssl\client.cerkeytool -export -v -alias client -keystore S:\ssl\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file S:\ssl\client.crt
4、从服务器证书库中导出服务器证书
keytool -export -v -alias server -keystore S:\ssl\server.keystore -storepass 123456 -rfc -file S:\ssl\server.cer
5、生成客户端信任证书库(由服务端证书生成的证书库生成,后面会用到这个文件)
keytool -import -v -alias server -file S:\ssl\server.cer -keystore S:\ssl\client.truststore -storepass 123456
6、将客户端证书导入到服务器证书库(使得服务器信任客户端证书)
keytool -import -v -alias client -file S:\ssl\client.cer -keystore S:\ssl\server.keystore -storepass 123456
最后创建的文件如下: