JDK自带工具keytool生成ssl证书

 

https简介

HTTPS工作原理

自签名证书简介

生成SSL证书步骤

          1、为服务器生成证书

          2、生成服务端证书 tomcat.cer

          3、导入证书文件到cacerts密钥库文件

          4、服务器Tomcat配置

 


 

https简介

  • 超文本传输安全协议(Hypertext Transfer Protocol Secure,缩写HTTPS)是一种网络安全传输协议。
  • HTTP就是平时浏览网页时候使用的一种协议,HTTP协议传输的数据都是未加密的,也就是明文,因此使用HTTP协议传输隐私信息非常不安全,HTTP使用80端口通讯而HTTPS占用443端口通讯,在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。
  • HTTPS其实是有两部分组成:HTTP+SSL/TLS,也就是在HTTP上加了一层处理加密信息的模块,并且会进行身份的验证。
  • SSL(Secure Sockets Layer安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。SSL协议分为两层,SSL记录协议建立在TCP之上,为高层协议提供数据封装、压缩、加密等基本功能支持。SSL握手协议建立在SSL记录协议之上,用户实际数据传输开始前进行身份验证、协商加密算法、交换加密秘钥。

HTTPS工作原理

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:

  • 浏览器将自己支持的一套加密规则发送给网站。
  • 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
  • 浏览器获得网站证书之后浏览器要做以下工作: 
    • 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示
    • 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密
    • 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站
  • 网站接收浏览器发来的数据之后要做以下的操作: 
    • 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
    • 使用密码加密一段握手消息,发送给浏览器。
  • 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

HTTPS一般使用的加密与HASH算法如下:

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256

 自签名证书简介

1. 客户端发起HTTPS请求
这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

2. 服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3. 传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4. 客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5. 传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6. 服务段解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7. 传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原

8. 客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

生成SSL证书步骤

1、为服务器生成证书

  • 打开cmd命令,进入jdk的bin目录下或者tomcat下
  •  相关命令
keytool 

-genkey 

-alias tomcat(别名) 

-keypass 123456(别名密码) 

-keyalg RSA(生证书的算法名称,RSA是一种非对称加密算法) 

-keysize 1024(密钥长度,证书大小) 

-validity 365(证书有效期,天单位) 

-keystore share.keystore(指定生成证书的位置和证书名称) 

-storepass 123456(获取keystore信息的密码)

- storetype (指定密钥仓库类型) 
  • 使用keytool命令生成证书:
方便复制版:  keytool -genkey -alias share -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore share.keystore -storepass 123456


返回:

W:\sys_toos\jdk8\jdk1.8.0_73\bin>keytool -genkey -alias share -keypass 123456 -
keyalg RSA -keysize 1024 -validity 365 -keystore share.keystore -storepass 1
23456
您的名字与姓氏是什么?
  [Unknown]: 提示:使用域名或者ip地址
您的组织单位名称是什么?
  [Unknown]:  
您的组织名称是什么?
  [Unknown]:  
您所在的城市或区域名称是什么?
  [Unknown]: 
您所在的省/市/自治区名称是什么?
  [Unknown]:  
该单位的双字母国家/地区代码是什么?
  [Unknown]: 
CN=www.seeker.com, OU=seeker, O=seeker, L=beijing, ST=beijing, C=zh是否正确?
  [否]:  y


点击回车:生成tomcat.keystore的文件。

2、生成服务端证书 tomcat.cer

  • 根据上面导出的tomcat.keystore文件就可以生成tomcat.cer文件,在dos命令中执行:
keytool -export -alias share -storepass 123456 -file share.cer -keystore share.keystore

    注意:-alias和-storepass必须为生成share.keystore密钥文件时所指定的别名和密码,否则证书导出失败

3、导入证书文件到cacerts密钥库文件

  • 把生成的服务器证书share.cer导入到cacerts密钥库文件中
keytool -import -trustcacerts -alias share -storepass 123456 -file share.cer -keystore cacerts
  • 查看cacerts中的证书列表

keytool -list -keystore cacerts -storepass 123456
  • 删除cacerts中指定名称的证书

keytool -delete -alias share -keystore cacerts -storepass 123456

4、服务器Tomcat配置

  • 完成密钥文件、证书文件和密钥库文件后即可进行服务器Tomcat的配置
  • <!--keystoreFile 生成的安全证书的位置--> 
  • <!--keystorePass设置安全证书的密码-->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"

         maxThreads="150" scheme="https" secure="true"

         clientAuth="false"

         sslProtocol="TLS"

         keystoreFile="D:\server\tomcat-7.0.55\share.keystore"  

         keystorePass="123456"   

         port="443"   />

属性说明

  • clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
  • keystoreFile:服务器证书文件路径
  • keystorePass:服务器证书密码
  • port一般为8443或443,最常用的是443端口(https默认端口)

 

 

参考文章

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值