技術情報
ちょっとした調べ物や技術情報を紹介します。
ちょっとした調べ物や技術情報を紹介します。
KeyStoreを作ったり、その中にオレオレ証明書を格納する方法を紹介します。
JDKが導入されていれば、KeyStoreを編集するためのkeytoolが入っています。
(Windowsの場合 X:Program FilesJavajdk1.X.X_XXbinkeytool.exe というパスにkeytoolが見つかるはずです。)
詳しい利用方法はSunのkeytoolのページを参照してもらうとして、SSLServerSocketを作るために証明書が1つだけ格納されたキーストアファイルを新規に作ってみます。
以下の例ではキーストアファイル名は”kyunkyun.keystore”です。また、証明書の識別名は”moemoe”です。
どちらも、好みで設定してかまいません。
(さらに…)
以下のコードで単純にServerSocketFactory#createServerSocket(int, int)を呼び出すと、
ServerSocketFactory tServerSocketFactory = SSLServerSocketFactory.getDefault();
ServerSocket tServerSocket = tServerSocketFactory.createServerSocket(8889, 10);
Socket tSocket = tServerSocket.accept();
証明書が無いという例外が起きます。
Exception in thread "main" javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled. at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source) at jp.kurusugawa.research.serversocket.Server.main(Server.java:36)
この例外は、証明書が入っているキーストアを指定していないことが原因で起きています。
(さらに…)
俺様デシリアライザを作るにはクラスjava.io.ObjectInputStreamをカスタマイズする必要があります。クラスjava.io.ObjectInputStreamの振る舞いを変えるには完全に再実装するしかありません(そのように無理やり制限されています)。ということは、俺様デシリアライザでクラスjava.io.ObjectInputStreamと同じような振る舞いを実現しなければいけないことになります。そこで、いろいろ考えたところ問題にぶち当たりました。