忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[576]  [575]  [574]  [573]  [572]  [571]  [570]  [568]  [567]  [566]  [565
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

前回のomniORBでSSLを使う方法について色々と補足をしておきます。

まず色々試した結果、以下のようなエラーが出るかもしれない事が分かりました。

① omniORB: openSSL error detected in sslAddress::connect. Reason: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
② omniORB: openSSL error detected in sslAddress::connect. Reason: error:14082174:SSL routines:ssl3_check_cert_and_algorithm:dh key too small
③omniORB: openSSL error detected in SSL accept from giop:ssl:[::ffff:192.168.0.2]:58767 : error:04075070:rsa routines:RSA_sign:digest too big for rsa key

まず①ですが-ORBsslVerifyMode noneというオプションをORB初期化時に追加すれば一応は消えます。あまり良くはないだろうけど、試すだけならこれでも大丈夫です。

②ですが、これはOpenSSLのバージョンが新しいと発生するみたいです。なんでもOpenSSLの新しいバージョンではDHパラメータが2048bit必要だから発生するらしいけど、どこで設定するのかは不明です。詳しい人は教えてください。1.0.2は駄目で、0.9.8は大丈夫みたいなのでこれをインストールしてください。

③ですが、これは秘密鍵の長さが短い場合に発生するみたいです。512bitだと発生するので1024bit以上にしておけば大丈夫だとは思います。



とりあえず手順を纏めておきます。
Python、omniORBpyはインストール済みと言う事で話を進めます。

まずはここからOpenSSLの0.9.8をインストールしてください。
一応、インストールしたディレクトリ(C:\OpenSSL\bin\)にパスを通しておくと便利かもしれないです。


簡単な動作確認のプログラムを作成したので、ここからダウンロードしてください。

予めネーミングサービスを起動しておいてください。
test_srv.py(サーバー)を起動した後に、test_clt.py(クライアント)を起動して通信ができていれば成功しているはずです。


SSLのよる通信を自作のプログラムで使用するまでの手順を説明します。

まずは証明書、秘密鍵を作成する必要があるので以下のコマンドで作成してください。
openssl genrsa 1024 > private-key.key
openssl req -new -key private-key.key > private-key.csr
openssl x509 -days 3650 -req -signkey private-key.key < private-key.csr > certs.crt
名前は適当に変更してください。



次にソースコードを見ていきます。
まずは何にせよsslTPをインポートします。


from omniORB import sslTP




次に証明書、秘密鍵、パスワードを設定してください。
sslTP.certificate_authority_file("certs.crt")
sslTP.key_file("private-key.key")
sslTP.key_file_password("test")



そしてSSLを有効にするためにオプションを追加します。
sys.argv.extend(["-ORBendPoint","giop:ssl::"])



さらに証明書がいい加減でも通信できるように以下のような記述を追加します。

sys.argv.extend(["-ORBsslVerifyMode","none"])
※小技ですが、以下のように環境変数でも設定できます。

os.environ['ORBendPoint'] = 'giop:ssl::'
os.environ['ORBsslVerifyMode'] = 'none'

これで準備完了です。
他に変更する点はありません。


ただ、これでは本当にSSLで暗号化して通信しているのかは謎です。
一応、ORBtraceLevelオプションを25にして詳細まで表示するようにすれば、

クライアント
omniORB: Scavenger task execute.
omniORB: LocateRequest to remote: root<0>
omniORB: Client attempt to connect to giop:ssl:192.168.0.2:63241
omniORB: Client opened connection to giop:ssl:192.168.0.2:63241
omniORB: sendChunk: to giop:ssl:192.168.0.2:63241 38 bytes
omniORB: inputMessage: from giop:ssl:192.168.0.2:63241 20 bytes
omniORB: Send codeset service context: (ISO-8859-1,UTF-16)
omniORB: sendChunk: to giop:ssl:192.168.0.2:63241 110 bytes
omniORB: inputMessage: from giop:ssl:192.168.0.2:63241 46 bytes
サーバー
omniORB: Accepted connection from giop:ssl:[::ffff:192.168.0.2]:63278 because of
 this rule: "* unix,ssl,tcp"
omniORB: inputMessage: from giop:ssl:[::ffff:192.168.0.2]:63278 38 bytes
omniORB: Handling a GIOP LOCATE_REQUEST.
omniORB: sendChunk: to giop:ssl:[::ffff:192.168.0.2]:63278 20 bytes
omniORB: inputMessage: from giop:ssl:[::ffff:192.168.0.2]:63278 110 bytes
omniORB: Receive codeset service context and set TCS to (ISO-8859-1,UTF-16)
echoString() called with message: Hello from Python
omniORB: sendChunk: to giop:ssl:[::ffff:192.168.0.2]:63278 46 bytes
omniORB: Scanning Python thread states.

と言う風な感じでSSLで通信しているらしいという事は分かるのですが、実態がどうなっているかは謎です。確認する方法があれば教えてください。













にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]