
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。
座右铭:低头赶路,敬事如仪
个人主页:网络豆的主页
目录
在前一章讲解了IPSec采用的安全技术,那什么是IPSec安全协议呢?本章将会很透彻的讲解IPSec安全协议。
IPSec在IP层提供安全服务,它使系统能按需选择安全协议,决定服务所使用的算法及放置需求服务所需密钥到相应位置。IPSec用来保护一条或多条主机与主机间、安全网关与安全网关间、安全网关与主机间的路径。

IPSec能提供的安全服务集包括访问控制、无连接的完整性、数据源认证、拒绝重发包(部分序列完整性形式)、保密性和有限传输流保密性。因为这些服务均在IP层提供,所以任何高层协议均能使用它们,例如TCP、UDP、ICMP、BGP等。

这些目标是通过使用两大传输安全协议,头部认证(AH)和封装安全负载(ESP)以及密钥管理程序和协议的使用来完成的。

所需的IPSec协议集内容及其使用方式是由用户、应用程序和/或站点、组织对安全和系统的需求来决定。
IPSec结构包括众多协议和算法,这些协议之间的相互关系如图所示。

由图可知,IPSec协议不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构。
IPSec规定了如何在对等层之间选择安全协议、确定安全算法和密钥交换,向上提供访问控制、数据源认证、数据加密等网络安全服务。
IPSce提供了两种机制:认证和加密
认证机制使IP通信的数据接收方能够确认数据发送方的真实身份,以及数据在传输过程中是否遭篡改。加密机制通过对数据进行编码来保证数据的机密性,以防数据在传输过程中被窃听。
其中,AH协议定义了认证的应用方法,提供数据源认证和完整性保证:ESP协议定义了加密和可选认证的应用方法,提供可靠性保证。

在实际进行IP通信时,可以根据实际需求同时使用这两种协议或选择使用其中的一种。AH和ESP都可以提供认证服务,不过,AH提供的认证服务要强于ESP。
Authentication Header(AH)协议主要提供认证机制,保证数据包接收者得到的源地址是可靠的,同时也提供了数据的完整性,抗重播攻击的能力。
它使通信免受篡改,但不能防止窃听,适合用于传输非机密数据。
AH的工作原理是在每一个数据包上添加一个身份验证包头。
此包头包含一个带密钥的Hash散列(可以将其当做数字签名,只是它不使用证书),此Hash散列在整个数据包中计算,因此对数据的任何更改将致使散列无效,提供对数据的完整性保护。

AH包头位置在IP包头和传输层协议包头之间,如图所示。AH由IP协议号“51”标识,该值包含在AH包头之前的协议包头中,如IP包头。AH可以单独使用,也可以与ESP协议结合使用。

AH由5个固定长度域和一个变长的认证数据域组成,如图所示。

其中的字段意义如下。
ICV,全称integrity check value。是在对无格式文本安全列表和补充的计算得到的,用于信息安全的完整性检查。ICV的算法是32位的自身反码加法,每个32位块跟随32个0位。

如图3-5所示,在传输模式下,AH包头插在IP包头之后,TCP、UDP或者ICMP等上层协议包头之前。

一般AH为整个数据包提供完整性检查,但是在传输过程中,某些IP头字段会发生变化,且发送方无法预测数据包到达接收端时此字段的值。
例如生存期(Time To Live)或服务类型(Type of Service)等值可变字段(可变字段如图3-6中灰色字段),在进行完整性检查时,应将这些值的可变字段置为0。AH尽可能为IP头和上层协议数据提供足够多的认证,但AH并不能保护可变字段值,因此,AH提供给IP头的保护有些是零碎的。

通常,当用于IPv6时,AH出现在IPv6逐跳路由头之后,IPv6目的选项之前;而用于IPv4时,AH跟随主IPv4头。
以上介绍的是传输模式下的AH协议,AH隧道模式与传输模式略有不同。

创作不易,求关注,点赞,收藏,谢谢~
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT
我在一个ruby文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}