博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Https 公钥、私钥、证书
阅读量:6661 次
发布时间:2019-06-25

本文共 3602 字,大约阅读时间需要 12 分钟。

1、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 字段,格式要求 + 国家区号 城市区号 电话号码,如: +86 732 88888888 地址:STREET  字段 邮政编码:PostalCode 字段 显示其他内容 简称:OU 字段

 

android 上进行 https开发: 1、首先需要服务器提供x509格式的server.crt证书文件。 2、下载一个 下载地址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为非对称加密算法,并且公钥、私钥都可以用来加密、解密

 

你可能感兴趣的文章
SQL Server 使用 Hierarchyid 操作层次结构数据
查看>>
深入理解OSGI:Java模块化之路
查看>>
android中按back键返回上一个activity,如何重新调用上一个activity的oncreate方法?...
查看>>
《编写高质量代码:改善Python程序的91个建议》读后感
查看>>
快速入门系列--Log4net日志组件
查看>>
Quartz---------------->概述
查看>>
idea创建普通java项目以及maven创建项目过程(转)
查看>>
站立会议第五天
查看>>
策略模式
查看>>
maven项目在myeclipse中不出现Maven Dependencies 和maven标识的解决方法
查看>>
py递归
查看>>
配置https服务器系列之一:自制ca证书并配置到nodejs-express服务器
查看>>
poj3625 最小生成树 Prim
查看>>
C# 无法将类型为“__DynamicallyInvokableAttribute”的对象强制转换为类型...
查看>>
C# WinForm 技巧十: winfrom 全屏自适应屏幕分辨率
查看>>
js截取字符串substr和substring的区别
查看>>
响应式调研资料
查看>>
Jenkins 修改主目录正解 workspace
查看>>
set git p4merge tool
查看>>
Using SetAdded and SetModified to Change RowState
查看>>