自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 基于OpenSSL设计旁路解密HTTPS流量

文章目录1 引言1.1 编写目的1.2 背景1.3 参考资料2 总体设计2.1 需求概述2.2 总体设计图2.3 流程设计2.4 功能描述2.5 功能设计2.5.1 SSL/TLS协议解析2.5.2 SSL/TLS建立连接解析ServerHello扩展信息计算主密钥的消息验证2.5.3 TLS数据解密2.5.4 TLS密文重组和解密1 引言1.1 编写目的记录本次开发SSL/TLS加解密功能...

2020-04-23 15:18:21 3173 2

原创 Kubernetes-v1.26.1部署指南

API Server 的日志文件通常位于 /var/log/kube-apiserver.log 或 /var/log/pods/kube-apiserver-pod-id/kube-apiserver.log。kubeadm join从输出的末尾复制命令并将其保存在安全的地方。(3)、在子节点(k8s-node01、k8s-node02)按照上面的提示添加工作节点。以下步骤没有显示说明在指定节点上执行的步骤,则在所有节点上执行。(1)、在k8s-master节点上初始化集群。

2023-09-16 16:11:38 211

原创 分组密码模式的填充

假定块长度为 8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07,如果恰好8个字节时还要补8个字节的0x08,可以让解密的数据很确定无误的移除多余的字节。假定块长度为8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07。

2023-07-23 16:01:36 343

原创 Kubernetes中的Calico网络

Calico网络的大概思路,即不走Overlay网络,不引入另外的网络性能损耗,而是将转发全部用三层网络的路由转发来实现。IPIP:就是对IP的封装,通过tunnel的方式,进行路由转发BGP:直接。

2023-04-10 10:57:00 875 1

转载 深入剖析HTTP3协议

1 HTTP2/HTTP3HTTP2协议虽然大幅提升了HTTP/1.1的性能,然而,基于TCP实现的HTTP2遗留下3个问题:有序字节流引出的 队头阻塞(Head-of-line blocking),使得HTTP2的多路复用能力大打折扣;TCP与TLS叠加了握手时延,建链时长还有1倍的下降空间;基于TCP四元组确定一个连接,这种诞生于有线网络的设计,并不适合移动状态下的无线网络,这意味着IP地址的频繁变动会导致TCP连接、TLS会话反复握手,成本高昂。HTTP3协议解决了这些问题:HTTP

2023-04-04 15:43:09 546

原创 OpenResty中Lua变量的使用

OpenResty中Lua变量的使用

2023-01-17 11:36:27 1105

原创 基于Istio Ingress对外提供服务

基于Istio Ingress对外提供服务

2022-09-26 09:45:56 1258

原创 Istio中流量劫持机制

Istio Service Mesh 中的流量劫持机制

2022-09-25 13:32:56 2032

原创 跨远程仓库同步代码

0 实现功能之前的项目是基于一个开源项目做的,后来开源项目一直在更新迭代,所以时不时需要把开源项目的新功能合入到自己的项目中,这样就出现跨项目仓库进行更新,而且这个开源项目也只是自己项目里边的一个子文件夹。梳理一下功能需求:公司项目A,把开源项目B以子文件夹的方式包含进来开源项目B一直在维护并更新着公司项目A需要把自包含开源项目B之后,开源项目B的修改合并进来以上需求可以使用Git Subtree实现:首先把项目A中以子文件夹存在的开源项目B独立成子项目然后使用Git Subtree在

2021-01-27 17:40:34 386

原创 云ids的设计方案

概述为了搭建云IDS平台,需要选型合适的虚拟化方案,以及对相应部署做一定的优化。基本设计架构为,在以Centos操作系统安装的宿主机中再部署IDS虚拟机(基于Centos操作系统)。本设计文档所述的设计方案,基于以下环境:Intel x86架构的cpu,支持intel VT和VT-dBIOS中enable VT和VT-dBIOS中建议开启Intel Hyper-Threading Tech使用kvm虚拟化宿主机和IDS虚拟机为Centos7.2操作系统宿主机操作系统内核使用Linux内核3

2020-06-18 22:20:22 582

原创 使用开源库libuuid库生成随机串

libuuid介绍libuuid是一个开源的用于生成UUID(Universally Unique Identifier,通用唯一标识符)的库,它的源码可从https://sourceforge.net/projects/libuuid/ 下载,此库仅支持在类Linux下编译使用。UUID来源于OSF(Open Software Foundation,开源软件基金会)的DCE(Distributed Computing Environment,分布式计算环境)规范,UUID是指在一台机器上生成的数字,保证

2020-05-21 15:22:02 648

原创 long long类型的主机字节序和网络字节序转换

1. 网络字节序和主机字节序在网络编程中经常会碰到网络字节序和主机字节序。关于网络字节序和主机字节序在学习前需要理解以下几个概念。字节序,指的是字节在内存中存储的顺序,比如一个int32_t类型的数值占用4个字节,这4个字节在内存中的排列顺序就是字节序。字节序有以下两种:小端字节序(Little endian),数值低位存储在内存低地址,高位存储在内存高地址。大端字节序(Big endian),数值高位存储在内存的低地址,低位存储在内存的高地址。下边是从网络上找的一个图,以32位位宽数值0x1

2020-05-21 15:19:36 1115

原创 va_start和va_end使用详解

1 可变参数在C语言中可以通过如下方式定义函数,通过…表示可变的参数列表:void foo(...);void foo(parm_list,...);2 函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈。首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地址,举个例子如下:void func(int x...

2020-04-07 14:56:40 248

原创 SSL/TLS建立连接之状态切换

本文基于OpenSSL 1.0.2u学习OpenSSL中对SSL/TLS协商过程的实现协商过程的状态切换OpenSSL中服务端ssl3_accept接口实现对协商过程数据包的解析,解析完不同的数据包之后,切换到下一个状态:上图是ssl3_accept中状态切换的大概流程,其中根据s->hit判断是否进入会话恢复流程,在SessionID和SessionTicket会话恢复流程中,会有一...

2020-03-13 20:39:16 1485

原创 具有扩展主密钥时SSL/TLS的主密钥计算

简介最近在基于openssl1.0.2t源码做开发,解密TLS1.2数据包,出现部分数据包解密失败的问题,通过定位发现,不同的HTTPS服务器,在客户端与服务端协商时部分扩展字段有差异,导致计算密钥失败或错误,其中关于“Extended Master Secret Extension”,如果协商时具有此扩展字段,计算主密钥的方式会有所差异,具体对此字段的解释,详见RFC7627TLS密钥计算流...

2020-02-19 17:12:28 2773 1

原创 部署Nginx搭建HTTPS服务器

文章目录安装Nginx1. 下载源码2. 编译安装3. 验证4. 创建软连接5. 设置Nginx开机自启动搭建HTTPS服务器1. 修改Nginx配置2. 通过openssl生成证书3. 配置nginx,支持https访问4. 启动nginx并访问安装Nginx本次安装的nginx版本为1.15.9,基于CentOS7.7系统默认自带的OpenSSL 1.0.2k-fips1. 下载源码#...

2020-02-18 17:09:05 2457

原创 ALPN协议

协议介绍ALPN (Application Layer Protocol Negotiation)是TLS的扩展,允许在安全连接的基础上进行应用层协议的协商。ALPN支持任意应用层协议的协商,目前应用最多是HTTP2的协商。在2016年,ALPN已经完全替代NPN了。ALPN allows the application layer to negotiate which protocol t...

2020-02-17 22:23:42 4977

原创 使用Wireshark解密SSL/TLS数据包并调试

使用Wireshark解密SSL/TLS数据我们使用wireshark抓取的HTTPS数据包,可以使用wireshark通过以下两种方式直接解密查看1. 用服务器证书私钥解码第一种方法是:使用服务器证书的私钥进行解码。在IIS上导出服务器证书私钥第一步我们需要从网站服务器上导出证书私钥,这里拿IIS服务器举例。打开IIS站点所绑定的服务器证书,点击查看 详细信息 页,点击 复制到文件...

2020-02-17 16:55:04 33870 5

原创 九 随机数 - 不可预测性的源泉

为什么需要随机数?生成密钥用于对称密码和消息认证码生成公钥密码用于生成公钥密码和数字签名生成初始化向量 IV用于分组密码中的 CBC、CFB、OFB 模式生成 nonce用于防御重放攻击和分组密码中的 CTR 模式生成盐用于基于口令密码的 PBE 等用随机数的目的是为了提高密文的不可预测性,让攻击者无法一眼看穿。什么是随机数?给随机数下一个严密的定义很难。只能从性质...

2020-02-08 22:17:17 1187

原创 八 密钥 - 秘密的精华

为什么需要密钥?我们知道对称密码,公钥密码,消息认证码,数字签名,公钥证书,这些密码技术都需要一个密钥。密钥保护了信息的机密性。密钥最重要的是密钥空间的大下。密钥的长度决定了密钥空间的大小。密钥空间越大,暴力破解越困难。各种不同的密钥密钥仅仅是一个比特序列,但是它所具有的价值和明文等价。密钥的种类主要分为以下几种:对称密码的密钥和公钥密码的密钥在对称加密中,加密和解密都用同一个密钥,也...

2020-02-08 22:13:33 884

原创 七 证书 - 为公钥加上数字签名

为什么需要公钥证书?数字签名可以识别篡改或者发送者身份是否被伪装,也就是验证消息的完整性,还可以对消息进行认证。还可以防止抵赖。看似一切完美,但是他的弱点也在他的优点上,数字签名需要用公钥来确认发送者的身份。我们需要从一个没有被伪装的发送者那里得到没有被篡改的公钥才行,为了验证得到的公钥是否合法,必须使用公钥证书。证书是将公钥当做一条消息,由一个可信的第三方对其签名后所得到的公钥。公钥证书...

2020-02-08 22:09:11 492

原创 六 数字签名 - 消息到底是谁写的

从上一篇文章里面我们知道,消息认证码可以识别篡改或者发送者身份是否被伪装,也就是验证消息的完整性,还可以对消息进行认证。但是消息认证码的缺陷就在于它的共享密钥上面。由于双方都有共享秘钥,第三方无法确认是哪一方发出,导致无法防止抵赖。数字签名就是为了解决抵赖的问题的。解决的方法是使用公钥密码,用私钥加密相当于生成签名,用公钥解密相当于验证签名。公钥密码与数字签名如下图对照公钥密码和数字签名的...

2020-02-08 22:05:07 266

原创 五 消息认证码 - 消息被正确传送了吗

什么是消息认证码消息认证码是密码学家工具箱中6个重要的工具之一。回忆一下,这6个重要的工具分别是:对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器。消息认证码(Message Authentication Code)是一种确认完整性并进行认证的计算,取三个单词的首字母,简称MAC。根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似。但是单向散列函数中计算...

2020-02-08 22:01:18 1102

原创 四 单向散列函数 - 获取消息的“指纹”

什么是单向散列函数单向散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash value)。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。散列值的长度和消息的长度无关。无论是1比特,还是100MB,甚至100GB,单向散列函数都会计算出固定长度的散列值。以SHA-256单向散...

2020-02-08 21:57:32 423

转载 什么是AEAD加密

Authenticated Encryption with Associated Data (AEAD) 是一种同时具备保密性,完整性和可认证性的加密形式。AEAD 产生的原因很简单,单纯的对称加密算法,其解密步骤是无法确认密钥是否正确的。也就是说,加密后的数据可以用任何密钥执行解密运算,得到一组疑似原始数据,而不知道密钥是否是正确的,也不知道解密出来的原始数据是否正确。因此,需要在单纯的...

2020-01-19 17:56:10 8973 1

原创 AES加密算法详解

简介为比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,又称 Rijndael 加密算法常用填充算法:PKCS7常用分组工作模式:GCMAES的三种密钥长度AES的分组长度为128位(16字节)AES密钥长度(32位比特)分组长度(32位比特)加密轮数AES-1284410AES-1926412AE...

2020-01-18 18:28:37 547

原创 分组密码模式的填充

分组加密在密码学中,分组加密(Block cipher),又称分块加密或块密码,是一种对称密钥算法。 它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。常见的分组加密算法有: DES、3DES、AES、IDEA。常见分组密码算法分组长度和秘钥长度如下表:密码算法分组长度秘钥长度DES64 bit/8 byte64(56+8) b...

2020-01-18 18:13:37 1849

原创 解决VFIO透传问题

0. 相关配置首先说明一下目前设备中网卡透传大概操作流程:从主机中把网卡与驱动解绑定,比如:网卡使用的是igb驱动,首先解绑定网卡绑定vfio-pci虚拟化驱动,通过绑定vfio驱动后,网卡才能给虚拟机使用如果要实现以上方式,系统需要进行如下配置:BIOS中开启VT-d直通模式,建议开启SRIOV模式内核模块中增加vfio和IOMMU相关模块进行了如上设置以后,在设备启动以后...

2020-01-17 15:31:37 5267

原创 解决MySQL中文字符集乱码

文章目录1. 问题现象2. 解决方案3. 几种设置字符集的方式和对比1. 问题现象最近出现程序在运行一段时间之后,新入到MySQL中的数据出现中文乱码,每次重启程序就会好,然后过段时间又会出现问题?2. 解决方案经过排查怀疑是因为在程序入库程序执行中途,出现过与MySQL自动重连的操作,在自动重连以后所有配置都会使用默认的,所以字符集也相应会变成默认,而不再是刚开始建立连接时使用的UTF-...

2020-01-17 15:14:01 237

原创 几种分组密码的模式对比

ECB模式加密解密CBC模式每次加密时都会随机产生一个不同的比特序列来作为初始化向量。加密解密CFB模式加密解密OFB模式加密解密CTR模式加密解密对比总结模式名称优点缺点备注ECB模式电子密码本模式简单快速支持并行计算(加密、解密)明文中的重复排列会反映在密文中通过删除、替换密文分组可以对明文进行操作对包含某些...

2020-01-17 14:00:10 1164

原创 三 公钥密码

RSARSA是使用最广泛的的公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的。RSA可以被用于公钥密码和数字签名。RSA加密在RSA中,明文、密钥和密文都是数字。RSA的加密过程可以用下列公司来表达:密文 = 明文^E mod N (RSA加密)也就是说,RSA的密文是对代表明文的数字的E次方求...

2020-01-17 13:58:18 320

原创 二 分组密码模式

分组密码的模式简介前面介绍的DES和AES都属于分组密码,它们只能加密固定长度的明文,如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码进行迭代,而分组密码的迭代方法就被称为分组密码的“模式”。分组密码有很多种模式,如果模式的选择不恰当,就无法充分保证机密性。主要介绍分组密码与流密码,然后逐一介绍主要的分组密码的模式,最后再来考察一下到底应该使用哪种模式。分组密码与流密码...

2020-01-17 13:56:30 522

原创 一 对称密码

一次性密码本一次性密码本是一种非常简单,它的原理是“将明文与一串随机的比特序列进行XOR运算”。如果将硬币的证明设为0,反面设为1,则通过不断掷硬币就能产生这样一串随机的比特序列。加密解密正如上面所讲到的那样,一次性密码本是一种非常简单的密码,如此简单的密码居然无法破译,这真是让人匪夷所思。这里说的无法破译,并不是指在现实的时间内难以破译,而是指即便拥有一种运算能力无穷大的计算机,可以...

2020-01-17 11:26:39 443

转载 CBC模式解读

一什么是CBC模式CBC模式的全称是CipherBlockChaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起。在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。CBC模式加解密过程如下:我们来比较一下ECB模式与CBC模式的区别ECB模式只进行了加密,而CBC模式则在加密之前进...

2020-01-17 11:20:00 2299

原创 JSON C库的使用

创建json对象(1)函数:extern struct json_object* json_object_new_object(void);函数说明: 创建一个新的json对象,引用计数1,该具有唯一的所有权。当使用json_object_object_add或者json_object_array_put_idx作用于该对象时,所有权转移到另一方。使用json_object_get作用于...

2020-01-04 14:56:21 1655

原创 HTTPS相关优化手段

HTTPS连接大致上可以划分为两个部分,第一个是建立连接时的非对称加密握手,第二个是握手后的对称加密报文传输。HTTPS比HTTP增加了一个TLS握手的步骤,这个步骤最长可以花费两个消息往返,也就是2-RTT。而且在握手消息的网络延时消耗外,还会有其他的一些“隐形”消耗,比如:产生用于密钥交换的临时公私钥对(ECDHE);验证证书时访问CA获取CRL或者OCSP;非对称加密解密处理“Pr...

2020-01-01 11:13:16 432

原创 选择排序、插入排序、冒泡排序、希尔排序

简介以下总结几个基础的排序算法,包括选择排序、插入排序、冒泡排序、希尔排序,这几个排序算法是比较简单的几个。以下给出算法的分析和代码示例。时间复杂度选择排序、插入排序、冒泡排序、希尔排序四个排序算法的时间复杂度都是O(n^2)。算法分析选择排序选择排序取第一个元素以此与后续的元素进行比较,保存最小的元素的下标,最终把最小的元素与第一个元素进行交换,第二次遍历取第二个元素,在...

2019-12-30 12:13:55 88

原创 cap文件格式解析

简介  cap包为通过抓包软件保存下来的数据包文件,不同的抓包软件保存下来的cap包格式也有很大差异,从最开始的4个字节便可以看出,如下列出不同抓包软件的cap包文件前4字节的差异#define CAP_SNIFFER_WINDOWS_200X "\x58\x43\x50\x00" //sniffer抓包的cap文件#define PCAP_WIRESHARK_TCPD...

2019-12-29 18:21:21 8079

原创 openstack部署之Horizon

简介参考资料:https://docs.openstack.org/horizon/pike/install/install-rdo.html

2019-12-29 18:20:28 169

原创 openstack部署之创建第一个实例

简介  当完成keystone、glance、nova、neutron组件的部署(部署方法参考之前的博文)之后,我们就可以创建第一个虚拟机实例了,下边具体操作下创建第一个虚拟机实例。创建第一个实例创建provider network设置环境变量,这个在所有服务部署中都会用到,所以如果有报错,首先考虑是否设置环境变量[root@localhost ~]# source admin...

2019-12-29 18:19:34 234

环境高级编程学习笔记

学习环境高级编程的总结

2017-08-13

Shell脚本学习指南(高清带目录)

学习Shell编程,从基础到精通

2017-07-23

Linux总结知识

LINUX最强归纳总结秘籍(华为内部)

2017-06-26

Makefile Gcc使用

Makefile使用 GDB使用 GCC使用

2017-06-26

C++面试大全

C/C__程序员面试宝典 C++面试大全

2017-06-26

数据结构算法实现代码

数据结构

2017-06-14

队列queue的实现

C++实现队列

2017-05-15

线性表chart

C++实现线性表

2017-05-15

stack_template

使用C++实现栈模板

2017-05-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除