`
andy54321
  • 浏览: 441366 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HTTPS的实现及其原理

    博客分类:
  • J2EE
阅读更多

在以前的一个项目中,需要使用到SSL得加密链接访问,所以对HTTP做了一点功课。

今天,把这些知识点,做个总结和描述。

 

1.https的实现原理

(此处参考阿密果同学的博文)

 

有两种基本的加解密算法类型:

1)对称加密 :密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密 :密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

 

https的通信过程:

 


 

https通信的优点:

 

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的。

 

2.在项目中实现

 

1)tomcat的配置

 放开原先注释的一段代码:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="c:/tomcat.keystore" keystorePass="tomcat" />
 

2)key的生成

   键入命令并依次填入相应信息,

C:\>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore
Enter keystore password:  tomcat
What is your first and last name?
  [Unknown]:  vincent
What is the name of your organizational unit?
  [Unknown]:  beijing
What is the name of your organization?
  [Unknown]:  peking
What is the name of your City or Locality?
  [Unknown]:  shanghai
What is the name of your State or Province?
  [Unknown]:  shanghai
What is the two-letter country code for this unit?
  [Unknown]:  sh
Is CN=vincent, OU=beijing, O=peking, L=shanghai, ST=shanghai, C=sh correct? (type "yes" or "no")
  [no]:  yes

Enter key password for <tomcat>:
        (RETURN if same as keystore password):
 

3)使用中发现的问题

 

4)此是单向认证,关于双向认证的知识还未补全。

 

 

---------------------

转载一篇配置过程实例:url:http://danwind.iteye.com/blog/603402

TOMCAT @ SSL 写道
Tomcat6.0配置SSL
一、为了节约时间,我这里就只根据我的配置过程进行描述,读者根据各自情况自己分析。
1、在命令行中进入%CATALINA_HOME%/bin目录下执行以下命令:
(1)%CATALINA_HOME%/bin> keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
此时会在%TOMCAT_HOME%/bin下生成server.keystore 文件。
注:参数 -validity 指证书的有效期(天),缺省有效期很短,只有90天。
(2)%CATALINA_HOME%/bin> keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit
这一步用于导出证书,此时会在%TOMCAT_HOME%/bin下生成server.cer 文件。
(3)%CATALINA_HOME%/bin> keytool -import -trustcacerts -alias tomcat -file server.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
这一步是导入到证书信任库,大家可以观察%JAVA_HOME%/jre/lib/security/cacerts 这个文件,执行完此命令后,文件变大。
附:keytool其它命令(列出信任证书库中所有已有证书,删除库中某个证书):
keytool -list -v -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts
keytool -delete -trustcacerts -alias tomcat -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts -storepass changeit

2、修改%TOMCAT_HOME%\conf\server.xml

找到这段代码: Java代码
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
这段代码本来是注释掉的,把注释去掉,并且加上两个属性之后,如下:
Java代码
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\tomcat6.0\bin\server.keystore"
keystorePass="changeit" />

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\tomcat6.0\bin\server.keystore"
keystorePass="changeit" />
3、启动tomcat,访问 https://localhost:8443/,弹出一个安全警告的页面就OK了。


SSL认证详解
单向认证 SSL 协议的具体过程
①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。

⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。

⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码 ”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。

⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

双向认证 SSL 协议的具体过程

① 浏览器发送一个连接请求给安全服务器。

② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。

③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。

④ 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。

⑤ 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。

⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。

⑦ 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。

⑧ 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。

⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。

⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。

上面所述的是双向认证 SSL 协议的具体通讯过程,这种情况要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有 CA 证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用 128 位加密通讯的原因。
 

 

 

 

 

 

  • 大小: 27.6 KB
分享到:
评论
2 楼 songfantasy 2010-11-09  
注意请求https时端口要为tomcat中ssl配置的端口,请求后,要把端口换回来。
1 楼 songfantasy 2010-11-09  
公司刚要求采用https传输数据,学习啦,很不错。

相关推荐

    API Hook基本原理和实现

    本文将详细介绍API Hook的基本原理及其实现方法。 #### 二、Hook的概念 在Windows系统中,消息(message)的传递机制是核心组件之一。消息可以视为一系列具有特定含义的数值标识,类似于通信中的信号代码。Windows...

    OAuth2.0协议原理与实现

    ### OAuth2.0协议原理与实现 #### 一、OAuth2.0协议概述 OAuth2.0协议是一种广泛应用于第三方登录及授权的标准协议。相比于OAuth1.0版本,OAuth2.0进行了多方面的优化和改进,例如简化了授权流程、取消了Token的...

    Java实现的编译原理课程设计- C语言编译器

    在本项目中,我们探讨的是一个使用Java语言实现的编译原理课程设计,具体目标是构建一个能够解析和编译C语言源代码的编译器。这个编译器的实现涵盖了编译器设计中的几个核心步骤,包括词法分析、语法分析、四元式...

    Android RIL 实现原理

    ### Android RIL 实现原理详解 #### 一、RIL(Radio Interface Layer)架构概述 RIL,即射频接口层(Radio Interface Layer),是Android系统中负责与基带处理器进行通信的重要组件。它主要作用于移动通信网络,...

    Java中常用的加密算法及其实现原理详解-保护信息的铠甲,静默守护你的隐私

    本文将详细介绍Java中常见的四种加密算法:对称加密算法、非对称加密算法、散列算法以及数字签名算法,并探讨它们的实现原理与应用场景。 1. 对称加密算法 对称加密算法使用同一密钥进行加密和解密,其优点在于速度...

    AES、DES C语言实现与原理.zip

    本文将深入探讨这两种加密算法的原理、C语言实现及其在信息安全中的重要性。 AES,即高级加密标准,是2001年由NIST(美国国家标准与技术研究所)选定的国际加密标准,替代了之前的DES。AES采用了块加密方式,每个...

    漫画版HTTPS原理

    本章进一步探讨了电子签名的原理及其在网络安全中的应用。 - **签名的作用**:解决网站真伪的问题,确保用户访问的是合法站点而非钓鱼网站。 - **认证机构(CA)**:类似于现实生活中的公安局,负责发放数字证书以...

    基于C++的递归下降语法分析设计原理与实现.zip

    语法分析的设计方法和实现原理;LL(1)文法及其判定;无回朔的递归下降分析的设计与实现; (1)输入串应是词法分析的输出二元式序列,即某算术表达式“专题 1”的输出结果,输出为输入串是否为该文法定义的算术...

    一种简便快速的DCT算法及其硬件实现

    ### 一种简便快速的DCT算法及其硬件实现 #### 摘要与背景 本文介绍了一种改进的离散余弦变换(Discrete Cosine Transform, DCT)算法及其硬件实现方式。传统的DCT算法主要依赖于直接使用DCT定义进行变换,这种做法...

    RSA算法及其实现代码

    1. **数据加密**:RSA可用于保护敏感数据,例如在HTTPS协议中,RSA用于交换会话密钥,确保网络通信的安全。 2. **数字签名**:RSA可以生成数字签名,确保数据的完整性和来源的可靠性。发送者使用私钥签名,接收者用...

    基于PC机的MPEG_4编码原理研究及实现

    本文将深入探讨基于PC机的MPEG-4编码原理及其实现方法。 #### 二、MPEG-4视频标准简介 MPEG-4标准是由ISO/IEC(国际标准化组织/国际电工委员会)制定的一种多媒体编码标准,旨在为多媒体应用提供一种更高效的数据...

    WebKit和Chromium源码及原理剖析.pdf

    - **实现原理**: - Safari浏览器通过优化滚动算法,使得页面滚动更加平滑且具有惯性。 - 通过硬件加速等技术实现快速滚动和回弹效果,提高了用户体验。 #### 第9篇 iOS Safari/WebKit对DeviceMotionEvent的实现 ...

    微机原理与编译原理试卷.zip

    在这个压缩包中,"中北大学微机原理习题册终极版考试必备"和"中北大学微机原理习题及其答案"等文档,提供了大量的习题和解答,帮助学生巩固基础知识,理解并应用微机原理的理论知识。同时,"微机与接口答案2008A.doc...

    蓝桥杯单片机模块化CT107D原理图

    **微控制器及其引脚功能** - 微控制器型号未在给定内容中明确给出,但从引脚配置上可以看出这是一款具有丰富I/O资源的单片机。 - **P0口**:通常作为通用I/O口使用,可以用于连接各种外设。例如,P00~P07可被用来...

    一种GMSK调制算法及其实现

    综上所述,本文详细介绍了一种新型GMSK解调算法的原理及其实现方法,并通过Matlab仿真验证了其在实际应用中的有效性。这种算法不仅为GMSK调制技术提供了新的思路,也为无线通信系统的优化设计提供了参考。

    https客户端java实现工具类

    文件可能包含了一些关于SSL/TLS协议和HTTPS原理的文本信息。这部分内容可能涉及了加密算法、握手过程、证书链的验证等概念。 总结一下,通过`HttpsUtils`工具类,我们可以方便地发起HTTPS请求。同时,使用自定义的`...

    松瀚方案点读笔原理图和PCB设计文件(protel99se)已经量产验证过的资料.rar

    点读笔的原理图是其电路设计的蓝图,它详细列出了所有电子元件及其连接方式。这个压缩包中的“原理图”部分应包含这些信息,包括电源管理、微控制器、音频解码器、传感器接口、存储器以及其他必要的支持电路。通过...

    无线局域网80211协议的分析及其MAC层实现

    ### 无线局域网80211协议的分析及其MAC层实现 #### 一、IEEE802.11协议概述...通过对IEEE802.11协议及其MAC层的深入分析,我们可以更好地理解无线局域网的工作原理和技术特点,这对于进一步的研究和发展具有重要意义。

    cmt2300A原理图和pcb指南

    以下是CMT2300A直连匹配电路的关键组件及其功能: 1. **L1(扼流电感)**:用于隔离直流电源和交流信号,防止直流电流流入射频路径。 2. **C8-C11(电源退耦电容)**:用于去除PA输出信号中的高频噪声,保持电源...

    电信设备-基于因特网网址技术实现移动即时通信的方法及其应用.zip

    《基于因特网网址技术实现移动即时通信的方法及其应用》这一文档主要探讨了在现代通信技术背景下,如何利用因特网网址技术来构建高效、实时的移动即时通信系统。这一方法对于电信设备的设计与优化,以及移动通信服务...

Global site tag (gtag.js) - Google Analytics