`
tianshibaijia
  • 浏览: 1126853 次
文章分类
社区版块
存档分类
最新评论

SSL Demo说明

 
阅读更多
1.单向ssl和双向ssl
网上有些例子可以参考:
http://www.yeeach.com/digg/story/11964
http://www.bluedash.net/spaces/SSL介绍与Java实例
第一步: 客户端发送ClientHello消息,发起SSL连接请求,告诉服务器自己支持的SSL选项(加密方式等)。
单向SSL:
1 *** ClientHello, TLSv1
第二步: 服务器响应请求,回复ServerHello消息,和客户端确认SSL加密方式:
1 *** ServerHello, TLSv1
第三步: 服务端向客户端发布自己的公钥。
第四步: 客户端与服务端的协通沟通完毕,服务端发送ServerHelloDone消息:
1 *** ServerHelloDone
第五步: 客户端使用服务端给予的公钥,创建会话用密钥(SSL证书认证完成后,为了提高性能,所有的信息交互就可能会使用对称加密算法),并通过ClientKeyExchange消息发给服务器:
1 *** ClientKeyExchange, RSA PreMasterSecret, TLSv1
第六步: 客户端通知服务器改变加密算法,通过ChangeCipherSpec消息发给服务端:
1 main, WRITE: TLSv1 Change Cipher Spec, length = 1
第七步: 客户端发送Finished消息,告知服务器请检查加密算法的变更请求:
1 *** Finished
第八步:服务端确认算法变更,返回ChangeCipherSpec消息
1 main, READ: TLSv1 Change Cipher Spec, length = 1
第九步:服务端发送Finished消息,加密算法生效:
1 *** Finished
那么如何让服务端也认证客户端的身份,即双向握手呢?其实很简单,在服务端代码中,把这一行:
1 ((SSLServerSocket) _socket).setNeedClientAuth(false);
改成:
1 ((SSLServerSocket) _socket).setNeedClientAuth(true);
就可以了。但是,同样的道理,现在服务端并没有信任客户端的证书,因为客户端的证书也是自己生成的。所以,对于服务端,需要做同样的工作:把客户端的证书导出来,并导入到服务端的证书仓库。


双向SSL
在 *** ServerHelloDone 之前,服务端向客户端发起了需要证书的请求 *** CertificateRequest 。
在客户端向服务端发出 Change Cipher Spec 请求之前,多了一步客户端证书认证的过程
*** CertificateVerify 。


编码注意:
System.setProperty("javax.net.ssl.trustStore", SERVER_TRUST_STORE);//在双向SSL才需要,用于对方的证书
System.setProperty("javax.net.debug", "ssl,handshake");//打开SSL握手的日志
((SSLServerSocket) _socket).setNeedClientAuth(true);//是否启用双向SSL认证
context.init(kf.getKeyManagers(), tms, null); //tms参数为TrustManager[],可以自定义,也可以从keystore构造
自定义的例子:










2.签名的例子
http://www.herongyang.com/JDK/jca_signature_2.html
分享到:
评论

相关推荐

    open ssl demo example (证书自带)

    open ssl demo 完整的例子, 适合入门, 简单易懂,有解释说明 open ssl demo example (证书自带)

    cas 配置client 1.0 &2.0 及proxy DEMO 说明

    cas 配置client 1.0 &2.0 及proxy DEMO 说明 1 cas server 搭建 1.1 资源准备 cas server 下载 http://www.ja-sig.org/downloads/cas/cas-server-3.3.1-release.zip 1.2 解压后打开cas-server-3.3.1-release\cas-...

    WebRTCDemo:在Node.js上使用WebRTC视频会议和Socket.io的WebRTC演示

    说明 WebRTC Demo 程序,修改自 and ; 其中: 添加了HTTPS支持,后端使用Express发布,修改部分样式; 用于做 的Signaling Server 使用 git clone https://github.com/lanbin45/WebRTCDemo.git; cd WebRTCDemo; ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    xUtils3 demo

    其它参数说明见{@link org.xutils.event.annotation.Event}类的说明. **/ @Event(value = R.id.btn_test_baidu1, type = View.OnClickListener.class/*可选参数, 默认是View.OnClickListener.class*/) private ...

    apache-fortress-demo:示例Web应用程序演示了JavaEE,Spring Security和RBAC细粒度授权的端到端安全性。 所有连接均使用SSL

    Ansible剧本,用于执行安装和设置Apache Fortress Demo的步骤,包括OpenLDAP,Apache Tomcat,MariaDB,生成证书,密钥等。 目标环境的先决条件 安装了OpenSSL的Debian或Redhat Liunx变体计算机。 Java 8 ++ ...

    毕业设计: 黑白棋游戏源码

    服务端启动:python -m src.web.server.web_ssl_server,可能需更改 config.py 下的 web_ssl_cert_file、web_ssl_key_file 等参数 客户端启动:使用浏览器打开 src/web/client/index.html src/main.py 为程序执行...

    微信小程序完整demo:包含服务器端及数据库文件:Pool 网店

    1.微信小程序DEMO源代码(文件夹 justforfun)   2.服务器脚本文件(php脚本文件,文件夹 html)   3.数据库脚本文件 (文件 wechat.sql)   4.SSL证书文件(文件夹 romeo.wang)       使用说明:   1.将 ...

    soapjava客户端源码-vba_client_demo:vba_client_demo

    工程说明 文档见 vba-client-demo-pure VBA接口客户端示例代码。是框架和构建工具无依赖的纯eclipse工程。jdk版本兼容1.7及以上。 接口文档请见 JavaKey2CSharpKey Java aes加密C#解密的取巧方法 见 的第一种方法 ...

    Fiddler官方接口调用源码

    官网也提供了一个Demo调用例子,但是例子的内容比较少,以下给大家提供官方的DEMO和相关的说明文档。FiddlerCoreMono 文件夹内即是DEMO。FiddlerCore.chm 文件是帮助文档。makecert.exe 这个貌似是输出证书的,...

    zego-express-webrtc-sample:图解演示

    说明 该仓库为即构科技webrtc的使用示例demo,希望帮助开发者快速上手webrtc-sdk; 每个页面展示sdk一种功能,可根据实际场景自由组合 可Github,码云 集成条件 即构开发者账户() webrtc兼容性如下 只支持SSL的Web...

    微信小程序-用微信小程序的canvas做的一个小游戏

    微信小程序demo 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏。 包含一些基本的功能:躲避障碍物、计分、排行榜等等...我的做法是使用神器Charles的SSL Proxy和Map Remote功能,实现对https请求

    diffie-hellman-key-exchange-demo:用于演示 Diffie Hellman 密钥交换原理的现场演示的材料

    Diffie-Hellman-Merkle... 此存储库中的材料和说明将解释用于教授 DH 密钥交换的有效演示。演示要开始演示,请要求两名志愿者参与活动。 指定一名参与者为“Alice”,另一名参与者为“Bob”。 给 Alice 一份“Alice”讲

    kafka-docker:使用docker和orchestrate kafka构建kafka以及使用docker-compose构建zookeeper

    Build Kafka cluster ...compose rm -f集群配置说明主要配置ZOOKEEPER_CONNECT: zookeeper0:12181,zookeeper1:12182,zookeeper2:12183/kafkaBROKER_ID: 0LISTENERS: PLAINTEXT://kafka0:19092,SSL://kafka0:29092ZOO

    alm-demo-repo:ALM 用户组的演示 Chef 存储库

    这是用于使用 Chef 管理系统的说明书、角色、配置文件和其他工件的地方。 我们强烈建议将此存储库存储在 Git 等版本控制系统中,并将其视为源代码。 虽然我们更喜欢 Git,并通过 GitHub 提供此存储库,但欢迎您下载...

    killbill-paypal-demo:杀死Bill PayPal演示

    按照安装后说明进行操作后,您应该可以访问ruby和gem可执行文件。 通过在以下文件夹中运行来安装依赖项: gem install bundler bundle install 这也假设: 杀死比尔 默认租户(鲍勃/拉扎尔)已创建 已安装并配置 ...

    nginx slab内存管理精简源码及注释

    为方便描述下面做一些说明: 1.将整个slab的管理结构称slab pool. 2.将slab pool前部的ngx_slab_pool_t结构称slab header. 3.将管理内存分级的ngx_slab_page_t结构称slot分级数组. 4.将管理page页使用的ngx_slab_...

    node-tls-example:在节点中使用tls以及创建证书链的示例

    所需的所有密钥和证书都可以通过ssl目录中的make-certs.sh来完成。 在Raspery Pi上安装和测试 以下是在Pi上运行TLS示例客户端和服务器的一些说明,这似乎很耗时,但很容易: 安装节点。 js Pi 一种方便的方法是...

Global site tag (gtag.js) - Google Analytics