2011年12月15日木曜日

Jersey Client 利用時の文字化け on CentOS5

Sakura VPS 上でJersey Client API を使った、
JSONを取得して、加工、受け渡しするようなRESTful APIを作成していたときに
文字化けが発生しました。

すべてUTF-8で統一されているのになぜ?とあせりました。
Java内部の問題なのかとも思いましたが、開発環境のUbuntuでは
発生してなかったので、ない。

受信周りの問題だなといろいろ調べた結果、
結局はロケールの設定の問題でした。
開発環境のUbuntuでは、

$ locale

の結果が、

$ locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=

のようになっているのに対してCentOSは、

$ locale
LANG=C
LC_CTYPE="C"


 C…、よくわからない値が入っていました。
なので、localeを編集 して、再起動しました。

$ vi /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"


結果、JSON取得時の文字化けはなくなりました。
Jerseyは賢い子

2011年12月8日木曜日

[ASP]maxrequestlengthのエラー処理

ASPの場合、ファイルのアップロードの制限をしたいという時は、web.configでmaxrequestlengthを設定しますが、そのままだとmaxrequestlengthを超えた場合に”ページを表示できません”画面が表示されてしまいます。そのままだと、どういったエラーが出ているのかユーザに通知できないのでサポートも面倒くさいです。そこで、カスタムエラーを設定すればいいのかと思っていたら、ちょっと違うようです。

詳しくは、
http://www.developer.com/db/article.php/10920_3426051_2
にありますが、どうも日本語では見つからなかったので覚書です。


Sub Application_Error(ByVal sender As Object, _
 ByVal e As EventArgs)
    ' Fires when an error occurs
    ' Check to see whether we came 
    ' from the upload form
    If Path.GetFileName(Request.Path) = _
     "UploadForm.aspx" Then
        ' Get the error details
        Dim appException As System.Exception = _
         Server.GetLastError()
        Dim checkException As HttpException = _
         CType(appException, HttpException)
        ' Verify the expected error
        If checkException.GetHttpCode = 400 And _
         checkException.ErrorCode = -2147467259 Then
            ' Error 400 = bad request, user 
            ' tried to upload a file that's too large
            Session("ImageTooLarge") = True
            Server.ClearError()
            ' Go to the original target page
            Response.Redirect("UploadForm.aspx")
        End If
    End If
    ' For other errors, just accept the default processing
End Sub

MavenのJDKバージョン設定

激しく構成が乱れてるけど、とりあえず公開しておきます。
そのうち直します。


Mavenでコンパイルエラーが発生しました。


注釈は -source 1.3 でサポートされていません
(注釈を使用可能にするには、-source 5 以降を使用してください)
    @Override

MavenのデフォルトでJDK1.3を使用しているために発生しているようです。
JDK1.3だと注釈、型指定のリスト、Foreach等が使えず割と不便。
 JDKを変更するためにはpom.xmlのpluginに次の項を追加します。


 <build>
 <properties>
  <java.version>1.6</java.version>
 </properties>
 
 <plugins>
  <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>2.3.2</version>
   <configuration>
    <source>${java.version}</source>
    <target>${java.version}</target>
   </configuration>
  </plugin>
 
参考
https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

サーバのブルートフォース攻撃対策

気づいたら結構な頻度でブルートフォース攻撃されているようなので
次のようなiptablesの設定を追加しました。

$ sudo /sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
$ sudo /sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent  --update --seconds 60 --hitcount 4 -j DROP

 22ポートにコネクションが60秒に4回アクセスされると60秒アクセスを停止する。
 次のような結果が出たら成功。 

$ sudo /sbin/iptables --listtarget     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            tcp dpt:ssh state NEW recent: UPDATE seconds: 60 hit_count: 4 name: DEFAULT side: source 
           tcp  --  anywhere             anywhere            tcp dpt:ssh state NEW recent: SET name: DEFAULT side: source 
認証は128bitキーのみにしてるから気休めですが。
このあたりが詳しそう
 iptables の ipt_recent で ssh の brute force attack 対策

2011年10月27日木曜日

maven: jetty plugin ssl オレオレ証明書 の設定

jetty plugin 8.x での設定

1.keystore の作成
JDKのkeytoolでkeystoreを作成する。

keytool -keystore keystore -alias jetty -genkey -keyalg RSA -storepass (pass) -keypass (pass) -dname "CN=(domain)"


作成されたkeystoreを任意の場所へ


2.pom.xmlの編集
下記のようにpom.xmlにJetty pluginの設定を編集。
jetty-maven-pluginの"<connectors>"にSslSocketConnectorを追加する。

<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
            <port>8443</port>
            <maxIdleTime>60000</maxIdleTime>
            <keystore>(任意のkeystoreへのパス)</keystore>
            <password>(pass)</password>
            <keyPassword>(pass)</keyPassword>
      </connector>


3.パスワードの暗号化
pom.xmlにパスワードを平文で保存するのは良くないので、
暗号化する。
java -cp jetty-http-8.x.jar:jetty-util-8.x.jar org.eclipse.jetty.http.security.Password (pass)


を実行すると、(pass)->jetty6の場合
jetty6
OBF:1ktv1x0r1z0f1z0f1x1v1kqz
MD5:e032a01e5c4dbb03a29fb031f6b37658


というような値が取得できるので、OBFまたはMD5をpom.xmlに入力する。





ついでに、iPhone等の開発でオレオレ証明書を利用する場合は、
NSURLRequestなら次のようなimplementの追加

@implementation NSURLRequest(NSHTTPURLRequest)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
   return YES; // Or whatever logic
}
@end


ASIHttpRequestならvalidatesSecureCertificate = NOでOK

2011年9月8日木曜日

Ubuntu vmdkのマウント

書きかけでずっと放置してた投稿なので情報が古いかも。


VMware player, serverの仮想ディスクのvmdkの中身を見るためだけに
いちいちVMware playerを実行するのも面倒です。

そんなときにはvmdkをマウントしてくれるvmware-mountが便利です。

VMware playerには付属していないので、
VMware serverをダウンロードしなおして利用します。

 VMware server の Linux版だと、tar.gzのbinフォルダ以下にあるvmware-mountを
任意の場所に保存します。


vmware-mountを使用する。

1.マウントするvmdk上のパーティションを検索する。
vmware-mount -p (vmdkファイル)

例) 次のように表示される。
 Nr      Start       Size Type Id Sytem                 
-- ---------- ---------- ---- -- ------------------------
 1         63  268430022 BIOS  7 HPFS/NTFS


2.パーティションを指定してマウントする。
sudo vmware-mount (vmdkファイル) 1 (マウント先フォルダ)

 1.の例の場合、パーティション 1を指定する。

  例) sudo vmware-mount  vmimage.vmdk 1  /mnt/vmdk


3.パーティションをアンマウントする。
sudo vmware-mount -x

maven on eclipse : m2e

mavenをeclipseで使用する方法。(9/8現在)

基本的には下記リンクを参照する。

http://d.hatena.ne.jp/Kishi/20090228/1235813480

  で、私がやってみてつまずいたところを上げてみる。

 

2. m2eclipseのインストール のリンクが切れてるので下記リンクに変更する。

http://download.eclipse.org/technology/m2e/releases

 

6. jettyをサーバとして起動 

「ゴール」の「選択」 画面に遷移しても「ゴール」の候補が出てきません。

Mavenレポジトリを読み込んでいないさいのバグのようです。(参照

Mavenレポジトリビュー(Window->Show View->Other->Mavenカラ追加)から

右クリックで、「Full Index Enabled」を選択し「Rebuild Index」を実行します。

10分ぐらいかかる。 

下のタスクトレイに表示される進捗はずっと0%ですが実際は進捗してます。(バグ?)

Rebuild後は「ゴール 」の選択候補が表示されるようになります。

 

 

 

2011年5月7日土曜日

ubuntu上でwindows2000,XP@Vmware playerの音声を出す

調べても日本語の記事が見当たらなかったのでメモ

このあたり参考に、
http://ubuntuforums.org/showthread.php?t=182304&highlight=vmware+sound


まずは、alsa-ossをインストール:
sudo apt-get install alsa-oss


音声のありの VMPlayer bin(vmplayer-alsa) の作成:

sudo vi /usr/bin/vmplayer-alsa

上記ファイルの内容は次のようにする:

#!/bin/bash
LD_PRELOAD=libaoss.so exec /usr/bin/vmplayer "$@"

で、ファイルに実行権限を付与:

sudo chmod +x /usr/bin/vmplayer-alsa

これで、vmplayer-alsaから実行すれば音声がでます。

以下の環境で確認、
vmplayer-3.1.3
ホストOS:Ubuntu 10.10
ゲストOS:Windows2000