`

https的实现基本原理

阅读更多

https的实现原理

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

 

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

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

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

 

https的通信过程:

https通信的优点:

 

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

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

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

 

 

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代码

这段代码本来是注释掉的,把注释去掉,并且加上两个属性之后,如下:
Java代码

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
分享到:
评论

相关推荐

    API Hook基本原理和实现

    ### API Hook基本原理和实现 #### 一、概述 API Hook是一种常见的软件开发技术,主要用于在Windows操作系统中修改或监控应用程序接口(API)的行为。通过API Hook,开发者可以在不更改原始程序代码的情况下,对...

    Ajax基本运行原理

    ### Ajax基本运行原理详解 #### 引言 随着互联网技术的不断发展,用户对于网页应用程序的交互性和用户体验的要求越来越高。传统的浏览器/服务器(B/S)架构虽然解决了早期客户端/服务器(C/S)架构中存在的部署和...

    linux下C语言实现https请求源码

    首先,我们需要了解HTTPS的基本工作原理。HTTPS基于SSL/TLS协议,它在HTTP之上添加了一层加密,以保护数据的隐私和完整性。在C语言中实现HTTPS请求,我们通常会用到以下关键组件: 1. **SSL/TLS库**:最常用的库是...

    HTTPS传输协议原理介绍

    HTTPS作为保障网络安全的重要手段之一,通过SSL/TLS协议实现了数据的加密传输,有效地保护了用户数据的安全。了解HTTPS的工作原理对于从事网络安全、Web开发等领域的人来说至关重要。未来随着技术的进步,HTTPS将...

    基本模型计算机设计与实现.pdf

    * 基本模型计算机设计:本文档中对基本模型计算机的设计,包括CPU的设计和实现,展示了计算机组成原理的基本概念和原理。 * FPGA技术应用:通过FPGA技术,可以实现复杂的数字电路,例如CPU的设计和实现。 * EDA软件...

    https原理与配置 centos

    HTTPS和HTTP的区别在于:HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用...

    OAuth2.0协议原理与实现

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

    LTE核心网基本原理及关键技术

    ### LTE核心网基本原理及关键技术 #### 一、概述 随着移动通信技术的不断发展,长期演进(Long Term Evolution, LTE)作为第四代(4G)移动通信标准之一,其核心网部分相较于2G/3G网络有着显著的技术进步。本文将详细...

    漫画版HTTPS原理

    ### 漫画版HTTPS原理解析 #### 第1章:可怕的Internet 互联网作为一个庞大的网络空间,不仅连接着全球的信息资源,也存在着各种安全隐患。这部分通过几个关键词:假冒、篡改和抵赖,来阐述互联网安全的基本挑战。 ...

    协程的实现与原理1

    \n\n通过学习本系列文章,读者不仅可以了解协程的基本概念和工作原理,还能掌握实际编写和使用协程的方法,从而在实际项目中更好地利用协程提高系统性能。作者提供的代码示例(https://github.com/wangbojing/NtyCo...

    基于Ruby+Java搜索引擎原理与实现

    《基于Ruby+Java搜索引擎原理与实现》是一部深入探讨搜索引擎技术的书籍,虽然只涵盖了前三个章节,但已足以让我们对搜索引擎的基本运作有初步的理解。在本文中,我们将围绕Ruby和Java这两种编程语言如何应用于搜索...

    Domino HTTP服务器基本原理

    ### Domino HTTP服务器基本原理 #### 一、Domino HTTP服务器结构与工作原理 Domino HTTP服务器作为IBM Domino环境中的一个重要组成部分,主要用于处理HTTP协议请求,为用户提供基于Web的服务。其核心功能是通过...

    cas单点登录原理以及例子的搭建和实现

    SSO(Single Sign-On)是一种身份验证机制,允许用户在一个应用系统中登录后,无需再次登录即可访问其他...在配置过程中,确保HTTPS的安全传输是至关重要的,同时,正确配置服务器和客户端的交互是实现SSO功能的关键。

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

    在C语言中实现AES和DES,首先需要理解算法的基本流程,然后用C语言的结构体和函数来构建加密和解密的过程。对于AES,可以使用开源库如 OpenSSL 或者 AESNI(Intel 提供的硬件加速接口)进行实现。C语言代码通常会...

    手机的基本原理1,教你了解手机是怎么工作的

    总的来说,“手机的基本原理1”这个课程会带领我们走进手机的世界,了解其通信、计算、显示以及各种辅助功能的实现。通过学习,我们可以更深入地理解这一日常设备的工作方式,从而更好地利用和维护我们的手机。

    spring-boot+webSocket实现向日葵远程控制

    一直很好奇这种软件的基本原理是如何的? 今天带大家通过一个简单的项目来探究一下,并实现一个简单的远程操控软件 具体实现逻辑可以参考我的博客 https://blog.csdn.net/qq_34577234/article/details/125337613 ...

    基于Python实现可靠数据传输协议【100010493】

    理解可靠数据传输的基本原理 掌握停等协议的工作原理 掌握基于 UDP 设计并实现一个停等协议的过程与技术。 理解滑动窗口协议的基本原理;掌握 GBN 的工作原理;掌握基于UDP 设计并实现一个GBN协议的过程与技术。 ...

    编译原理NFA转DFA实现(python).zip

    在编译原理中,非确定有限自动机(Non-Deterministic Finite Automaton,简称NFA)和确定有限自动机(Deterministic Finite Automaton,简称DFA)是两种重要的概念。NFA转DFA是编译器设计的一个关键步骤,它有助于...

    Apache 使用指南与实现原理

    6. **HTTPS与SSL/TLS**:在当今的互联网环境中,HTTPS是确保数据传输安全的基本要求。Apache支持配置SSL证书,通过mod_ssl模块实现HTTPS连接。 7. **CGI和FastCGI**:Apache可以运行CGI(Common Gateway Interface...

Global site tag (gtag.js) - Google Analytics