ocsp 简介

先来一个实际例子吧:
d:>openssl ocsp  -issuer issuer.cer -cert login.sina.com.cn.crt  -url http://ocsp.verisign.com/
Response Verify Failure
2296:error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:.\crypto\ocsp\ocsp_vfy.c:122:Verify error:unable to get local issuer cert
ificate
login.sina.com.cn.crt: good
        This Update: Oct 20 14:03:40 2009 GMT
        Next Update: Oct 27 14:03:40 2009 GMT

其中,

login.sina.com.cn.crt 是我们要验证的证书
issuer.cer 是颁发login.sina.com.cn.crt的ca的证书

要想看到更加详细的请求和相应的数据的具体内容,可添加 -text 选项,如下:
d:>openssl ocsp  -issuer issuer.cer -cert login.sina.com.cn.crt  -url http://ocsp.verisign.com/ -text
OCSP Request Data:
    Version: 1 (0x0)
    Requestor List:
        Certificate ID:
          Hash Algorithm: sha1
          Issuer Name Hash: C0FE0278FC99188891B3F212E9C7E1B21AB7BFC0
          Issuer Key Hash: 0DFC1DF0A9E0F01CE7F2B213177E6F8D157CD4F6
          Serial Number: 25E692D2645B52CD365386F2424FE9A0
    Request Extensions:
        OCSP Nonce:
            041026AA90D62932AFDE2FFFF5682E3AEDA4
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: O = VeriSign Trust Network, OU = "VeriSign, Inc.", OU = VeriSign International Server OCSP Responder – Class 3, OU = Terms of use at
 www.verisign.com/rpa (c)03
    Produced At: Oct 20 14:03:40 2009 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: C0FE0278FC99188891B3F212E9C7E1B21AB7BFC0
      Issuer Key Hash: 0DFC1DF0A9E0F01CE7F2B213177E6F8D157CD4F6
      Serial Number: 25E692D2645B52CD365386F2424FE9A0
    Cert Status: good
    This Update: Oct 20 14:03:40 2009 GMT
    Next Update: Oct 27 14:03:40 2009 GMT

ocsp 的响应是做了ca的签名的,这样保证了响应的数据是可靠的。

相关文章:http://blog.chinaunix.net/u/12066/showart.php?id=491918

aaa

deb http://mirrors.163.com/ubuntu/ intrepid main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ intrepid-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ intrepid-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ intrepid-backports main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ intrepid-proposed main restricted universe multiverse

javascript 中对象与字符串的比较

今天突然想比较一下 new String("a") 与 "a" 的异同; 发现
new String("a") == "a"; 成立
new String("a") === "a"; 不成立

也好理解,前者是一个对象,后者是一个字符串;不过对象是怎么和字符串做模糊比较的呢?
于是想到了toString(); 建了一个对象,重写了toString() 函数,如:

var obj = {
toString:function(){return "b";}
}

obj == "b"; 成立

于是认为对象toString()之后和字符串做比较的,和同事说了以后,同事认为应该是valueOf() 之后比较的,我想也有道理,于是做了下面的测试:
var obj = {
toString : function(){
return
"a";
},
valueOf : function(){
return
"b";
}
};
console.log(obj == "a");  // 不成立
console.log(obj == "b");  // 成立

一般情况下,valueOf() 是对象自身,还是一个对象,和字符串比较时,还是要toString() 的; 但是我让valueOf()返回字符串,就不需要再toString() 了;
比较时确实是通过valueOf比较的

---------------------------

=== 与 == 的区别
前者要求不需是同一个,相同的地址;
后者要求类型转换后相同就行了。

关于安全的一点点感想

对于通行证来讲,安全是非常重要的一个方面;为安全我孜孜以求,就那登录来说,我总是希望登录流程是绝对安全的。
后来分析utg的登录时,我没有找到用户名密码的任何蛛丝马迹;我不知道加密算法,更不知道加密是否用到了密钥;虽然我知道他们的加密和流程设计并不神秘,但如果不能给我带来足够大的价值的话,我是不会去破解用户名密码的。
从这件事,我深深地体会到: 我们不是任何时候都需要数学概念上的安全的,只要让用户觉得破解的难度和得到的东西不成比例就差不多了。

检查vip后面部分服务器没有回包路由的方法

当我们确认某vip开放了端口p,但访问时好时坏,你们可能是应为vip后面的部分真实服务器到我们自己的机器没有回包路由,这时的检查办法可以如下:

for i in seq 1 100;do nmap vip -p port | grep filtered; done

检查100次,应该可以遍历所有的真实服务器了,如果出现filtered; 则基本是有问题的

使用nc命令访问memcached的问题

我是经常使用nc来查看mc的状态的,突然有一天,我使用nc命令做set操作,发现总是失败;用telnet没有问题,至少应该不是memcached的问题,可能是nc的问题吧。

今天又遇到了这个问题,我使用tcpdump观察使用nc和使用telnet的差别,发现nc发送的回车为\n ,而telnet发送的回车符为\r\n,差异就这么多了,于是使用下列命令测试:

echo -e "set a 0 0 1\r\na\r\nquit\r\n"|nc host port
结果成功

echo -e "set a 0 0 1\na\nquit\n"|nc host port
结果失败

比较久可以知道问题是出现在回车符上了,至于memcached是怎么解释的,有时间在了解一下源码吧

关于PHP的ini设置

PHP中有些设置是不能修改的,有些设置只能在指定的地方修改,有些设置在任何地方都能修改,原来不能到在哪里控制的,今晚就借着PHP手册到PHP源码里面一探究竟。

手册中提到:

    

        

            

            

            

        

    

    

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

    

常量 含义
PHP_INI_USER 1 配置选项可在用户的 PHP 脚本或 Windows  注册表中设置
PHP_INI_PERDIR 2 配置选项可在 php.ini, .htaccess 或  httpd.conf 中设置
PHP_INI_SYSTEM 4 配置选项可在 php.ini or httpd.conf  中设置
PHP_INI_ALL 7 配置选项可在各处设置

根据这些常量查PHP的源码,发现配置选项在设置的时候都指定了这些常量属性的,要想知道某配置选项是否可以修改,在源码中 grep PHP_INI -R * | grep 该配置选项   就行了。

还了解了几个宏定义,如,初始化配置选项时总是先 PHP_INI_BEGIN() 然后PHP_INI_END()  ,这里给出这两个宏的定义:
#define PHP_INI_BEGIN       ZEND_INI_BEGIN
#define PHP_INI_END         ZEND_INI_END

#define ZEND_INI_BEGIN()        static zend_ini_entry ini_entries[] = {
#define ZEND_INI_END()      { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL } };

所以,初始化配置选项就是按照一定的数据结构写到一个数组里。

md5_dir

对目录做md5,稍加修饰可以比较目录是否完全相同,摘自PHP手册

function MD5_DIR($dir)
{
   if (!
is_dir($dir))
   {
       return 
false;
   }
   
   
$filemd5s = array();
   
$d dir($dir);

   while (false !== ($entry $d->read()))
   {
       if (
$entry != '.' && $entry != '..')
       {
             if (
is_dir($dir.'/'.$entry))
             {
                 
$filemd5s[] = MD5_DIR($dir.'/'.$entry);
             }
             else
             {
                 
$filemd5s[] = md5_file($dir.'/'.$entry);
             }
         }
   }
   
$d->close();
   return 
md5(implode(''$filemd5s));
}

关于php的ignore_user_abort和connection_status

有一种需求:
PHP想完成很多件事情,但是不关心事情的最终结果,本来按理说是完全该用队列来实现的,但是没有发现一个比较合适的队列,于是就想通过一种别的办法来实现;
我想让PHP将需要处理的数据扔给本机的apache,不等待apache完成,直接断开连接,继续做别的事情,这样没有使用队列,但是达到了使用队列的效果。

因为PHP在apache中执行时,如果客户端断开了,则脚本就不再执行了(大概是这么个意思),当然这不是我想要的,又知道函数ignore_user_abort可以来控制,尽管知道是这么个意思,但是还是要测试一下才放心;
测试了一下ignore_user_abort和connection_status 都不像描述的那样。

在研究,另外,不写了