OpenSSL与证书的那些事儿

    前面分析过加解密、证书与安全通信之间的关联关系,现在换个角度来剖析证书的制作与其本质。我们先构建一个CA环境,生成CA密钥、制作CA证书请求、自签名等,然后通过自建的CA来签发用户证书。

准备工作

通过命令查询openssl的环境信息,主要是确认openssl的配置路径信息OPENSSLDIR

命令:openssl version -a[……]

阅读全文

通信协议设计的那些事儿

【前注】未完待续,当此段文字不在时,表示已完成。

曾经主导过公司某产品自用的通信协议设计开发以及性能优化,一直没有时间总结,趁近期闲暇间隙将该事情了结一下。我会抛开协议的实现细节,主要从设计开发的角度去探讨通信协议的设计要点,谈谈经验。

确定一下需求范围,我们设计的是基于不可靠协议(意味着需要容忍丢包)去实现一套根据ID地址进行寻址建立连接的高可靠传输协议。那么我们需要设计:地址表供寻址,链路[……]

阅读全文

漫谈从加解密到信任证书构成的安全通信

加密(Encryption就是通过某种方法将可以被理解的数据信息隐藏起来并生成不可被理解的数据信息。可理解的数据信息通常称之为明文(Plain Text,而隐藏了明文的不可被理解的数据信息被称之为密文(Cipher。至于解密(Decryption,则恰好相反,它是将密文转变为明文的过程,将被隐藏的信息从不可被理解的数据信息中还原出来。

加密解密的历史甚为久远,早在古代就出现了采用字符替代或者字符移[……]

阅读全文

C代码检视指导

工作多年,自己定位过不少问题,也写过不少代码,对于常踩的坑略有心得,所以集众家所长结合自己心得整理了以下C代码的检视指导。

代码检视(C)

u  钩子函数

l  钩子函数调用位置是否在锁内,钩子是否存在锁使用,是否存在产生死锁的风险

使用锁

l  锁内调用钩子函数,注意钩子函数的锁使用

l  明确[……]

阅读全文

【Linux内存源码分析】vmalloc不连续内存管理(1)

伙伴管理算法初衷是解决外部碎片问题,而slab算法则是用于解决内部碎片问题,但是内存使用的得不合理终究会产生碎片。碎片问题产生后,申请大块连续内存将可能持续失败,但是实际上内存的空闲空间却是足够的。这时候就引入了不连续页面管理算法,即我们常用的vmalloc申请分配的内存空间,它主要是用于将不连续的页面,通过内存映射到连续的虚拟地址空间中,提供给申请者使用,由此实现内存的高利用。

按照分析管理,从该管理算法的初始化入手。[……]

阅读全文

【Linux内存源码分析】内存泄漏检测kmemleak示例

分析完kmemleak实现后,照常实验一下,以确定功能正常。

kmemcheck一样,该功能需要在内核开启的情况下才能够使用。主要的配置项有:CONFIG_DEBUG_KERNELCONFIG_HAVE_DEBUG_KMEMLEAKCONFIG_DEBUG_KMEMLEAK,以及配置信息记录条数的CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE,通常情况下配置数量的可以不必修改,但是针对自启[……]

阅读全文

【Linux内存源码分析】内存泄漏检测kmemleak分析

kmemleak的工作原理很简单,主要是对kmalloc()vmalloc()kmem_cache_alloc()等接口分配的内存地址空间进行跟踪,通过对其地址、空间大小、分配调用栈等信息添加到PRIO搜索树中进行管理。当有匹配的内存释放操作时,将会把跟踪的信息从kmemleak管理中移除。

通过内存扫描(包括对保存的寄存器值),如果发现某块内存在没有任何一个指针指向其起始地址或者其空间范围,那么该内存将会被判定为孤[……]

阅读全文

【Linux内存源码分析】内存破坏检测kmemcheck示例

前面分析了kmemcheck的实现,那么现在就针对其功能进行试验,鉴于kmemcheck支持KMEMCHECK_SHADOW_UNALLOCATED、KMEMCHECK_SHADOW_UNINITIALIZEDKMEMCHECK_SHADOW_FREED的检测且检测上报信息大同小异,本文中的实验主要针对于未初始化的内存进行。

如果需要使能kmemcheck,需要进行一系列的内核参数设置,具体的配置项可以参考内核源码Do[……]

阅读全文