SSL编程(1) 概述

文章来自本园马若望

SSL是TCP/IP环境上的标准的安全加密传输协议。SSL的全称是安全的 Socket层,它具有与Socket类似的客户端/服务器体制。常见的https即http+ssl,从安全的角度看,https的安全技术就是SSL 加密。从建立服务的角度,配置一个web服务器提供https服务,其关键就是获取和设置所需的SSL服务器证书。SSL基本的安全约束是对服务器的验 证,这一安全约束被用来防止钓鱼网站仿冒合法的网站,从而防止客户端向假的服务器,如仿冒电子邮件或者网银外观的网站,提供登录口令等敏感数据。注册一个 与知名公司相似的域名、仿造一模一样的页面是很容易的,如app1e.com、taobao.aution.com这样的李鬼域名,很容易蒙过一不留神的 上网者。由于从VeriSign等主要的数字证书服务商那里获取与仿冒域名一致的数字证书则几乎是一件不可能的事情,通过浏览器端内置的强制服务器证书验 证,用户只需关注浏览器的https锁头标志即可防止陷入这些仿冒网站的陷阱。另一方面,SSL的加密是端到端的,这意味着从用户端直到服务器端的任何中 间环节都无法查看SSL通讯的内容。只要客户端应用程序(如浏览器)与合法服务器成功建立了SSL连接,wifi无线信号、路由器、运营商等通信数据流过 的环节上的任何地方的任何人,都无法解密查看通信内容。这一安全能力也是Google在全面使用https(即SSL加密通信)后,被整个墙掉的原因之 一。这里我们可以推测到,即使是拥有巨大资源的墙,在面对SSL时,也不能对通信内容进行较为全面的分析过滤,最后不得不把Google整个墙掉了事。

SSL支持可选的客户端验证,在面向特定用户的高安全性应用中,如网银、第三方支付等,服务器也需要验证客户端的身份。基于用户数字证书的SSL客 户端验证,能够提供比口令更强的安全性。这一点,在央行2015支付规范中得到了认可。规范明确了,第三方支付机构如果采用基于数字证书的客户端验证,不 受单日最多5000元的限制。

SSL利用公钥技术,无须在通信双方预先共享任何秘密密钥或者口令,就能够在彼此之间建立可信赖的安全连接。SSL对网络没有额外的要求,只要通信 双方能够建立普通的TCP连接,它们就能够在这个普通连接之上建立安全的SSL加密连接。这一点与IPSec恰恰相反,IPSec把加密工作留给了网络, 对于应用程序是透明的。显然,目前的互联网没有对公众提供IPSec服务。对于互联网应用开发者,SSL是适用的网络通信数据加密手段。选用SSL加密 时,证书和密钥管理,如获取和维护数字证书等,需要应用的设计者予以考虑。在拥有良好的PKI公钥基础设施的环境中,这个问题会包在PKI身上解决。反 之,应用开发者需要规划应用级的数字证书管理机制。在这种情形下,证书管理不会很复杂,但这仍然是开发者使用SSL的过程中,需要理解和处理的重要问题之 一。现在的应用APP越来越多地把Web服务作为用户终端和服务器,服务器与服务器之间交互的方式。这里我们必须注意,这些更高层的网络服务交付机制,并 没有发明新的网络通信安全机制,它们会直接使用SSL之类的网络传输加密协议所提供的安全能力。安全使用这些更高级的应用服务,要处理的证书管理和密钥管 理、安全特性就是其加密通信机制的相关工作。

SSL的所面临安全威胁主要是中间人攻击。由于实施中间人攻击的攻击者必须让攻击者掌控的CA根证书进入客户端的受信任CA证书存储库,这一操作一般会需要管理员账户的人工许可,适当的安全教育能够缓解这一威胁。

SSL协议本身在客户端和服务器端有着较为复杂的交互和状态迁移过程,所幸,这一部分的工作已经在支持SSL的各种加密开发库中得到了很好的实现。 下面,我们将讨论在windows、android、linux等不同平台环境下的ssl加密编程问题。包括的主要内容,一是所采用的加密库函数的结构和 使用方法,二是所需的数字证书的获取与管理。

时间: 2024-10-13 00:26:49

SSL编程(1) 概述的相关文章

SSL编程(3).NET实现SSL服务端

准备开发用数字证书 一般学习和开发调试场合,不会随便使用正式的SSL服务器证书的私钥.由于服务器验证对于SSL来说是必须的,SSL服务器端必须有拥有一个服务器证书,即能够访问到证书的私钥.对于要求客户端验证的SSL,对客户端有着同样的要求,客户端需要拥有与自己声称的身份对应的数字证书. Windows SDK中有一个制作测试开发用的临时数字证书的命令行工具:makecert.exe.这一工具也被包含在Visual Studio中.打开SDK或者Visual Studio的命令行提示窗口,输入如下

第12章-Swing编程 --- Swing概述

(一)Swing概述 将Swing组件按功能来分: ->顶层容器: JFrame.JApplet.JDialog和JWindow ->中间容器: JPanel.JScrollPane.JSplitPane.JToolBar等 ->特殊容器:在用户界面上具有特殊作用的中间容器,如JInternalFrame.JRootPane.JLayeredPane和JDestopPane等 ->基本组件:实现人机交互的组件,如JButton.JComboBox.JList.JMenu.JSlid

SSL加密编程(1) 概述

SSL是TCP/IP环境上的标准的安全加密传输协议.SSL的全称是安全的Socket层,它具有与Socket类似的客户端/服务器体制.常见的https即http+ssl,从安全的角度看,https的安全技术就是SSL加密.从建立服务的角度,配置一个web服务器提供https服务,其关键就是获取和设置所需的SSL服务器证书.SSL基本的安全约束是对服务器的验证,这一安全约束被用来防止钓鱼网站仿冒合法的网站,从而防止客户端向假的服务器,如仿冒电子邮件或者网银外观的网站,提供登录口令等敏感数据.注册一

1.Java网络编程之概述

黑马程序员_毕向东_Java基础视频教程第23天-01-网络编程(概述)学习笔记 网络通讯三要素: 1.IP地址 2.端口号 3.传输协议 我们之所以学习计算机网络,其实是为了实现计算机与计算机之间的通信.然而要实现计算机A与计算机B之间的通信,就首先要在网络上找到彼此,这时候就需要借助IP来唯一标识自己的计算机和对方计算机. 但是当我们通过IP找到对方的计算机后,我们把发送的信息传递给腾讯QQ?还是YY?还是飞信?为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识,为了方便称呼这个数

【嵌入式Linux+ARM】ARM体系结构与编程(ARM概述)

ARM体系结构与编程 本文章记录一些看<ARM体系结构与编程>这一本书的记录: 个人觉得,学习ARM体系时,不需要死记硬背,只要把某些关键的大致记住,比如ARM寄存器(通用寄存器.PC.LR.SP.CPSR.SPSR).ARM中断处理体系.常用的ARM汇编指令等. 本文基本都是从书上截图,都是一些关键的知识,需要我们时常去复习的. 一.ARM概述 ARM处理器的7种工作模式: ARM处理器寄存器: ARM中PC(R15)寄存器: ARM中CPSR寄存器: ARM异常处理模式--响应过程和返回过

iOS UI编程_概述和程序的执行顺序

一iOS概述 UI设计的条件设置 iOS系统架构层次 二程序的执行顺序 一.iOS概述 iOS(最初,苹果公司并没有给随iPhone发行的iOS一个独立的称谓,直到2008年3月6日才给它取名为iPhone OS,并于2010年6月改名为现在的名字iOS)是由苹果公司为移动设备所开发的操作系统,支持的设备包括iPhone.iPod touch.iPad及Apple TV等.与Android及Windows Phone不同,iOS不支持非苹果的硬件设备.2007年1月9日苹果在Macworld大会

MapReduce 编程模型概述

MapReduce 编程模型给出了其分布式编程方法, 共分 5 个步骤:1) 迭代(iteration).遍历输入数据, 并将之解析成 key/value 对.2) 将输入 key/value 对映射(map) 成另外一些 key/value 对.3) 依据 key 对中间数据进行分组(grouping).4) 以组为单位对数据进行归约(reduce).5) 迭代. 将最终产生的 key/value 对保存到输出文件中.MapReduce 将计算过程分解成以上 5 个步骤带来的最大好处是组件化与

PL/SQL编程_概述

关于PL/SQL的内容,主要包括匿名块.存储过程和存储函数三种形式的PL/SQL块,以及在PL/SQL 中如何使用变量.类型.流控制语句.游标.触发器.异常等内容,以及如何利用PL/SQL块访问数据库中的数据. PL/SQL概述 如果说SQL是一种标准的数据库访问语言,那么PL/SQL则是Oracle公司开发的一种编程语言,它是对SQL的扩充.在PL/SQL程序中,可以定义变量.数据类型.函数以及过程,可以使用流控制语句,可以包含SQL语句,还可以进行错误处理.利用PL/SQL程序,可以对数据库

Servlet编程基础概述-MVC控制层

要介绍Servlet有一大堆的文字,相信有的朋友像我一样讨厌看很多文字,我长话短说: 大家有没有总结过,我们用JavaBean编程是实现了把Java代码和JSP文件的HTML代码分开了,但是:我们在Java代码中不能使用JSP内置对象,也就是JavaBean不能使用request.response等对象来接收和传递页面信息,只能实现简单的静态功能. Servlet就是一个可以动态引用request.response...的Java类,和JAVABEAN一样运行在服务器端.我们称之为中间控制层(C