- 博客(28)
- 收藏
- 关注
原创 POCO NotificationQueue Sample疑问
为啥打印这一句地方需要加锁互斥? WorkNotification::Ptr pWorkNf = pNf.cast(); if (pWorkNf) { { FastMutex::ScopedLock lock(_mutex); std::cout data() << std::endl; } Thread::s
2012-07-29 11:14:09
2260
2
翻译 X.509证书校验
X.509证书校验这里讨论openssl中如何应用CRLs和来自证书体系的其他证书来进行证书校验。为此需要使用X.509包的功能函数。SSL协议实现已经处理了很多这里将要讨论的东西,即使如此,一些工作还是需要我们亲历亲为,特别是当我们希望在证书校验过程中使用CRLs的校验,大部分情况我们确实应该如此。通常讲,证书可以通过其他证书体系一系列的证书来验证是合法的,比如CA证书和CRLs。Openssl使用X509_STORE对象来表示证书和废止证书的集合来完成此校验目的。除此之外,Openssl使用类型X509
2010-08-10 23:31:00
2975
翻译 证书制作
我们已经知道创建证书需要一个证书请求,CA证书,CA证书配套的CA私钥。创建证书分为如下几个步骤。 验证证书请求及其内容(本例中包括subjectName和subjectAltName),从而决定是否同意使用CA证书来证书这些数据。 创建一个新的证书并且设置所有需要的字段,比如公钥,subject和issuer名称,使用期限数据等等。 增加应用扩展到证书中,包括请求中的subjectAltname。 使用CA的私钥对证书进行签名。步骤一最为重要。为了检验请求,首先必须检
2010-08-09 23:25:00
1914
翻译 如何创建证书请求
<br /><br /><br /><br /><br /> X509证书实质是公钥和与之相关的拥有者和签发者的一个打包。因此,为了创建一个证书请求,必须先产生一个公私密钥对。X.509证书在openssl中是用X509_REQ对象表示的。证书请求中主要包括密钥对中的公钥部分,除此之外还包括subjectName字段和其他一些X.509的属性。这些属性对于证书请求来说是可选参数,但是subject name却是必须有的。<br /><br /><br /> X509_NAME对象类型代表证书的名称。具
2010-08-08 14:14:00
7145
转载 makefile .d的解释
在学写makefile时候,如果要写的好一点高手建议要用个.d文件.我那时候也是非常迷糊,我写的测试代码不用这个也照样运行的很好啊,为什么要写这个东西呢?下面先看这个情况.我们写的这个Makefile 一般要用隐晦规则.当然了如果就两个文件也没必要写这个东西了.用隐晦规则时候..o 文件会自动找这个 .c文件.然后编译.这个是没问题.如果有两个文件first.c main.c 你可以这样写OBJS
2010-05-20 11:25:00
15983
3
原创 编译错误undefined reference to `dlsym'
今天编译碰到了问题,加了-ldl就ok了。dso_dlfcn.c:(.text+0x325): undefined reference to `dlsymdso_dlfcn.c:(.text+0x408): undefined reference to `dlerror
2010-03-09 21:57:00
20730
1
翻译 [读书笔记]openssl证书制作
1. CA命令 Openssl中CA功能命令为 ca,所以第一个关注的section就是ca了。这个section非常简单,仅包含一个key:default_ca。 三个default_crl_days,default_days和default_md,对于命令行中的crldays,days和md选项,可以通过使用这些选项来覆盖配置文件中设定的值。 Polic
2010-03-02 11:10:00
3756
转载 证书配置文件
NAMEDESCRIPTIONCA CONFIGURATION DIRECTIVES[ ca ] Section[ CA_default ] Section[ policy_match ] and [ policy_anything ] SectionsREQ CONFIGURATION DIRECTIVES[ req ][ req_dist
2010-03-02 10:47:00
1709
原创 openssl证书链的校验过程
X509_STORE_CTX这个结构主要是用来校验证书用,一般都会使用X509_STORE这个已经设置好的对象来初始化X509_STORE_CTX,初始化函数如下: int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509, STACK_OF(X509) *chain)
2010-02-06 16:23:00
8712
转载 ASN1编码笔记100103
X509_Value ASNI转DER编码并且保存文件,代码如下: #include #include #include "openssl/x509.h"int main(){ char*buf,*p; char read[1024]; int len; BIO *bwriteFile;
2010-01-03 22:12:00
1823
原创 openssl中证书加载过程
首先看SSL_CTX的结构中跟证书相关的字段(其实结构里面的内容非常多) struct ssl_ctx_st{ struct x509_store_st /* X509_STORE */ *cert_store; STACK_OF(X509_NAME) *client_CA; struct cert_st /* CERT */ *cert;
2010-01-03 16:28:00
8706
2
原创 有关auto pointer
#pragma oncetemplateclass type>class auto_ptr_test...{public: auto_ptr_test( type * p = 0):p_(p)...{} ~auto_ptr_test(void)...{delete p_;} auto_ptr_test(const auto_ptr_test & auto_ptr) ..
2008-04-21 11:09:00
993
原创 C++中关于operator assignment
最基本的形式是:widget & operator= (const widget & )知道为什么要返回引用吗?1. 因为c++设计的目的是要使得自定义类也可以像内置类型那样可以有简单的操作:像operator assignment就是其中之一。比如int a, b,c,你可以像这样赋值 a=b=c;那么对于:widget wa, wb,wc;也应该可以进行这样的操作才是,wa= wb= wc,
2008-04-16 20:42:00
4968
1
原创 zigzag
const int dimension = 7;void make_zigzag(int n, int a[][dimension])...{ int i = 0, j= 0; int num = 0; while (1) ...{ while (i>= 0 && j n-1) ...{ a[i--][
2007-11-06 20:56:00
707
原创 C++构造和析构顺序
以为自己C++还算是比较 熟悉,可是发现自己离精通还差的好远,一个小小的问题就把我问倒了,无比郁闷:(。还需要修炼啊,C++真的很复杂。进入正题。我知道构造函数的执行顺序,先调用基类的构造函数,然后是自己的构造函数。析构的顺序刚好相反。可是成员变量呢?faint,这个我就不知道了。总结:(1)首先调用基类构造函数;(2)调用成员对象的构造函数;(3)自己的构造函数。
2007-10-25 18:40:00
3843
转载 TCP连接的状态转换图深度剖析
这个图n多人都知道,它对排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻地认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解释一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四次握手过程。1、建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到
2007-10-18 15:00:00
3877
2
原创 字符串全排列
今天面试问到了一道题目,也不知道讲清楚了没,当时自己的思维也有些乱!求一个字符串的全排列。 void all_sort(char * a, int start, int end)...{ if (start == end) ...{ for(int i = 0; iend; i++) ...{ printf("%c", a[
2007-10-18 14:50:00
680
转载 STL容器删除
map amap; amap.insert(map::value_type(3,5)); amap.insert(map::value_type(4,5)); amap.insert(map::value_type(5,5)); map::iterator iter = amap.begin(); for(;iter != am
2007-09-23 22:07:00
933
转载 回车和换行
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”
2007-09-04 17:06:00
667
翻译 Command设计模式
我的理解Command Pattern 设计一个命令的执行者,它负责执行命令,但是它并不知道这个命令是什么,它只负责去执行就好了,而且这个命令也总是会被正确的执行。 其实在看了前几页对这个模式的描述,差不多脑海中就已经构思出这个模式的大概实现了。 比较生动的2个例子: 1. 你去一家餐厅吃饭。当你把菜单点好,服务员会把你的菜单送到厨师那里,厨师会帮你做好你点的菜。就这么简单:其中服务员就相当于是命
2007-08-30 14:57:00
831
原创 Compostion模式
Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. 调用方法时,会遍历这个树。就用一个树的例子来说明。(我仿照别人写的C++版本)树的抽象基类:class treestuff ...{public: treestuff(); virtual ~treestuff(); virtua
2007-06-26 11:11:00
816
原创 Decorator模式
给一个类添加功能扩展的时候,最开始想到的可能就是用继承。在子类中覆盖(override)父类的方法。但是这样会带来一个问题:随着要添加的功能越来越多,子类会成爆炸式增长,维护这么多不同的子类是个很难的问题。这样通过继承来扩展功能是静态的,即在编译的时候子类的方法就被确定了。使用Decorator就可以很好的动态增加功能的扩展,而且是非常富有弹性的扩展。一个重要的设计原则:(引自h
2007-06-25 15:19:00
744
翻译 subject和observer模式
subject和observer分离开,松耦合状态。public interface Observer ...{ public void update();}public interface Subject ...{ public void registerObserver(Observer o); public void removeObserver(Observ
2007-06-22 11:43:00
960
转载 extern详解
C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定
2007-06-21 18:50:00
2329
原创 插入排序
看别人写的觉得很简单,自己写可就有点不同,以后要多自己写!void InsertSort(int a[],int n){ for(int i=1;i { int j=i-1; while(j>=0 && a[i] { j--; } //交换a[i] a[j+1] if(j!=i-1) { int temp=a[i]; for(int k=i;k>j+1;k--)
2006-10-10 15:24:00
841
转载 Host Byte Order & Network Byte Order
Convert the Natives!Weve now been lead right into the next section. Theres been too much talk about this Network to Host Byte Order conversion--now is the time for action!All righty. There are t
2006-06-03 16:08:00
4399
1
原创 引用和指针小结
引用 & 注意的2点:1使用引用时,必须同时对它进行初始话,指向一个已经存在的对象2 一旦一个引用被初始化,就不能改为指向其他的对象。(而指针可以改变指向)。 声明使用如下:int i ;int &j=i ;这样就可以i , j 就可以互相等价了。 指针 * 声明使用如下:int a,b;int *pa,*pb=&b; (
2006-06-03 16:03:00
1438
原创 深浅MFC学习笔记总结-MFC程序的执行过程
MFC程序的执行过程1 首先产生全局的对象theApp(任何一个mfc程序都会产生这样一个对象)2 进入到 int AFXAPI afxWinMain(…)这个函数中。3 进入到 AfxWinInit(…)。SDK程序WinMain函数的四个参数HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpCmd
2006-06-03 12:24:00
2646
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人