2012-01-09 10 views
1

httpsを使用してサーバーに接続しようとしていますが、接続時にクライアント証明書が必要であると表示されています。はいを押して続行すると、TLSAlertExceptionが発生します。BlackBerryの既定のクライアント証明書

SecureConnection con = (SecureConnection)Connector.open("ssl://url:443"); 

私はシミュレータ上の証明書を見てきました(と、デバイス上)と、デフォルトですべてのクライアント(個人)証明書がありません。
接続コードは次のように見えます。私はコードを通じて生成することを試みましたが、私はそれを電話上の個人証明書の下に表示させる方法を知らない。

私はthisを見つけましたが、デバイス上で個人証明書を取得するのは非常に望ましいものではありません。

ですから、理想的にはコードを使って、シミュレータで個人証明書を取得することは可能ですか?
SecureConnectionはサーバーに接続するときに自動的に使用しますか?
そうでない場合は、この作業を行うことができるライブラリがありますか?

答えて

1

さらに掘り下げた後、私はBouncy Castle TLS APIを見つけました。長い話はこれまでのところはうまくいきましたが、途中でいくつかのぶつかり合いをしたので、私が行った手順をリストアップします。

ソースファイルとクラスファイルのzipファイルはhttp://www.bouncycastle.org/latest_releases.htmlからダウンロードできます。 「ソースとJavadoc」セクションの下にJ2MEのリンクがあります。

まず、ビルドパスに外部JARとしてcldc_classes.zipを追加しようとしました。弾き語りの城コードのコード補完は、Eclipseで今働いていました。だから私はシミュレータを起動しましたが、私がアプリを起動しようとしたときに、「アプリ起動エラー:モジュール 'cldc_classes.zip」が見つかりませんでした」私は周りを検索し、ビルドパス設定の[注文とエクスポート]タブのチェックボックスをオンにする必要があることを発見しました。おっとっと!

私はそれをチェックして再度実行しようとしましたが、シミュレータが起動する前に「エラー:前提条件に失敗しました」というメッセージが表示されました。いくつかの検索結果が明らかになったので、zipファイルをあらかじめ確認しておくと、それは簡単なように思えました。

preverifyツールを使用すると、Javaパッケージ内のクラスの重複した作成と関係があるように見えるエラーや警告が多発しました。 Bouncy Castle FAQで、彼らはこのようなことに言及し、コードを難読化することを提案しました。

私はJavaの難読化ツールを見つけました。少しの手間をかけてクラスを難読化することができました。事前検証しようとしましたが、もう一度失敗しました...私は事前に確認していた以上に多くのことを学びたくなかったので、ソースファイルをインポートすることにしました。

パッケージの1つがArrayListに頼っているエラーがありましたが、必要ではないようで、削除しました。それを実行しようとすると、「重複する属性の不一致: 'MIDlet-name'」に関するエラーが発生しました。エラーを取り除くためにこれを削除したパッケージの1つに.jadファイルがありました。テストパッケージを削除することもできます。

私は "Eclipse I/Oエラー:プログラム" jar "を実行できません:CreateProcess error = 2"を実行しようとしています。いくつかの検索で、PATH環境変数にjava jdk binフォルダ(C:\ Program Files \ Java \ jdk \ binのようなもの)を追加する必要があることが明らかになりました。

最後に私は実行することができ、データを正常に接続、送信、受信することができました。おそらく、プロジェクトで弾むような城の瓶を使う方が良い/簡単な方法があります。実際にコードが実際に動作していることがわかったので、これを調べることがあります。以下は、接続のサンプルコードです。

SocketConnection con = (SocketConnection)Connector.open("socket://url:443"); 
TlsProtocolHandler tph = new TlsProtocolHandler(con.openInputStream(), con.openOutputStream()); 
tph.connect(new AlwaysValidVerifier()); 
is = tph.getInputStream(); 
os = tph.getOutputStream(); 
関連する問題