热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络安全验证协议两则

对于网络安全的知识比较匮乏,最近在读《深入JAVA虚拟机》一书,讲到了JAVA虚拟机的安全控制问题,想起本科的时候做过一个网络硬盘项目,其中纠结讨论的就是一个验证客户端和服务端以防止假客户

      对于网络安全的知识比较匮乏,最近在读《深入JAVA虚拟机》一书,讲到了JAVA虚拟机的安全控制问题,想起本科的时候做过一个网络硬盘项目,其中纠结讨论的就是一个验证客户端和服务端以防止假客户端或假服务端欺骗的问题,一并总结了放在这里。

一、C/S结构网络应用验证

      如果是广域网的C/S应用,比如QQ之类的,在进行通信之前,需要有一个彼此验证身份的过程。我们假设用户通过http协议发送的信息是可能被抓包软件捕获的,这样就不能明文传输用户密码等信息,怎样建立一个链接方式假冒的客户端或假冒的服务端骗取用户信息呢?当初我们使用了如下的协议方式:

      使用语言可以将上述过程描述如下:

  1.客户端接受用户输入的用户登录用的Client ID和密码,然后将Client ID发送给服务器端。

  2.服务器端收到后从数据库中查出对应的Client ID,验证其存在,并用数据库中对应的密码(用户设置的密码经过MD5加密的字符串)采用AES加密算法对一个随机产生的通信加密密码   和ID进行加密后生成字符串,连同没有加密的ID一同发回给客户端。

  3.客户端确认ID是自己的,使用用户输入的密码,采用MD5加密方法生成解密字符串,对传输过来的加密字段进行解密后获得下一步传输所用的加密密钥,并验证加密后的ID是否正确,即服务端是否有误。进而使用解密后的密码对ID再次进行加密,传输给服务器端。

  4.  服务器端接收使用上次发送时产生的随机密码加密的用户ID,如果解密正确后,则确认客户端有效,正常的通信才能够真正开始。

      这里利用了MD5加密的时候理论上无法逆向生成明文的特性,在第三步验证服务器端的真实性,即默认服务器端才可以保存有用户设置的密码,第四步服务器端会通过对于用户ID的解密验证客户端不是假冒的,即即使一个假冒客户端知道有效的client ID,没有正确的密码也无法解密下次通讯需要的密码。这样,无需在两端传输密码信息,避免假冒客户端和假冒服务器的问题,基本保证系统的安全性。

 

二、JVM中的代码签名和认证机制

      在JAVA语言设计的时候就考虑到要对JAVA编译后的二进制文件进行网络传输,因此基于公钥/私钥机制设计了代码签名和认证的机制,用于保证二进制文件在网络传输过程中不被替换或者修改。对一个jar文件进行数字签名的过程如下图所示:

  1.首先,要对未加密的class文件和数据文件进行一个单向散列的过程,形成一个散列值。这个散列值的位数越多,就越能保证安全,因为由不同文件产生相同散列的可能性就越小。

      2.第二步是使用发布这个jar包的人的私钥对上一步所得到的散列值进行签名,即加密。对于散列值进行加密比对数据文件进行加密速度要快,而只要当冒充者拥有你的私钥时,才能同时替换这原未加密文件和签名之后的散列值。

      3.第三步是将上面的两部分组合到jar文件中去,就可以用于传输了。

      在接收到该jar文件的使用者进行验证的过程如下图所示:

  1. 取出未加密的文件进行散列计算,得出散列值。

      2. 取出签名后的散列值,使用作者公布的公钥进行解密(任何使用私钥加密的东西都可以用公钥解密),获得计算后的散列值。

  3. 比较两个散列值是否正确,如果正确就说明签名验证通过,jar包没有被修改,否则验证失败,jar包不可信,不予以执行。

  通过这样的简单散列和加密的过程,就可以保证jar包的可信度。这里面仍然有很多问题,比如公钥获取是否可信?如果公钥本来就是假的,或者jar包的生产者本来就是个意欲进行破坏的人,这就无法保证安全性了。至于公钥的问题可以使用中立的安全机构进行同样方式的签名予以保证,这就是所谓的“证书”(塞班系统的软件签名也是这个样子的吧……)。而密码学解决不了所有的问题,只能从形式上证明所设计或使用的协议正确性。

 

      JAVA虚拟机的安全机制还有很多方面,比如使用类装载器进行防治替换等等,以后有机会再进行总结和分析。


推荐阅读
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • Kali Linux 渗透测试实战指南:第24章 客户端安全威胁分析与防御策略
    客户端安全威胁分析与防御策略主要探讨了终端设备(如计算机、平板电脑和移动设备)在使用互联网时可能面临的各种安全威胁。本章详细介绍了这些设备如何作为信息和服务的提供者或接收者,以及它们在与服务器等其他系统交互过程中可能遇到的安全风险,并提出了有效的防御措施。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • Apache Maven 3.5.0 版本的发布带来了多项重要特性和性能优化。该版本不仅改进了构建过程的效率,还增强了对复杂项目结构的支持。通过引入新的依赖解析机制和优化的插件系统,Maven 3.5.0 在提升用户体验的同时,也确保了更高的稳定性和兼容性。此外,该版本还修复了多个已知问题,进一步提升了整体的可靠性和安全性。 ... [详细]
  • 如何在主服务器响应变慢时,自动切换至备用服务器地址以确保服务连续性
    在主服务器响应速度下降时,如何通过编程实现自动切换至备用服务器地址,以确保服务的连续性和稳定性。本文将介绍一种基于PHP和MySQL的解决方案,通过监测主服务器的响应时间,当检测到延迟过高时,自动切换至备用服务器接口,从而保障系统的高可用性。 ... [详细]
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • 进程(Process)是指计算机中程序对特定数据集的一次运行活动,是系统资源分配与调度的核心单元,构成了操作系统架构的基础。在早期以进程为中心的计算机体系结构中,进程被视为程序的执行实例,其状态和控制信息通过任务描述符(task_struct)进行管理和维护。本文将深入探讨进程的概念及其关键数据结构task_struct,解析其在操作系统中的作用和实现机制。 ... [详细]
  • 本文详细介绍了在CentOS 7上构建DNS解析服务器的步骤与配置方法。DNS系统不仅负责将主机名(域名)转换为相应的IP地址(正向解析),还能够根据IP地址反查主机名(反向解析)。此外,文章还探讨了不同类型的DNS服务器,如缓存域名服务器的作用和配置要点。通过本指南,读者可以全面了解并成功搭建一个高效稳定的DNS解析环境。 ... [详细]
  • 本文深入探讨了MD5与SHA1哈希算法在实际应用中的表现及其安全性。通过对这两种算法的详细分析,揭示了它们在数据完整性验证和密码存储等方面的优势与局限。文章不仅介绍了算法的基本原理,还讨论了近年来针对这些算法的安全性攻击,并提出了改进措施和替代方案。希望读者能够通过本文对哈希算法有更全面的理解。 ... [详细]
author-avatar
长江7808
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有