Https系列之一:https的简单介绍及SSL证书的生成

一:本文的主要内容介绍

https的介绍 
SSL证书的介绍 
自签名SSL证书介绍及生成方法 
CA证书介绍及申请

二:https的简单介绍

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL(Secure Socket Layer)。

SSL协议提供的服务主要有: 
1)认证用户和服务器,确保数据发送到正确的客户机和服务器 
2)加密数据以防止数据中途被窃取 
3)维护数据的完整性,确保数据在传输过程中不被改变

关于https的介绍,网上有很多更详细更专业的资料,在此只作简单介绍,让大家有一些概念性的了解,并最终完成android端和服务器端的https的实现。

三:SSL证书的作用

SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。 
SSL证书的两大作用:数据加密和身份认证 
SSL 证书遵守 SSL协议,通过在客户端浏览器和Web服务器之间建立一条SSL安全通道 
一个有效、可信的 SSL 数字证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。因此,浏览器指向一个安全域时,SSL 将同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。

四:关于自签名SSL证书

所谓自签名证书,就是自己颁发给自己的证书 ,所以颁证的主体是不可信任的 
自签证书是不会被浏览器信任的证书的,用户在访问自签证书时,浏览器会警告用户此证书不受信任,需要人工确认是否信任此证书,如下图: 
 

既然自签证书是不可信任的,那为何还有人包括12306也在用自签证书呢? 
主要原因是: 
1)自签证书是免费的 
2)自签证书相对申请CA证书,流程更简单 
3)自签证书同样可以对数据进行加密 
4)自签证书的有效期可以设置很长,免去续签的麻烦 
5)自签证书更方便测试,比如说你想生成多少个不同服务器ip的都可以 
所以对于一些个人开发者来说使用自签证书可能会更方便,只要你能接受别人浏览你网站时弹出的提醒:不安全

五:关于CA 签名SSL证书

相对自签证书的自己给自己颁证,由权威的证书授权机构(Certificate Authority)颁发的签名证书,我们称之为:CA证书 
CA证书保证书持有者的身份和公钥的拥有权 
浏览器对CA证书是信任的,如下图: 
这里写图片描述

六:自签名SSL证书的生成

自签证书虽然提示:不安全。但还是有很多上面已提到的好处,所以下面先说说自签证书的生成,主要使用Java JDK下的:keytool.exe 
1:先下载安装Java JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 
2:安装完后,根据实际的路径找到keytool.exe,如我的在此路径:C:Program Files (x86)Javajdk1.8.0_101inkeytool.exe

3:生成keystore。打开命令行(cmd),去到keytool所在的路径,运行:

keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore d:mykeystorekeystore.p12 -validity 3650  -ext san=ip:192.168.100.132 -dname "CN=garyyan, OU=mycompany, O=mycompany, L=gd, ST=gd, C=china"

此命令中间只需要输入密码,就能生成keystore,假设密码是:123456 
其中: 
1)keystore可理解为一个数据库,可以存很多个组数据。 
每组数据主要包含下面两种数据: 
a:密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 
b:可信任的证书实体(trusted certificate entries)——只包含公钥 
2)-keystore d:mykeystorekeystore.p12,指定在d:mykeystore(先要手动创建此文件夹),生成keystore:keystore.p12 
3)-alias tomcat,为其指明在keystore中的唯一的别名:tomcat ,因为keystore中可能还存有其它的别名,如:tomcat 2 
4)-storetype PKCS12指明密钥仓库类型是PKCS12 
5)-keyalg RSA,指定加密算法,本例中的采用通用的RAS加密算法 
6)-keysize 2048指定密钥的长度为2048 
7)-validity 3650 指定证书的有效期为3650天 
8)-ext san=ip:192.168.100.132请根据你的服务器的IP地址设置,如果不进行设置,客户端在访问的时候可能会报错 
9)-dname “CN=garyyan, OU=mycompany,O=mycompany,L=gd, ST=gd, C=china” 
其中:”CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)”,我在测试的过程中发现随便填就行

4:导出公钥证书(主要用于客户端): 
运行命令:

keytool -export -keystore d:mykeystorekeystore.p12 -alias tomcat -file mycer.cer -storepass 123456

其中: 
1)-keystore d:mykeystorekeystore.p12 是指上面的keystore文件 
2)-alias tomcat是指定别名为tomcat的那一组 
3)-file mycer.cer指定在当前目录生成名为mycer.cer的证书 
4)-storepass 123456是上面生成keystore 所用的密码

七:CA证书的申请

有很多网站能申请CA证书,如沃通,腾讯,阿里云等,大家可根据自己的喜好去申请 
CA证书又分免费和不同价钱的,当然一分钱一分货,对于我们个人开发者来说,免费的CA证书就足够了, 
我个人主要是想解决当别人访问我的https网站时弹出“不安全”的这个问题,因为“不安全”这个提示被人感觉很像钓鱼网站。

目前申请CA证书基本上都要收费,而且一般是有时效性,需要定期去维护证书,略显麻烦。

具体的申请流程请参见各大平台网站,本文暂不累述。

至此,”Https系列之一:https的简单介绍及SSL证书的生成”已完成。 

本文摘自颜家大少的博客 :http://blog.csdn.net/gary_yan 

原文地址:https://www.cnblogs.com/Nikola/p/8505230.html