2010-02-04

tomcat 部署 https

tomcat 部署 https


  1. 在 startssl 上申请认证, 最后你会得到两个文件: ssl.key 和 ssl.crt, 建立一个新目录, 把这两个文件拷贝到该目录
  2. 下载 https://www.startssl.com/certs/ca.pem 和 https://www.startssl.com/certs/sub.class1.server.ca.pem
  3. 运行
    cat ssl.crt ca.pem sub.class1.server.ca.pem > chain.crt
  4. 运行
    openssl pkcs12 -export -in chain.crt -inkey ssl.key -out keystore.pkcs12 -name tomcat
    使用密码 "PASSWORD"
  5. 运行 (可选, 该步为校验步骤)
    keytool -list -rfc -keystore keystore.pkcs12 -storetype pkcs12
    注意: 结果中要含有如下的一行 "Certificate chain length: 3"
  6. 运行
    keytool -importkeystore -srckeystore keystore.pkcs12 \
    -srcstoretype PKCS12 -destkeystore keystore \
    -srcalias tomcat -destkeypass PASSWORD
    (注意: 此处的 PASSWORD 需要与目标 store 的密码一致) 
  7. 运行
    cp keystore $TOMCAT_HOME/conf/
  8. 修改 $TOMCAT_HOME/conf/server.xml, 去掉 SSL Connector 附近的注释, 内容如下:
    <Connector URIEncoding="UTF-8" port="443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
    keystoreFile="conf/keystore"
    keystorePass="********"
    keyAlias="tomcat"
    />
  9. 把其余的 redirectPort="8443" 改为 redirectPort="443"
  10. 重启 tomcat
  11. 调整防火墙,启用 443 端口
  12. 备份 ssl.key 和 ssl.crt 到安全位置, 删除整个目录, 设置 $TOMCAT/conf/keystore 的属主为 tomcat 的运行用户, 设置权限为 640 或更低权限

注意事项:
  1. ssl.crt ca.pem sub.class1.server.ca.pem 都必须是 PEM 格式 (看起来类似base64)
  2. 所有步骤中建议使用同一套密码
  3. 此处对密码的要求不是很高, 因为运营机器上的 root 用户能同时拿到 keystore 和 server.xml, 密码再复杂也无效, 非 root 用户拿不到 keystore, 所以是安全的
  4. 如果有更高的安全要求, 建议修改 tomcat 的启动脚本, 在启动时手动输入密码, 设置为环境变量, 然后在 server.xml 中使用环境变量来获得密码 (仍然有问题, root 不在自己手上, 安全经常是幻像)
  5. Firefox, Chrome, IE 下均不会报警, 但 Java 客户端仍然不能使用, 解决方法如下
    1. 运行: wget https://www.startssl.com/certs/ca.pem
    2. 运行: keytool -importcert -trustcacerts -file ca.pem -keystore foo -storepass changeit
    3. 把 foo 拷贝到你的程序中
    4. 把如下两行代码加到你的程序 main 函数中:
      System.setProperty("javax.net.ssl.trustStore", "/path/to/foo");
      System.setProperty("javax.net.ssl.trustStorePassword", "changeit");




2010-01-31

gtalk bot: toascii@lidaobing.appspotc...

gtalk bot: toascii@lidaobing.appspotchat.com


解决在 PTT.CC 上看不懂注音文的问题, 差不多就是一个 echo server, 不过会把注音符号, 平假名, 片假名, 转成对应的罗马符号.截图见下:



2009-09-26

显示网易评论的总条数

  1. 使用 firefox
  2. 安装 greasemonkey 插件, https://addons.mozilla.org/en-US/firefox/addon/748
  3. 重启 firefox
  4. 打开 http://userscripts.org/scripts/show/58599
  5. 点击 Install

源码位于: http://userscripts.org/scripts/review/58599

2009-08-09

广州第一次技术沙龙总结

昨天总共有两个讲座:

第一个是赖永浩的"单枪匹马做游戏", 主要是讲了现在做网页游戏和手机软件都已经晚了,做 SNS 插件还有机会 (比如《开心农场》), 还提了几个游戏的技术点,比如要分表,尽可能用K/V 数据库。

第二个讲座是 Tim Yangkey-value 数据库。技术介绍方面很扎实,了解了不少新东西。不过评测方面有点潦草。没分析 erlang 的 key-value 数据库也是一个遗憾。

印象最深的是 KV 数据库 + lucene 的解决方案, 把以前查找的需求都交给 lucene 来完成。

每有一个新技术,大家都希望他是一个银弹,能解决所有的问题,从会后的提问中可以看出大家也有这种倾向, :)

另: 做网游似乎挣钱很容易。

2009-08-08

最近一个月(200907)的反省

  • 产品和运营很重要的,但不是我应该去做的, 应该更加关注设计,开发和技术。
  • 对一项技术的关注应该有持续性, 应该有阶段目标和时间点。
  • 应当保证时间的连续性,尽量避免被 twitter 和 google reader 打碎时间。

2009-06-28

程序治理

本文是对许老大的 一篇博文 的评论。

垃圾回收是 C++ 语言层不具备的一个功能, boost shared_ptr 在库层次实现了这个功能。对于这种超越语言功能的库,我的建议就是加强程序治理: 对使用这些库建立一些规则, 扬长避短。

  1. 对于同一个对象,要么完全使用 shared_ptr, 要么完全不使用 shared_ptr,原文提到的几个问题似乎都与这个相关。

  2. 对于一个类,在设计时就要决定这个类是否要以 shared_ptr 方法来使用。

  3. 对于需要用 shared_ptr 的类,建议采用如下的定义方式

    class _Foo {
    };
    typedef boost::shared_ptr<_Foo> Foo;
    Foo foo_new(constructor args...);




这套规则有一个变种(主要是为了解决 shared_ptr 的传播性问题): 限制 shared_ptr 在一个模块内部使用, 在模块的入口 API 处对需要返回的对象进行拷贝,以脱离 shared_ptr。

C 语言的 gobject 和 pyobject 库都有 GC 的支持,但解决起来似乎比 C++ 顺利很多,我觉得有如下的原因

  • 类和GC的概念是同时引入的, 而 C++ 的解决方案则拆成了两块

  • C++ 过于崇尚自由, 而 C 语言则已经在程序治理方面积累了很多经验

2009-05-20

[2cents] ssh 登录过慢的问题

[2cents] ssh 登录过慢的问题

可能原因

1. 服务端对客户端IP进行DNS反解过慢, 解决方法是在 /etc/ssh/sshd_config 中加入一行

UseDNS no

然后用 /etc/init.d/ssh restart 重启 DNS 服务 (ssh 重启时不会切断已有的连接)

2. 客户端 GSSAPI 认证过慢, 解决方法是在 $HOME/.ssh/config 中加入如下一段

Host *
  GSSAPIAuthentication no


3. 其他情况,可以用 ssh -vvv hostname 查看 ssh 在哪一步等待时间最长,用对应的关键词搜索即可。