密码学基础

密码学发展

古典密码 恺撒密码 算法不公开 密码本 替换
现代密码算法 算法公开 密钥保密 安全性不光密钥 还有管理因素 社会因素

对称密码算法:DES 3DES AES
DES:64bit明文 64bit(56bit)密钥 64bit密文
AES:可变长度128 192 256密钥
128bit明文 128 192 256bit密钥 128bit密文

非对称密码算法:RSA ECC
RSA简述
生成p q两个大素数(保密)
n=pq
ed = 1mod(p-1)(q-1)
(n,e)公钥 (n,d)私钥
1 < e < (p-1)(q-1)互素 e一般取值e=3或65537
c=m的e次方modn,m=c的d次方modn

国密算法:
SM1 商用分组密码算法 不公开 IP核 类AES
SM2 椭圆曲线公钥
SM3 摘要 密码杂凑
SM4 分组密码算法

密码学应用

openssl

目标:机密性,完整性和真实性
简化TLS协议:
(1)握手阶段:身份验证和密钥交换
(2)数据交换阶段:对称数据加密,MAC
(3)关闭:关闭序列 结束会话

1 身份验证(公钥密码、数字签名)–真实性
密钥交换(加密密钥、散列密钥) RSA公钥交换/DH类交换
2 数据加密(加密密钥、对称加密)–机密性
消息验证(散列密钥、MAC散列)–完整性
消息序号(MAC内)–丢弃或重放攻击
3 标记会话结束

展开来说
简要描述

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接

2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息

3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器

4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。(以上为服务端认证)

5)服务器已经通过了客户认证,这一阶段主要完成对客户对服务端的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。(客户端认证)

详细描述

SSL协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。SSL的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:

1)客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

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

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

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

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

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

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

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

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

10)SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

编译openssl

$ ./config --prefix=/opt/openssl --openssldir=/opt/openssl enable-ec_nistp_64_gcc_128
$ make depend
$ make
$ sudo make install

密钥和证书管理

  生成密钥
  RSA密钥

$ openssl genrsa -aes128 -out fd.key 2048
$ cat fd.key
$ openssl rsa -text -in fd.key

  DSA密钥

$ openssl dsaparam -genkey 2048 | openssl dsa -out dsa.key -aes128
$ openssl ecparam -genkey -name secp256r1 | openssl ec -out ec.key -aes128

  创建证书签名申请CSR

$ openssl req -new -key fd.key -out fd.csr
$ openssl req -text -in fd.csr -noout

  自签名证书

$ openssl x509 -req -days 365 -in fd.csr -signkey fd.key -out fd.crt

  检查证书

$ openssl x509 -text -in fd.crt -noout

加密套件选择

主要API

speed测试库的性能及intel平台软件实现与加密指令实现性能测试对比
octeon cn7100

nginx+openssl

SSL,SSH,OpenSSL,OpenSSH,HTTPS的区别

HTTPS:可以使用TLS或者SSL协议,而openssl是TLS、SSL协议的开源实现,提供开发库和命令行程序。openssl很优秀,所以很多涉及到数据加密、传输加密的地方都会使用openssl的库来做。

SSL是通讯链路的附加层。可以包含很多协议。https, ftps, …..是一种国际标准的加密及身份认证通信协议,您用的浏览器就支持此协议。SSL(Secure Sockets Layer)最初是由美国Netscape公司研究出来的,后来成为了Internet网上安全通讯与交易的标准。SSL协议使用通讯双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通讯,在通讯双方间建立起了一条安全的、可信任的通讯通道。它具备以下基本特征:信息保密性、信息完整性、相互鉴定。 主要用于提高应用程序之间数据的安全系数。SSL协议的整个概念可以被总结为:一个保证任何安装了安全套接字的客户和服务器间事务安全的协议,它涉及所有TC/IP应用程序。

SSH:只是加密的shell,最初是用来替代telnet的。通过port forward,也可以让其他协议通过ssh的隧道而起到加密的效果。英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。SSH的安全验证是如何工作的从客户端来看,SSH提供两种级别的安全验证。第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。

OpenSSL:一个对SSL协议的C语言的实现函数库。

OpenSSH:是对SSH协议的实现。

从编译依赖上看:
OpenSSH依赖于OpenSSL,没有openssl的话openssh就编译不过去,也运行不了。

SSL卸载技术对于HTTPS应用的优化与思考(摘)

  迅猛发展的互联网为我们提供了丰富的信息资源,在带来便利的同时也影响着人们工作和生活方式。而让我们无法忽视的是,在开放的互联网所带来的繁荣背后,同时也潜藏着安全方面的隐患。随着人们对网络的依赖愈渐加深,各种加密技术应运而生,用以保障网络信息的安全性。SSL(Secure Sockets Layer)协议,便是在互联网上广泛应用于交易安全性保障的一种主导技术。
  SSL属于加密通讯协议,工作在TCP协议和应用层协议之间。在SSL加密通道内可以运行很多的上层协议,如HTTP通过SSL封装后的协议通常标示为HTTPS。在一般情况下,HTTP采用明文的方式在互联网上进行传输,但是对于认证口令等敏感信息而言,会存在被非法窃听的风险。为了消除这一方面的隐患,可采用SSL协议对HTTP协议进行加密(即HTTPS),以确保在整个数据传输过程中的信息安全性。在SSL通信过程中,首先采用非对称密钥技术交换认证信息,并交换服务器和浏览器之间用于加密数据的会话密钥,然后利用该密钥对通信过程中的信息进行加密和解密。

  当前面临的问题

  借助SSL加密机制,但凡涉及敏感信息的互联网服务,便可利用数据传输加密来增强其安全性。诸如电子商务、账单支付、纳税申报、股票与证券交易等线上业务,纷纷得以通过互联网实现安全交付。然而,任何事物都具有一体两面的特性,SSL的联机加密运算不可避免会消耗服务器的处理性能,在相同的硬件性能下,处理SSL加密数据所消耗的时间是处理明文数据的5倍。换而言之,一台服务器启用SSL加密之后,其性能往往只达到原来的20%,其余80%的计算性能都消耗在了SSL的加密运算方面。如此可以预见到,与日俱增的SSL通信量,将会给网络服务器带来严重的负担。
  为了缓解服务器的性能压力,一度较为流行的方法是安装SSL加速卡。但是加速卡对SSL数据的处理还是建立在服务器主机之上,并且过分注重于加速SSL数据处理,而不是完全卸除系统负荷。随着网络应用的日益丰富、数据流量的迅猛增长、线上用户数量的不断增加,单纯的SSL加速卡已经越来越难以胜任。另一方面,SSL加速卡一般都存在系统兼容性不佳、性能受制于总线技术瓶颈、对主机的依赖性大等问题,越来越无法满足大型应用的需求。

  SSL卸载解决方案

  日益增长的SSL通信量已经对系统设计者们提出了前所未有的挑战,尤其是大型网站和数据中心的场景中,往往需要同时处理数以万计的安全交易。这时候我们发现,传统的SSL加速解决方案在面对如此规模信息处理的时候,显得是那么的苍白无力。此外,由于SSL对应用层数据进行了加密,各种网络设备对这些内容也就变得难以处理,例如负载均衡器无法提取用户会话中的cookies、URL、路径等信息进行细化的分发调度。
  问题已经显而易见,要实现高性能的SSL处理,涉及到两个方面的改进。一方面通过SSL和TCP/IP包处理的一体化设计,全面卸除系统负荷,另一方面要将SSL数据处理融入新型网络设备,以便于保持与一般网络结构有良好的契合性。在这段时间里,市场上也不断涌现出一系列的创新技术,用以改善通过网络交付业务应用的效率。负载均衡方面的创新也从专注于基础设施效率的单纯网络技术,转移到了业务应用的性能优化和安全方面,由此诞生了应用交付这样一个触及网络、服务器、应用乃至安全方面的产品。
  配备SSL卸载功能的应用交付设备,可以充当起SSL代理服务器的角色,将专用的SSL应用程序置于网络服务器的前端,不影响后台服务器主机的CPU资源,从而全面卸除SSL数据处理的负荷。当客户端发起的HTTPS连接,经过应用交付设备处理后,变成明文的HTTP数据,即可被WEB服务程序(例如IIS、APACHE)直接读取,无需特殊的驱动程序来传送和接受网络数据。

  当前应用场景与今后发展

  现如今,越来越多提供线上服务的组织机构,如电子商务和金融服务等行业,纷纷选择通过部署应用交付设备的解决方案,在保障应用系统稳定性的同时,从后台服务器端卸除SSL数据处理的性能负荷。
  西部证券股份有限公司是经中国证券监督管理委员会批准设立,于2001年元月正式注册开业的证券经营机构。公司出于应用安全方面考虑,对官网上使用HTTP传输的应用,采用了HTTPS加密的访问方式,以防止数据传输过程中的泄密或被篡改。鉴于SSL加密运算对服务器的计算资源占用极大,如果由应用服务器来做加密的话,会对应用服务器的业务处理能力造成很大的影响。因此,公司采用了深信服科技的应用交付解决方案,对于发布门户业务网站的Web集群,利用深信服AD设备实现服务器负载均衡,在处理用户登录账户的界面时,通过AD设备完成SSL加密计算,并将后台的HTTP服务转化为安全的HTTPS服务,整合解决安全性和稳定性的问题。
  在不同的应用场景中,应用交付设备的SSL卸载功能也有着相应的侧重点。某些在安全性方面有特殊要求的用户,除了利用应用交付设备处理与客户端的SSL通讯之外,还可以配置与后台服务器之间采用弱加密的SSL进行通讯。这种场景也许在不久的将来便会遇到,随着人们对线上应用的安全性要求不断提升,现今采用1024-bit密钥加密的CA证书将在2013年停用,取而代之的是等级更高的2048-bit密钥加密。对于通过互联网交付业务的组织机构而言,将不得不考虑这对于应用系统乃至网络基础设施的性能影响。届时,利用应用交付设备处理来自客户端的2048-bit密钥SSL通讯,而后台服务器仍然延用1024-bit密钥。不仅能满足行业合规性的要求,也可降低网络设备升级带来的成本和负担,不失为一种平滑过渡的方案。

https/ssl总结相关推荐

  1. 浅谈https\ssl\数字证书

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本 ...

  2. Sahi (2) —— https/SSL配置(102 Tutorial)

    Sahi (2) -- https/SSL配置(102 Tutorial) jvm版本: 1.8.0_65 sahi版本: Sahi Pro 6.1.0 参考来源: Sahi官网 Sahi Quick ...

  3. SharePoint 2013 配置HTTPS(SSL)

    //来源:http://www.cnblogs.com/jianyus/p/4234780.html 1.打开服务器上的IIS,找到服务器证书,如下图: 2.进入服务器证书,点击右侧操作"创 ...

  4. 【ruoyi若依】启用HTTPS/SSL后,首页重定向出错

    前言 ruoyi 4.6.0 Spring Boot Version: 2.3.4.RELEASE nginx 1.5.11 nginx 反向代理项目.参考这里 添加了 ForwardedHeader ...

  5. 易语言https服务器,E2EE应用服务器套件 - 文档 - [基础教程] 使用HTTPS(SSL) - E2EE易语言网站敏捷开发框架...

    使用HTTPS(SSL) 1.申请证书 首先您需要申请SSL/TLS证书. 介绍几个免费SSL证书申请网站: 申请证书的方式网上有很多相关资料,这里就不多做说明了. 申请证书后通常会有以下三个文件: ...

  6. AFNetworking 对数据进行https ssl加密

    参考来源:http://www.cnblogs.com/jys509/p/5001566.html 现在在工作中的工作需求:https请求验证证书 一般来讲如果app用了web service , 我 ...

  7. Apache httpd 配置HTTPS SSL访问 443

    2, 首先安装https模块yum install mod_ssl 3. 配置Apache Web服务器 首先,修改下面的配置文件.仅需配置红色部分 SSLCertificateFile 和 SSLC ...

  8. 细读HTTPS -- SSL/TLS历史,密码学

    文章目录 细读HTTPS -- SSL/TLS历史,密码学 SSL/TLS协议历史 密码学 对称加密 分组密码模式 ECB CBC 非对称加密 消息验证代码 散列函数 数字签名 细读HTTPS – S ...

  9. WebService系列之Axis Https(SSL)证书校验错误处理方法

    WebService系列之Axis Https(SSL)证书校验错误处理方法 最近在用Axis调用https的接口,抛出异常: javax.net.ssl.SSLHandshakeException: ...

  10. python sanic 设置ssl证书_配置自签https ssl证书

    由于人们越来越重视网络安全,所以很多平台及系统都要求使用https方式接入.而且一些开源服务框架在调用时也只接受https请求,这将导致平时开发/测试时需要用到ssl证书的地方越来越多. 在2016年 ...

最新文章

  1. 一步一步SharePoint 2007系列文章目录
  2. 提高sqlmap爆破效率
  3. 欢迎大家踊跃报名担当“讲师”
  4. 2.4 残差网络为什么有用-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  5. Oracle 11g新特性:Automatic Diagnostic Repository
  6. x265-common.h
  7. 量子纠缠在量子计算机中的作用,量子纠缠
  8. 使用设计模式构建通用数据库访问类
  9. Android之发送短信后按钮(60秒)变灰色每隔一秒递减显示
  10. date 显示或设置系统时间和日期
  11. html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试
  12. SpringCloud与Feign
  13. Spring DelegatingFilterProxy 过滤器 的原理及运用
  14. python长度转换代码尺和米_尺,寸,跟米,厘米的换算??
  15. 基于soot的过程内数据流分析
  16. FANUC机器人外部电缆连接示意图(一)
  17. Matlab画图如何去掉图形框右边和上边的刻度
  18. 大顶堆及小顶堆求最大或最小K个数
  19. 你必须理解的三大软件原则1_DRY
  20. gitbook生成pdf时缺少ebook.css解决方案

热门文章

  1. Efficient serialization in C tpl
  2. Allegro DFM Ravel Rule检查PAD 90度出线
  3. EOF on Windows
  4. inner_product函数实现向量内积矩阵乘法
  5. php strtotime,php的strtotime举例
  6. 虚基类及虚基类的定义使用
  7. Aegisub 打K值视频教程+相关插件
  8. 三种蓝牙架构实现方案(蓝牙协议栈方案)
  9. VS2019 C++的跨平台开发——C# WPF
  10. 冯诺依曼计算机相关资料,冯诺依曼计算机的基本内容