xml类型的配置文件包含特殊字符的处理

2010年4月22日 2 条评论 1,034 views

resin的配置文件类似xml,语法规范也遵循xml的写法,今天遇到了特殊字符的问题,数据库密码包含了特殊字符。
<init-param driver-name=”oracle.jdbc.driver.OracleDriver”/>
  <init-param url=”jdbc:oracle:thin:@localhost:1521:Test”/>
  <init-param user=”username”/>
  <init-param password=”123&(45aq”/>

</resource-ref>

#sh start_server.sh
Starting Resin on Thu, 22 Apr 2010 18:39:48 +0800 (CST)
com.caucho.xml.XmlParseException: /home/resin/conf/resin.conf:8: malformed entity ref at `(‘
        at com.caucho.xml.XmlParser.error(XmlParser.java:2769)
        at com.caucho.xml.XmlParser.parseCharacterReference(XmlParser.java:1002)
        at com.caucho.xml.XmlParser.parseValue(XmlParser.java:1192)
        at com.caucho.xml.XmlParser.parseAttributes(XmlParser.java:702)
        at com.caucho.xml.XmlParser.parseElement(XmlParser.java:603)
        at com.caucho.xml.XmlParser.parseNode(XmlParser.java:377)
        at com.caucho.xml.XmlParser.parseInt(XmlParser.java:248)
        at com.caucho.xml.AbstractParser.parse(AbstractParser.java:645)
        at com.caucho.util.Registry.parse(Registry.java:199)
        at com.caucho.util.Registry.parse(Registry.java:174)
        at com.caucho.server.http.ResinServer.init(ResinServer.java:311)
        at com.caucho.server.http.ResinServer.main(ResinServer.java:1176)

其原因并不是“(”引起的,罪魁祸首是“&”

解决办法是使用&amp;替换&
如:
  <init-param password=”123&amp;(45aq”/>

xml文件中其他的几个特殊字符做同样处理即可:
    * &amp; = & (ampersand)
    * &lt; = < (left angle bracket, less-than sign)
    * &gt; = > (right angle bracket, greater-than sign)
    * &quot; = ” (quotation mark)
    * &apos; = ‘ (apostrophe)

分类: resin 标签:

cnnic根证书(root)的不可信与解决办法

2010年4月8日 评论已被关闭 2,613 views

cnnic使用了自己的根证书CNNIC ROOT和中级根证书CNNIC SSL,(好多人都在抵制cnnic root哦!,不过既然boss同意使用CNNIC证书,那俺也只能照办了~)

3月1日以后替换的证书都需要替换之前Entrust授权的ROOT。

但是一些主、客观上的原因导致并不是所有的浏览器或者客户端都认为cnnic的根证书是合法可信的,比如firefox3.0。还有java客户端,如我的实际情况是在配置完毕后使用浏览器访问https没有问题,但是使用java的HttpURLConnection调用时,web端有以下错误日志:

[Wed Apr  7 15:25:10 2010] [error] mod_ssl: SSL handshake failed (server 2hei.net:443, client 218.241.111.117) (OpenSSL library error follows)
[Wed Apr  7 15:25:10 2010] [error] OpenSSL: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown

看结果貌似java不识别cnnic为truststore。

经过与cnnic的support沟通后,得到了解决方案,总结如下:

1、use keytool to export the server certificate from the certs keystore.
#keytool -export -keystore certs -alias jamie -file server.cer
也可以使用IE浏览器导出base64的server.cer文件。

2、Use keytool to create a new keystore named jssecacerts (which will be used as a truststore by SecureBrowser). Import server.cer into jssecacerts.
#keytool -import -keystore jssecacerts -alias jamie -file server.cer

3、Finally, copy jssecacerts to the lib/security subdirectory of your java.home directory. (On your client machine.)

Now SecureBrowser will use jssecacerts as a truststore to authenticate SecureServer.

4、edit java code,add this:
// Register JSSE
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()) ;
// Simply set the protocol handler property to use SSL.
System.setProperty(“java.protocol.handler.pkgs”,”com.sun.net.ssl.internal.www.protocol”);

参考文档
http://onjava.com/pub/a/onjava/2001/05/03/java_security.html?page=4

分类: other 标签:

4.1 愚人节恶搞之 kernel.org

2010年4月2日 评论已被关闭 863 views

2010-04-02_100416.png

2010-04-02_100439.png
2010-04-02_100453.png
分类: live 标签:

openssh5.4升级后ssh无法登陆

2010年3月30日 评论已被关闭 2,498 views
杯具啊! 新装的服务器,从openssh5.2升级到openssh5.4,重启sshd服务后发现无法登陆了!!!
没办法,找机房人员终端登陆上去开启telnet,又把版本降了回来,汗一个!
谁让手欠呢!
分类: OpenSource 标签:

nginx代理模式下,伪造X-Forwarded-For头的测试

2010年3月18日 6 条评论 4,168 views

测试环境: nginx+resin
IP: 内网:172.16.100.10

客户端IP:123.123.123.123

测试页面: test.jsp
<%
out.println(“x-forwarded-for: ” + request.getHeader(“x-forwarded-for”));
out.println(“remote hosts: ” + request.getRemoteAddr());
%>

nginx 配置一
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

wget测试
wget -O aa –header=”X-Forwarded-For:192.168.0.1″ “http://2hei.net/test.jsp
页面返回结果:
x-forwarded-for: 192.168.0.1, 123.123.123.123
remote hosts: 172.16.100.10

curl测试
curl -H “X-Forwarded-For:192.168.0.1” “http://2hei.net/test.jsp
x-forwarded-for: 192.168.0.1, 123.123.123.123
remote hosts: 172.16.100.10

nginx 配置二
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

wget测试:
wget -O aa –header=”X-Forwarded-For:192.168.0.1″ “http://2hei.net/test.jsp
页面返回结果:
x-forwarded-for: 123.123.123.123
remote hosts: 172.16.100.10

curl测试
curl -H “X-Forwarded-For:192.168.0.1” “http://2hei.net/test.jsp
x-forwarded-for: 123.123.123.123
remote hosts: 172.16.100.10

测试结果:
1、配置  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
增加了一个真实ip X-Forwarded-For,并且顺序是增加到了“后面”。

2、配置  proxy_set_header X-Forwarded-For $remote_addr;
清空了客户端伪造传入的X-Forwarded-For,
保证了使用request.getHeader(“x-forwarded-for”)获取的ip为真实ip,
或者用“,”分隔,截取X-Forwarded-For最后的值。

分类: nginx, OpenSource 标签:

ethtool maybe caused by “TCP checksum offload”

2010年3月3日 评论已被关闭 1,298 views

使用tcpdump抓包时发现有这样的错误信息:

Transmission Control Protocol, Src Port: 44937 (44937), Dst Port: https (443), Seq: 111, Ack: 147, Len: 6

Checksum: 0x5edd [incorrect, should be 0x15db (maybe caused by “TCP checksum offload”?)]
 Good Checksum: False
 Bad Checksum: True

或许是TCP checksum offload的原因

查看本机的网卡信息
2hei# ethtool -k eth0
Offload parameters for eth0:
Cannot get device rx csum settings: Operation not supported
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: off
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off

其他一些帮助
ethtool -K|–offload DEVNAME    Set protocol offload
                [ rx on|off ]
                [ tx on|off ]
                [ sg on|off ]
                [ tso on|off ]
                [ ufo on|off ]
                [ gso on|off ]

关闭rx和tx
#ethtool -K rx off
#ethtool -K tx off
#ethtool -K eth0 rx off tx off tso off gso off

也可用这个命令
#ethtool -K eth0 tx off tso off

打开
#ethtool -K eth0 tx on
#ethtool -K eth0 tso on

关闭tx和rx后,再次抓包,结果显示正常。

CheckSum Offload实际上是将传输层的一部分工作交给了硬件完成,以节约系统的CPU资源。wireshark在本地抓包时看到是系统随机填充的校验和,所以会显示Checksum Offload,实际并不影响数据包的正常传输。
微软的测试表明它可以最多节约30%的CPU资源。IBM里AIX的文档则指出:对于PCI接口的千兆网卡来说还不如让400Mhz以上的CPU来计算校验和,而PCI-X的千兆网卡启用此项后可以达到线路速度,从而节约CPU资源。

详细可见: http://www.microsoft.com/whdc/device/network/taskoffload.mspx

分类: OpenSource 标签:

request.getScheme cann’t get https in nginx proxy with apache

2010年2月21日 评论已被关闭 976 views

程序中为了不写死url,使用了动态获得的方式:
basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;

其中: request.getScheme() return http but not https.
之前单独使用apache(https)+resin的方式正常,现在前面增加了一层nginx,发现问题来了,协议部分(Scheme)无法传过去,后台的resin无法获取到正确的值。

尝试了下面的配置,结果还是一无所获。
    proxy_redirect off;
    proxy_set_header HTTPS  on;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Url-Scheme $scheme;
    proxy_set_header X-Scheme $scheme;
    proxy_set_header X-Nginx-Scheme $scheme;
    proxy_set_header Scheme $scheme;
    proxy_set_header  X-FORWARDED_PROTO $scheme;
    proxy_set_header  X-FORWARDED_PROTO “https”;
    proxy_set_header X-Forwarded-Scheme “https”;
    proxy_set_header X-Forwarded-Proto $scheme;
    real-scheme-header     X-Forwarded-Proto;

今天下午好好google了一番,所有的帖子几乎翻了个遍,终于有所收获啦,重点是nginx配置完毕后,apache也要配置环境变量哦!
http://www.ruby-forum.com/topic/183450

nginx config:
=============
proxy_set_header X-Nginx-Scheme $scheme;
# nginx variable $scheme will be ‘http’ or ‘https’.

apache config:
==============
SetEnvIf X-Nginx-Scheme “^https$” HTTPS=on
# Apache environment variable HTTPS will be ‘on’ or not defined.

测试代码如下:
<%
out.println(“Protocol: ” + request.getProtocol() + “<br>”);
out.println(“Scheme: ” + request.getScheme() + “<br>”);
out.println(“Server Name: ” + request.getServerName() + “<br>” );
out.println(“Server Port: ” + request.getServerPort() + “<br>”);
%>

页面打印结果为,正常了!
Protocol: HTTP/1.0
Scheme: https
Server Name: 2hei.net
Server Port: 443

分类: nginx 标签:

resin使用了struts/spring等框架与apache整合时需要注意事项

2010年2月6日 评论已被关闭 763 views

resin使用了struts/spring等框架与apache整合时需要注意以下:

默认情况resin ResinConfigServer配置不支持除了jsp和servlet之外的其他不规则映射,apache对此类URL会返回404,或者无效的servlet,这就用到了resin的plugin_match配置。
如:
<servlet-mapping url-pattern=”*.do” servlet-name=”plugin_match”/>

几种常见的resin解析方式:
<servlet-mapping url-pattern=”*.jsp” servlet-name=”jsp”/>                  #jsp文件
<servlet-mapping url-pattern=”/servlet/*” servlet-name=”invoker”/>    #标准的servlet
<servlet-mapping url-pattern=”*.xtp” servlet-name=”xtp”/>                  #resin自定义的一种格式
<servlet-mapping url-pattern=”*.do” servlet-name=”plugin_match”/>   #扩展匹配,如struts

分类: resin 标签:

device lo left promiscuous mode

2010年1月28日 评论已被关闭 811 views

dmesg发现有一些这样的信息:

device lo left promiscuous mode
audit(1264387352.387:24): dev=lo prom=0 old_prom=256 auid=4294967295 ses=4294967295

发现是tcpdump 抓包导致,对系统并无大碍!

分类: linux 标签:

《网瘾战争》–看你妹

2010年1月24日 评论已被关闭 1,252 views

一口气看完了60多分钟的《网瘾战争》,真是有些感动。。。

我和其他热爱这个游戏的人一样
认真地挤着公交车上班
认真地消费着各式各样的食品
不管里面有没有不认识的化学成分
我们没有因为工资微薄而抱怨过
没有因为你们拿着从我微薄工资里扣的税
住着联体排屋而心理失衡过
在这一年里,我和其他热爱这个游戏的人一样
为水灾,为地震而痛心哭泣
为载人航天,为奥运会而加油喝彩
我们打心眼里,就不想我们在任何一个方面
落后于这个世界上的任何一个民族
而这一年里,却因为你们这些人
我们迟迟不能与地球上其他国家的玩家一起,一决高下
为了真心喜爱的游戏
我们委曲求全,我们被迫离开
我们冒着被封号的危险去美服欧服
他们骂我们是金币农民
我们顶着上万的延时去台服
他们说我们是大陆蝗虫
这些何其贬低的称谓
我们都在默默地承受
我们凭什么不能拥有每小时4毛钱的廉价娱乐?
就凭我在国服?
凭我是国服的魔兽玩家吗?
你们从小就对我灌输
金窝、银窝不如自己的狗窝
那现实呢?
你们已经让我只能暂住在自己的国家
难道我们精神上的家园
连暂住在自己的国家,都不行吗?

ps: youku视频已被河蟹!
土豆上的视频不知道还能撑多久?

分类: other 标签: