第十一章IP安全与Web安全1.说明IP安全的必要性。答:大型网络系统内运行多种网络协议(TCP/IP、IPX/SPX和NETBEUA等),这些网络协议并非为安全通信设计。而其IP协议维系着整个TCP/IP协议的体系结构,除了数据链路层外,TCP/IP的所有协议的数据都是以IP数据报的形式传输的,目前占统治地位的是IPv4。IPv4在设计之初没有考虑安全性,IP包本身并不具备任何安全特性,导致在网络上传输的数据很容易受到各式各样的攻击:比如伪造IP包地址、修改其内容、重播以前的包以及在传输途中拦截并查看包的内容等。因此,通信双方不能保证收到IP数据报的真实性。所以说,IP安全具有很大的必要性。2.简述IP安全的作用方式。答:IPSec是IPv6的一个组成部分,是IPv4的一个可选扩展协议。IPSec弥补了IPv4在协议设计时缺乏安全性考虑的不足。IPSec定义了一种标准的、健壮的以及包容广泛的机制,可用它为IP以及上层协议(比如TCP或者UDP)提供安全保证。IPSec的目标是为IPv4和IPv6提供具有较强的互操作能力、高质量和基于密码的安全功能,在IP层实现多种安全服务,包括访问控制、数据完整性、机密性等。IPSec通过支持一系列加密算法如DES、三重DES、IDEA和AES等确保通信双方的机密性。IPSec的实现方式有两种:传输模式和隧道模式,都可用于保护通信。传输模式用于两台主机之间,保护传输层协议头,实现端到端的安全性。当数据包从传输层传送给网络层时,AH和ESP会进行拦截,在IP头与上层协议之间需插入一个IPSec头。当同时应用AH和ESP到传输模式时,应该先应用ESP,再应用AH。隧道模式用于主机与路由器或两部路由器之间,保护整个IP数据包。将整个IP数据包进行封装(称为内部IP头),然后增加一个IP头(称为外部IP头),并在外部与内部IP头之间插入一个IPSec头。3.图示验证头AH和封装安全有效载荷ESP的结构。答:4.简述IKE协议的组成以及两个阶段。答:整个IKE协议规范主要由3个文档定义:RFC2407、RFC2408和RFC2409。RFC2407定义了因特网IP安全解释域。RFC2408描述了因特网安全关联和密钥管理协议(InternetSecurityAssociationandKeyManangementProtocol,KSAKMP)。RFC2409描述了IKE协议如何利用Oakley,SKEME和ISAKMP进行安全关联的协商。IKE基于两个阶段的ISAKMP来建立安全关联SA,第一阶段建立IKESA,第二阶段利用IKESA建立IPSec的SA。对于第一阶段,IKE交换基于两种模式:主模式(MainMode)和野蛮模式(AggressiveMode)。主模式是一种身份保护交换,野蛮模式基于ISAKMP的野蛮交换方法。在第二阶段中,IKE提供一种快速交换(QuickMode),作用是为除IKE之外的协议协商安全服务。5.说明Web安全性中网络层、传输层和应用层安全性的实现机制。答:第一,网络层。网络层上,虽然IP包本身不具备任何安全特性,很容易被修改、伪造、查看和重播,但是IPSec可提供端到端的安全性机制,可在网络层上对数据包进行安全处理。IPSec可以在路由器、防火墙、主机和通信链路上配置,实现端到端的安全、虚拟专用网络和安全隧道技术等。第二,传输层。在TCP传输层之上实现数据的安全传输是另一种安全解决方案,安全套接层SSL和TLS(TransportLayerSecurity)通常工作在TCP层之上,可以为更高层协议提供安全服务。第三,应用层。将安全服务直接嵌入在应用程序中,从而在应用层实现通信安全。如SET(SecureElectronicTransaction,安全电子交易)是一种安全交易协议,S/MIME、PGP是用于安全电子邮件的一种标准。它们都可以在相应的应用中提供机密性、完整性和不可抵赖性等安全服务。6.图示SSL的体系结构。7.从OpenSSL网站下载最新的软件包,配置并实现SSL功能。是否在编译过程中使用汇编代码加快编译过程。enable-sse2no-sse2启用/禁用SSE2指令集加速。如果你的CPU支持SSE2指令集,就可以打开,否则就要关闭。gmpno-gmp启用/禁用GMP库rfc3779no-rfc3779启用/禁用实现X509v3证书的IP地址扩展krb5no-krb5启用/禁用Kerberos5支持sslno-sslssl2ssl3no-ssl2no-ssl3tlsno-tls启用/禁用SSL(包含了SSL2/SSL3)TLS协议支持。dsono-dso启用/禁用调用其它动态链接库的功能。[提示]no-dso仅在no-shared的前提下可用。[提示]为了安装Apache-2.2的mod_ssl成功,SSLv2/SSLv3/TLS都必须开启。算法选项第二类用于禁用crypto目录下相应的子目录(主要是各种算法)。虽然理论上这些子目录都可以通过no-*语法禁用,但是实际上,为了能够最小安装libcrypto,libssl,openssl,其中的大部分目录都必须保留,实际可选的目录仅有如下这些:no-md2,no-md4,no-mdc2,no-ripemd这些都是摘要算法,含义一目了然。no-des,no-rc2,no-rc4,no-rc5,no-idea,no-bf,no-cast,no-camellia这些都是对称加密算法,含义一目了然。bf是Blowfish的意思。no-ec,no-dsa,no-ecdsa,no-dh,no-ecdh这些都是不对称加密算法,含义一目了然。no-comp数据压缩算法。因为目前实际上并没有压缩算法,所以只是定义了一些空接口。no-store对象存储功能。更多细节可以查看crypto/store/README文件。[提示]OpenSSH只依赖于该软件包的加密库(libcrypto),而带有HTTPS支持的Apache则依赖于该软件包的加密库和SSL/TLS库(libssl)。因此,如果你不打算使用HTTPS的话,可以只安装加密库(no-sslno-tls);更多介绍可以查看README文件的OVERVIEW部分。事实上,为了能够让OpenSSH安装成功,ripemd,des,rc4,bf,cast,dsa,dh目录不能被禁止。编译选项大多数软件包都是通过在运行configure脚本的时候定义CPPFLAGSCFLAGSLDFLAGS环境变量来设置编译选项的,但是OpenSSL却不是这样的。OpenSSL的Configure脚本允许你在命令行上直接输入CPPFLAGSCFLAGS的内容。比如:-DDEVRANDOM='/dev/urandom'可以用来指定随机设备,-DSSL_FORBID_ENULL则可以用于禁止使用NULL加密算法。`echo$CFLAGS`则可以将CFLAGS变量添加上来。另一方面,LDFLAGS却是无法通过Configure进行设置的。因为Configure会强制清空Makefile中的LDFLAGS,所以在运行完Configure之后,可以使用一个sed修改所有Makefile中的LDFLAGS(用于连接openssl)和SHARED_LDFLAGS(用于连接libcrypto,libssl库)。比如笔者就经常这样使用Configure进行配置:./Configure...-DSSL_FORBID_ENULL-DDEVRANDOM='/dev/urandom'`echo$CFLAGS`find.-nameMakefile*-execsed-r-i-es|^(SHARED_)?LDFLAGS=|&$LDFLAGS|{}\;[提示]不能省略find命令内Makefile*两边的引号。