重新找出了以前注册的amazon账号,填写了一些支付信息,开通了ec2的服务,先学习一下:
amazon的开通方式还有些特殊:
1. 通过电话的方式确认手机信息的正确性
2. 通过扣费(过期自动退回)的方式确认信用卡的有效性
DevOps
重新找出了以前注册的amazon账号,填写了一些支付信息,开通了ec2的服务,先学习一下:
amazon的开通方式还有些特殊:
1. 通过电话的方式确认手机信息的正确性
2. 通过扣费(过期自动退回)的方式确认信用卡的有效性
首先,我编译PHP时使用如下命令:
./configure –prefix=/usr/local/php-5.3.3 && make
完成之后,发现默认的php.ini 为: /usr/local/php-5.3.3/lib/php.ini ; 于是我改变了注意,想修改prefix为 /usr/local , 如果不执行make clean的话,则
./configure –prefix=/usr/local && make
发现默认的php.ini 仍为: /usr/local/php-5.3.3/lib/php.ini
看来必须make clean了, 似乎configure之后生成的头文件: ./main/build-defs.h 是不被依赖的
通过wireshark抓包分析ssl协议,其中,发现client提供给server的可选的sipher suites如下:
定义: openssl\ssl\ssl.h
相关参考:
http://msdn.microsoft.com/en-us/library/aa380513%28v=vs.85%29.aspx
http://www.ietf.org/rfc/rfc2246.txt
http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.csqzas.doc/sy10700_.htm
http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.csqzas.doc/sy10700_.htm
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_ssl.htmlhttp://seaknight.bokee.com/6897206.html
测试脚本a.php:
目录结构:
a.php
b.php
include_path 的 = .;/usr/local/lib/php
strace -e file php a.php
——————————
open("a.php", O_RDONLY) = 3 // 打开a.php
getcwd("/usr/home/junjie2", 4096) = 18
lstat64("/usr/home/junjie2/a.php", {st_mode=S_IFREG|0644, st_size=108, …}) = 0
lstat64("/usr/home/junjie2", {st_mode=S_IFDIR|0777, st_size=36864, …}) = 0
lstat64("/usr/home", {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat64("/usr", {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
getcwd("/usr/home/junjie2", 4096) = 18 // get current working directory (这个就是include_path 中的 "." )
lstat64("/usr/home/junjie2/./b.php", {st_mode=S_IFREG|0644, st_size=7, …}) = 0 // 找见了
lstat64("/usr/home/junjie2/b.php", {st_mode=S_IFREG|0644, st_size=7, …}) = 0
open("/usr/home/junjie2/b.php", O_RDONLY) = 3
=====
getcwd("/usr/home/junjie2", 4096) = 18 // 这次包含没有真实的文件操作,因为包含过了的文件PHP自己都知道,可以使用get_included_files()来查看,所以就不需要再lstats和open了
=====
getcwd("/usr/home/junjie2", 4096) = 18 // get current working directory (这个就是include_path 中的 "." )
lstat64("/usr/home/junjie2/./c.php", 0xbf904350) = -1 ENOENT (No such file or directory) // 没找见
lstat64("/usr/local/lib/php/c.php", 0xbf904350) = -1 ENOENT (No such file or directory) // 去include_path 中的 "/usr/local/lib/php" 下面找, 还没找见
lstat64("/usr/home/junjie2/c.php", 0xbf904350) = -1 ENOENT (No such file or directory) // 去脚本所在的目录下面找,此次查找和include_path 无关
getcwd("/usr/home/junjie2", 4096) = 18 // 这里又查一次,why?
lstat64("/usr/home/junjie2/./c.php", 0xbf9042a0) = -1 ENOENT (No such file or directory)
lstat64("/usr/local/lib/php/c.php", 0xbf9042a0) = -1 ENOENT (No such file or directory)
lstat64("/usr/home/junjie2/c.php", 0xbf9042a0) = -1 ENOENT (No such file or directory)
getcwd("/usr/home/junjie2", 4096) = 18
lstat64("/usr/home/junjie2/c.php", 0xbf906390) = -1 ENOENT (No such file or directory) // 这次查找可能是报错的时候查的
open("/usr/home/junjie2/c.php", O_RDONLY) = -1 ENOENT (No such file or directory)
结论:
1. 先查找 include_path 设置的目录; 其中的 "." 代表的不是脚本所在目录,而是脚本运行时的cwd(当前工作目录),这个目录是可以通过chdir修改的
2. 如果include_path 中查不到,则再查找脚本所在目录,这个和是否设置了include_path 无关
3. ini_set("include_path", ""); 第二个参数不能为空,为空的话就没有任何作用
关于PHP的一个小题目:
输出结果: 1234 还是 123 ?
答案: 123
如果才能达到 1234 的效果呢?
使用list、each, 代码如下:
1. 源文件需要是UTF-8编码的
2. 可以通过环境变量 DOTFONTPATH 来设置字体目录, 如果设置字体为 aaa ,则查找的字体文件为 aaa.ttf 等还有其他格式的字体文件。
3. 在windows下可以设置 DOTFONTPATH=c:\windows\fonts
问题:
# sar -q
Invalid system activity file: /var/log/sa/sa04 (0x5)
分析过程:
1. google之: 得到如下信息:
来自: http://sebastien.godard.pagesperso-orange.fr/faq.html
2. 怀疑是生成sa数据文件的sar和解析sa数据文件的sar命令的版本不同
# which sar
/usr/local/bin/sar # 这个是我读取sa数据文件的命令,版本号 8.0.0
# sar -V
sysstat version 8.0.0
(C) Sebastien Godard (sysstat <at> orange.fr)
3. 如何知道生成sa数据文件使用的是那个版本的sar呢?
一般这些文件都是写在cron里面的,所以grep一下cron的配置文件:(注意: grep sa 不是grep sar)
# grep sa -r /etc/cron*
/etc/cron.d/sysstat:*/10 * * * * root /usr/lib/sa/sa1 1 1
/etc/cron.d/sysstat:53 23 * * * root /usr/lib/sa/sa2 -A
# /usr/lib/sa/sa1 -V
sysstat version 7.0.2
(C) Sebastien Godard
4. 为什么会出现这种情况呢?
7.0.2 版本的sar是在 /usr/bin/ 目录下的, 而我的执行环境中的$PATH 变量如下:
# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin
先找到了 /usr/local/bin 下的sar了
解决办法: (写sar的全路径呗)
#/usr/bin/sar -q
SSL协议由SSL记录协议和SSL握手协议两部分组成。
——①SSL记录协议
——在SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和记录数据组成的。所有的SSL通信包括握手消息、安全空白记录和应用数据都使用SSL记录层。
——②SSL握手协议
——SSL握手协议包含两个阶段,第一个阶段用于建立私密性通信信道,第二个阶段用于客户认证。
——第一阶段是通信的初始化阶段,首先SSL要求服务器向浏览器出示证书。证书包含有一个公钥,这个公钥是由一家可信证书授权机构签发的。通过内置的一些基础公共密钥,客户的浏览器可以判断服务器证书正确与否。然后,浏览器中的SSL软件发给服务器一个随机产生的传输密钥,此密钥由已验证过的公钥加密。由于传输密钥只能由对应的私有密钥来解密,这证实了该服务器属于一个认证过的公司。随机产生的传输密钥是核心机密,只有客户的浏览器和此公司的Web服务器知道这个数字序列。这个两方共享密钥的密文可以通过浏览器安全地抵达Web服务器,Internet上的其他人无法解开它。
—— 第二阶段的主要任务是对客户进行认证,此时服务器已经被认证了。服务器方向客户发出认证请求消息。客户收到服务器方的认证请求消息后,发出自己的证书,并 且监听对方回送的认证结果。而当服务器收到客户的证书后,给客户回送认证成功消息,否则返回错误消息。到此为止,握手协议全部结束。
SSL协议提供的安全信道有以下三种特性:
——·私密性:在握手协议定义了会话密钥后,所有的消息都被加密。
——·确认性:尽管会话的客户端认证是可选的,但是服务器端始终是被认证的。
——·可靠性:传送的消息包括消息完整性检查。
问题:
wireshark抓包如下:
这里显示的是CA问题; 首先,颁发server证书的CA是没有问题的,那么应该是curl使用的ca-bandle.crt 有问题。
这里需要注意一下的是,windows上curl使用的CA不是系统系统证书管理里面的证书,而是指定的curl-ca-bandle.crt ,文档说明如下:
参看: curl源码中的: docs/SSLCERTS
当然,在linux中,可以在编译时指定ca文件的路径。
解决问题:
$ curl http://curl.haxx.se/ca/cacert.pem -o curl-ca-bundle.crt # download new
将curl-ca-bundle.crt 放到curl命令寻找的CA的目录中就行了。
linux上的路径可能是: /usr/share/ssl/certs/ca-bundle.crt 或者: