firefox 登陆 12306.cn 网站证书错误之解决 

铁道部的火车票官网垃圾是众所周知的事情,无论是从它的架构、负载能力还有安全性能上讲,都是一坨不折不扣的shit.

今天下午,我接到一位朋友的电话,意思是她在12306.cn 上面订了一张票,付款的时候发现没有“建行”的支付接口,便让我代为支付一下。

我想这也没什么问题,就满口答应了。

火速登陆12306.cn首页,点击“购票”登陆。可是,我杯具了,浏览器提示“证书非法”。

见下图:


我勒个察,这尼玛真是坑爹啊~敢情它这个SSL 证书还是自签名的?还是尼玛无效的??

无奈,下载了其首页提供的所谓的“根证书”,解压,导入火狐。

刷新一下,错误依然。鸟用没有~

咋办?难不成还要换个浏览器试试?在谷歌里搜索了一下,找到了一篇文章,也是这个情况。里面提供了一个解决方案,
见:http://mozilla.com.cn/post/31407/

其实就是把使用https 的这个地址添加到安全例外里面。

也只能这样了~

直接打开:https://dynamic.12306.cn/ 这个地址,在警告下方找到“添加例外”按钮。

见下图:


确认即可。

之后,再次刷新购票页面。果然登陆页面出来了~卧槽!



现在就可以进行余下的支付款操作了。

不过杯具还未结束。当我点击“使用银联卡支付”跳转到中国银联在线的网页后,我发现GNU/Linux 系统再次杯具了。

丫的,填写背面的CVV2码被坑了,又得要尼玛安全控件,而GNU/Linux 不支持。

请根据您的浏览器版本下载适合您的安全控件:

Windows IE浏览器(360安全浏览器):请点击这里

Windows 非IE浏览器(Chrome 、Firefox、Safari等浏览器):请点击这里

MAC 系统安全控件(Safari、Chrome、Firefox等浏览器):请点击这里


我察,果断放弃,换别人电脑支付。

回到证书问题。

之前临时允许的SSL/TLS证书,可以在“首选项”里的“高级”标签页下的“加密”子标签页里面找到。
如之前添加的适用于 dynamic.12306.cn 域名的证书,如图:



当不需要时,从列表里移除即可。
[ ] ( 10768 次浏览 ) 永久链接 ( 3 / 2661 )
升级MySQL 后,每夜备份出错之解决 

昨天我把MySQL 升级到了最新的开发版5.6.5,本来一切正常。直到今天发现我的数据库每夜备份挂了。
见下:
[root@PowerPC ~]# ls /home/ftp/xzx/sql -lh
total 7.3M
-rw------- 1 ftp web 796K Apr 9 00:00 mysql_1333900801.sql.bz2
-rw------- 1 ftp web 803K Apr 10 00:00 mysql_1333987201.sql.bz2
-rw------- 1 ftp web 809K Apr 11 00:00 mysql_1334073602.sql.bz2
-rw------- 1 ftp web 817K Apr 12 00:00 mysql_1334160001.sql.bz2
-rw------- 1 ftp web 822K Apr 13 00:00 mysql_1334246401.sql.bz2
-rw------- 1 ftp web 825K Apr 14 00:00 mysql_1334332802.sql.bz2
-rw------- 1 ftp web 831K Apr 15 00:00 mysql_1334419201.sql.bz2
-rw------- 1 ftp web 834K Apr 16 00:00 mysql_1334505601.sql.bz2
-rw------- 1 ftp web 14 Apr 17 00:00 mysql_1334592002.sql.bz2

最后明显不正常.

我忽然发现,是由于我没有给专门用来备份数据库的用户dumper 授权的原因~ 囧

赶紧按照my.cnf 里的配置,授予dumper 的 select 权限.


[mysqldump]
user = dumper
password = XXXXX
quick
max_allowed_packet = 16M


运行下crontab 里面的dump脚本,
[root@PowerPC ~]# /usr/local/bin/mysqldump -A -C -u dumper | bzip2 -9 > /home/ftp/xzx/sql/mysql_`date +\%s`.sql.bz2
mysqldump: Got error: 1044: Access denied for user 'dumper'@'localhost' to database 'bbpress' when using LOCK TABLES

还是报错。忘了给lock tables 权限了~

继续授权:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbpress |
| lighttpd |
| mysql |
| performance_schema |
| phpbb |
| typecho |
| vsftpd |
+--------------------+
8 rows in set (0.00 sec)

mysql> grant lock tables on vsftpd.* to dumper@localhost identified by 'XXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> grant lock tables on typecho.* to dumper@localhost identified by 'XXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> grant lock tables on phpbb.* to dumper@localhost identified by 'XXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> grant lock tables on lighttpd.* to dumper@localhost identified by 'XXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> grant lock tables on bbpress.* to dumper@localhost identified by 'XXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

再次测试脚本:
[root@PowerPC ~]# /usr/local/bin/mysqldump -A -C -u dumper | bzip2 -9 > /home/ftp/xzx/sql/mysql_`date +\%s`.sql.bz2

查看备份SQL文件:
[root@PowerPC ~]# ls /home/ftp/xzx/sql -lh
total 7.3M
-rw------- 1 ftp web 796K Apr 9 00:00 mysql_1333900801.sql.bz2
-rw------- 1 ftp web 803K Apr 10 00:00 mysql_1333987201.sql.bz2
-rw------- 1 ftp web 809K Apr 11 00:00 mysql_1334073602.sql.bz2
-rw------- 1 ftp web 817K Apr 12 00:00 mysql_1334160001.sql.bz2
-rw------- 1 ftp web 822K Apr 13 00:00 mysql_1334246401.sql.bz2
-rw------- 1 ftp web 825K Apr 14 00:00 mysql_1334332802.sql.bz2
-rw------- 1 ftp web 831K Apr 15 00:00 mysql_1334419201.sql.bz2
-rw------- 1 ftp web 834K Apr 16 00:00 mysql_1334505601.sql.bz2
-rw------- 1 ftp web 14 Apr 17 00:00 mysql_1334592002.sql.bz2
-rw-r--r-- 1 root root 504 Apr 17 16:19 mysql_1334650776.sql.bz2
-rw-r--r-- 1 root root 837K Apr 17 16:27 mysql_1334651252.sql.bz2

恩,这次正常了。以后可千万不能忘了。
[ ] ( 2363 次浏览 ) 永久链接 ( 3 / 2762 )
升级安装 MySQL 5.6.5-m8 和 nginx 1.1.19 

前几天接到邮件通知,MySQL 5.6.x 的分支发布了最新的测试版,也是第八个里程碑版本。值得一提的是,该次的版本,已经无限接近beta.

此外,nginx 由于爆了一个MP4 模块的内存的漏洞——CVE-2012-2089,当该模块被编译进去,并使用时,有被允许执行任意代码的风险。
具体见:http://nginx.org/en/security_advisories.html

注:如果我没记错的话,这已经是nginx这两个月以来,爆出的第二个漏洞了。

鉴于这两种情况,故而觉得很有必要升级更新。
下载这二者源码包,
7 wget http://dev.mysql.com/get/Downloads/MySQ ... ror/mysql/
9 wget http://nginx.org/download/nginx-1.1.19.tar.gz

删除旧版本文件:
[root@PowerPC pub]# rm mysql*
rm: remove regular file `mysql-5.6.4-m7.tar.gz'? y
rm: remove regular file `mysql-5.6.5-m8.tar.gz'? n
[root@PowerPC pub]# rm nginx*
rm: remove regular file `nginx-1.1.17.tar.gz'? y
rm: remove regular file `nginx-1.1.19.tar.gz'? n

之外,使用mysqldump 备份下数据库,以便之后恢复.

首先是MySQL,解压,进入目录。
我的cmake 参数:
[root@PowerPC mysql-5.6.5-m8]# cmake . \
> -DCMAKE_BUILD_TYPE:STRING=Release \
> -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql \
> -DCMAKE_USE_RELATIVE_PATHS:BOOL=ON \
> -DCOMMUNITY_BUILD:BOOL=ON \
> -DDISABLE_SHARED:BOOL=OFF \
> -DENABLED_PROFILING:BOOL=ON \
> -DENABLE_DEBUG_SYNC:BOOL=OFF \
> -DINNODB_COMPILER_HINTS:BOOL=OFF \
> -DINSTALL_BINDIR:STRING=../bin \
> -DINSTALL_DOCDIR:STRING=docs \
> -DINSTALL_DOCREADMEDIR:STRING=docs \
> -DINSTALL_INCLUDEDIR:STRING=include \
> -DINSTALL_INFODIR:STRING=docs \
> -DINSTALL_LAYOUT:STRING=STANDALONE \
> -DINSTALL_LIBDIR:STRING=lib \
> -DINSTALL_MANDIR:STRING=man \
> -DINSTALL_MYSQLDATADIR:STRING=data \
> -DINSTALL_MYSQLSHAREDIR:STRING=share \
> -DINSTALL_MYSQLTESTDIR:STRING=mysql-test \
> -DINSTALL_PLUGINDIR:STRING=lib/plugin \
> -DINSTALL_SBINDIR:STRING=../sbin \
> -DINSTALL_SCRIPTDIR:STRING=scripts \
> -DINSTALL_SHAREDIR:STRING=share \
> -DINSTALL_SQLBENCHDIR:STRING=bench \
> -DINSTALL_SUPPORTFILESDIR:STRING=support-files \
> -DMANUFACTURER:STRING='Built from Source by Sharl' \
> -DMYSQL_DATADIR:PATH=/usr/local/mysql/data \
> -DSYSCONFDIR:PATH=/etc/sysconfig/mysql/ \
> -DWITH_ARCHIVE_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_BLACKHOLE_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_EMBEDDED_SERVER:BOOL=OFF \
> -DWITH_EXTRA_CHARSETS:STRING=all \
> -DWITH_FEDERATED_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_INNOBASE_STORAGE_ENGINE:BOOL=ON \
> -DWITH_LIBEDIT:BOOL=ON \
> -DWITH_LIBWRAP:BOOL=OFF \
> -DWITH_PARTITION_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_SSL:STRING=no \
> -DWITH_UNIT_TESTS:BOOL=OFF \
> -DWITH_ZLIB:STRING=bundled

有几点要注意的是:
1.readline 已经从该版本开始,被移除了。只剩libedit了。
2.该版本不能启用用于tcp 的 libwrap。否则在编译的时候会报错。
见下:

[ 96%] Building CXX object sql/CMakeFiles/sql.dir/mysqld.cc.o
mysqld.cc: In function ‘void handle_connections_sockets()’:
mysqld.cc:5851: error: ‘connection_tcpwrap_errors’ was not declared in this scope
make[2]: *** [sql/CMakeFiles/sql.dir/mysqld.cc.o] Error 1
make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2
make: *** [all] Error 2


所以,如果遇到了该错误。只能暂时禁用掉。
之后清除缓存:
make clean
rm CMakeCache.txt

再次编译,即可.

make 成功后,make install 安装至指定目录.

之后,运行scripts 文件夹下的mysql_install_db 脚本,初始化数据库。
然后运行 mysql_secure_installation,设置root 密码,删除测试表等。
最后,导入之前备份的数据库SQL文件。
若有需要,重新授权库/表.

还有,如果用到了pam_mysql 验证的话,则位于/lib/security/ 下的 pam_mysql.so 文件也需要重新编译。

下载pam_mysql的源码,解压,编译,参数里指定mysql 的主目录。
运行 make,就可以生成新的 pam_mysql.so 链接库了。替换即可。
别忘了 重建链接库表。
ldconfig -v

接下来是nginx,解压,进入目录:
我的configure:
[root@PowerPC nginx-1.1.19]# ./configure \
> --prefix=/usr/local/nginx \
> --sbin-path=/usr/local/sbin/nginx \
> --conf-path=/etc/sysconfig/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --pid-path=/var/run/nginx.pid \
> --lock-path=/var/run/nginx.lock \
> --user=http \
> --group=web \
> --with-select_module \
> --with-poll_module \
> --with-http_xslt_module \
> --with-http_image_filter_module \
> --with-http_dav_module \
> --with-http_flv_module \
> --with-http_mp4_module \
> --with-http_gzip_static_module \
> --without-http_ssi_module \
> --without-http_geo_module \
> --without-http_map_module \
> --without-http_rewrite_module \
> --without-http_proxy_module \
> --without-http_fastcgi_module \
> --without-http_uwsgi_module \
> --without-http_scgi_module \
> --http-log-path=/var/log/nginx/access.log \
> --http-client-body-temp-path=/tmp/nginx/request \
> --without-mail_pop3_module \
> --without-mail_imap_module \
> --without-mail_smtp_module \
> --with-pcre

系统给出编译概况:

Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ md5: using system crypto library
+ sha1: using system crypto library
+ using system zlib library

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/sbin/nginx"
nginx configuration prefix: "/etc/sysconfig/nginx"
nginx configuration file: "/etc/sysconfig/nginx/nginx.conf"
nginx pid file: "/var/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/tmp/nginx/request"


确认无误,make && make install.编译安装。
之后,恢复下之前备份的配置文件 nginx.conf.

检查下版本:
[root@PowerPC /]# nginx -v
nginx version: nginx/1.1.19

正确。

重启服务器,一切正常。
至此,升级工作完成。
[ ] ( 4169 次浏览 ) 永久链接 ( 3.1 / 2587 )
修复 Simple PHP Blog 的页面跳转错误 

我不知道这篇文章该不该写在这里,因为严格意义上来讲,它不算是GNU/Linux 相关的问题。

不过,考虑这个站点是架设在 sphpblog 上的,所以姑且算作是有点关系吧。

是这样的,自从我升级到sphpblog 7.0 以来,我发现一个问题,那就是每当我提交完文章,或者提交完相关的表单操作。

sphpblog 都会将我跳转到 "http://domain.comindex.php" 这个地址。

很明显,它忘了在域名和子级路径之间加“/”了。

这的确很坑爹。每次我都会被送到中国电信的114错误页面,莫名的恼火~

于是,今天正好有时间,看看源码。发现它是在保存完毕后,调用了一个叫“redirect_to_url()” 的函数来实现跳转。

而这个函数位于scripts 目录下的 sb_login.php 文件里,具体内容
参见SVN:http://sphpblog.svn.sourceforge.net/viewvc/sphpblog/trunk/scripts/sb_login.php?revision=217&view=markup

可以看到,该函数还用到了一个叫“baseurl()” 的函数,这个不去管它。

只要把178行的
header('Location: ' . $baseurl . $relative_url);
改成
header('Location: ' . $baseurl . "/" . $relative_url);
即可。

保存下。

看看,是不是跳转成功了?!

注:这已经不是"redirect_to_url()" 这个函数第一次出现问题了,之前也有过一次类似坑爹的问题.
参见官方tracker:
http://sourceforge.net/tracker/index.ph ... tid=645297
[ ] ( 2070 次浏览 ) 永久链接 ( 3.1 / 2497 )
CentOS 下让Nginx 目录列表使用本地时区 

之前我记得nginx 默认目录列表下文件的时间戳使用的是UTC时区。我一直想把它设置成使用指定时区,如CST.

为此,我曾经还在nginx 的邮件列表里面和别人讨论过这个问题,
参见:http://forum.nginx.org/read.php?2,214494,214494#msg-214494

不过当时是无果。之后,我也就放弃了。

不过,直到刚才,我无意中发现了“autoindex_localtime” 这个参数,在nginx 配置文档里面。

我才发现我绕了一个大弯~

于是乎,果断加入该syntax,结果如下:

server {
listen 82;
server_name ftp.xiazhengxin.name;
charset utf-8;
autoindex on;
autoindex_localtime on; # 使用本地时区
autoindex_exact_size off; # 使用可读大小
root /home/ftp/;
allow 127.0.0.1;
deny all;
}


保存下,重载配置文件.
nginx -s reload.

打开 http://ftp.xiazhengxin.name/xzx/sql/ 页面,果然所有备份的数据库文件的时间戳都是凌晨0点00分了。

这就对了~哈哈!困扰了我许久的坑爹的问题终于被解决了。

其实这个问题早就应该被干掉的。因为根据nginx svn 库的提交显示,"autoindex_localtime" 这个参数并不是最近才有的,而是早在2005年就被加入了nginx~ 囧

参见:http://trac.nginx.org/nginx/changeset/520/nginx

注:本文在撰写和测试时,参考了以下文档:
http://nginx.org/en/docs/http/ngx_http_ ... _localtime
[ ] ( 1888 次浏览 ) 永久链接 ( 2.9 / 2532 )

<< <上一页 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 下一页> >>