Https 公钥、私钥、证书
、https的握手协议: http://blog.csdn.net/clh604/article/details/22179907
2、证书的概念:http://blog.csdn.net/sealyao/article/details/5761747
3、详细解释证书:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html#!comments
数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥。
一般的数字证书产品的主题通常含有如下字段:
公用名称 (Common Name) 简称:CN 字段,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端证书则为证书申请者的姓名;
单位名称 (Organization Name) :简称:O 字段,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端单位证书则为证书申请者所在单位名称;
证书申请单位所在地:
所在城市 (Locality) 简称:L 字段
所在省份 (State/Provice) 简称:S 字段
所在国家 (Country) 简称:C 字段,只能是国家字母缩写,如中国:CN
其他一些字段:
电子邮件 (Email) 简称:E 字段
多个姓名字段 简称:G 字段
介绍:Description 字段
电话号码:Phone 字段,格式要求 + 国家区号 城市区号 电话号码,如: +
地址:STREET 字段
邮政编码:PostalCode 字段
显示其他内容 简称:OU 字段
android 上进行 https开发:
1、首先需要服务器提供x509格式的server.crt证书文件。
2、下载一个bcprov-ext-jdk15on-152.jar 下载地址http://www.bouncycastle.org/latest_releases.html
3、将该jar放置到C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext地址
4、keytool -import -alias serverkey -file server.crt -keystore tclient.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
将crt 转换为 bks文件(android环境必须的)
参考链接:http://frank-zhu.github.io/android/2014/12/26/android-https-ssl/
private static final String KEY_STORE_TYPE_BKS = "bks";//证书类型 固定值
private static final String KEY_STORE_TRUST_PASSWORD = "123456";//客户端证书库密码
private static SSLContext getSSLContext(Context context) {
try {
// 客户端信任的服务器端证书
KeyStore trustStore = KeyStore.getInstance(KEY_STORE_TYPE_BKS);
InputStream tsIn = context.getResources().openRawResource(R.raw.tclient);
try {
trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
tsIn.close();
} catch (Exception ignore) {
}
}
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
return sslContext;
} catch (Exception e) {
Log.e("tag", e.getMessage(), e);
}
return null;
}
SSLContext sslContext = getSSLContext(Env.getContext());
conn = (HttpsURLConnection) url.openConnection();
((HttpsURLConnection)conn).setSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new TrustAllHostnameVerifier());
数字证书包含的内容:1、证书颁发机构;2、使用机构;3、公钥;4、有效期;5、签名算法;6、签名hash算法;7、指纹算法;8、指纹
A、证书生成过程:
证书的生成原理:公司ABC 自己生成一对公钥、私钥以及对应的加密算法,还有公司相关信息,提供给证书颁发机构CA。CA根据提供的信息生成证书(或者自己生成,这里不是重点)
指纹算法:
使用指纹算法(sha1或者是md5)对证书全文提取指纹(简单点就是计算对应的hash值)。PS:指纹的目的是校验证书是否被修改,但指纹本身也可以被修改;例如,修改证书之后,用对应的指纹算法重新提取指纹。 签名Hash算法:
为了解决上述问题,CA机构用自己的私钥,使用证书中指定的签名Hash算法,对指纹进行加密。PS:这样其他人因为不知道,CA机构的私钥,就无法对修改后证书的指纹进行再次签名 B、证书的验证过程
1、提取证书发布机构;PS:这个是微软、gongle集成在系统中的,他们选择的一些公信力高的机构的证书集成到系统中。
2、从系统中查找该CA机构的证书,并且提取公钥,使用公钥对指纹进行解密,对应的签名算法从ABC公司的证书中提取;
3、从ABC公司的证书中提取指纹算法,从新对证书进行指纹提取,然后和上一步提取的指纹进行对比,如果相同表示没有被修改。 客户端拿到证书之后, 签名算法:
客户端从服务器获取公司ABC的签名证书之后,从中提取公钥和签名算法,对需要发送的明文,使用公钥和签名算法进行加密;
服务器端接收到密文后,使用私钥对密文解密;
服务器发送的消息,使用私钥加密,不能保证不可见性,所以后续会和客户端协商选择一个对称加密算法来加密数据传输。 证书链:
公司ABC的证书需要CA机构的证书进行验证,CA机构的证书是收到微软信任的,可以不用验证。但是其中可能存在多级验证比如,ABC的证书需要CA验证,CA需要BA验证,AA才是微软信任的,无需验证的证书。这样就形成了一个信任链条
另外常用的RSA为非对称加密算法,并且公钥、私钥都可以用来加密、解密
Https 公钥、私钥、证书的更多相关文章
- OpenSSL与公钥私钥证书签名的千丝万缕
导语 人对任何事物的认识都是阶段性的,从无知到知晓,从懵懂到半知半解,从误解到将信将疑,从晕头转向到下定决心吃透. 介绍 OpenSSL是一个强大的命令行工具,它可以用来处理许多种跟PKI(Publi ...
- [转]浅谈https\ssl\数字证书
浅谈https\ssl\数字证书 http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html 全球可信的 ...
- 公钥私钥 ssl/tsl的概念
一,公钥私钥1,公钥和私钥成对出现2,公开的密钥叫公钥,只有自己知道的叫私钥3,用公钥加密的数据只有对应的私钥可以解密4,用私钥加密的数据只有对应的公钥可以解密5,如果可以用公钥解密,则必然是对应的私 ...
- https原理:证书传递、验证和数据加密、解密过程解析
写的太好了,就是我一直想找的内容,看了这个对https立马明白多了 http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知 ...
- Https系列之二:https的SSL证书在服务器端的部署,基于tomcat,spring boot
Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...
- Https背景与证书在spring boot项目中的使用
https背景(本人学习参考中觉得不错的几篇文章) https如何解决安全问题 HTTPS 理论基础及其在 Android 中的最佳实践 什么是https 关于https的个人总结 总所周知http是 ...
- 转载:https原理:证书传递、验证和数据加密、解密过程解析
写的太好了,就是我一直想找的内容,看了这个对https立马明白多了 http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知 ...
- PFX文件提取公钥私钥
jks是JAVA的keytools证书工具支持的证书私钥格式.pfx是微软支持的私钥格式. cer是证书的公钥. 如果是你私人要备份证书的话记得一定要备份成jks或者pfx格式,否则恢复不了. 简单来 ...
- 浅谈https\ssl\数字证书
全球可信的SSL数字证书申请:http://www.shuzizhengshu.com 在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕 ...
- RSA不对称加密和公钥 私钥
理论上只要有加密的规则 基本都是可以解密的 但是如果解密需要消耗的时间过长 比如1000年 解密过后已经没什么意义了 此时可认为这种算法不能被破解 也就是说此加密可信 MD5 是一种单向操作 加密后不 ...
随机推荐
- C# 正则表达式测试工具与分享窗体自适应类
放假刚回来,自己打算写一个正则表达式的测试工具,因为上次在网上用的一个在线正则表示测试工具就 没有很好的服务自己的,所以才有了现在的想法,想写一个C#开发者用的正则表达式测试工具!期间由于最大化时控件 ...
- CLR内存管理
CLR管理内存的区域,主要有三块,分别为: 1.线程的堆栈:(在程序应该编译过程为值类型实例分配好内存) 用于分配值类型实例.堆栈主要由操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时 ...
- Linux 配置主机名
方法 1:临时配置 [root@NING ~]# hostname NING CRT重新连接即可,服务器重启失效. 方法 2:永久配置 步骤1:包含了主机最基本的网络信息,用于系统启动. [root@ ...
- 使用Process类重定向输出与错误时遇到的问题 (转)
程序中要调用外部程序cmd.exe执行一些命令行,并取得屏幕输出,使用了Process类,基本代码如下: Process process = new Process(); process.StartI ...
- 大熊君说说JS与设计模式之------中介者模式Mediator
一,总体概要 1,笔者浅谈 我们从日常的生活中打个简单的比方,我们去房屋中介租房,房屋中介人在租房者和房东出租者之间形成一条中介.租房者并不关心他租谁的房.房东出租者也不关心他租给谁.因为有中介的存在 ...
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】
密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码.客户端使用这些信息,向"服务商提供商"索要授权 ...
- hmailserver
开始使用: www.hmailserver.org 问题 让hmailserver的用户使用各自的中继来发送邮件: http://dagai.net/archives/968
- IP协议
因特网协议(Internet Protocol, IP)是Internet的核心协议之一, 工作在网络层.IP协议提供节点间的寻址,路由以及顺序控制, 流量控制等服务. IP协议分为IPv4和IPv6 ...
- C语言 对称矩阵 压缩 实现
对称矩阵压缩的简单实现 (GCC编译). /** * @brief C语言 对称矩阵 压缩 实现 * @author wid * @date 2013-11-03 * * @note 若代码存在 bu ...
- [Hyper-V]制作一个干净的操作系统模板
描述: 在Hyper-V里创建虚拟机的时候,我们可以先来创建一个干净的操作系统,将其制作为操作系统模板,该虚拟机的磁盘文件也将被视作基础磁盘以方便基于它创建差异化磁盘 安装其它虚拟机的时候就可以差异化 ...