Project

General

Profile

機能 #3409

⑩ セキュアな通信機能

Added by n-ando almost 8 years ago. Updated over 6 years ago.

Status:
終了
Priority:
通常
Assignee:
Start date:
12/22/2015
Due date:
03/25/2016
% Done:

100%

Estimated time:
30.00 h

Description

データポート、サービスポート間の通信をsslで保護する機能を実装すること。なお、この機能は、外部モジュールとして切り出せるように実装する必要がある。すなわち、セキュアな通信機能はモジュール化し、実行時に動的ロードすることで有効になるとともに、当該モジュールが存在しない場合は、他の個所を特に変更することなく動作すること。

test_SSLTrasport.zip (4.55 KB) test_SSLTrasport.zip miyamoto, 01/15/2016 11:52 PM

Associated revisions

Revision 642 (diff)
Added by miyamoto almost 8 years ago

[incompat,new_func,new_file,->RELENG_1_2] SSL encrypted connection has been implemente. refs #3409

Revision 653 (diff)
Added by miyamoto almost 8 years ago

[incompat,new_func,new_file,->RELENG_1_2] SSL encrypted connection has been implemented. refs #3409

Revision 688 (diff)
Added by miyamoto over 7 years ago

[compat,bugfix,->RELENG_1_2] bug fix. refs #3409

History

#1 Updated by miyamoto almost 8 years ago

  • Due date set to 03/25/2016
  • Assignee set to miyamoto
  • Target version set to RELEASE_1_2_0
  • % Done changed from 0 to 50
  • Estimated time set to 30.00 h

#2 Updated by miyamoto almost 8 years ago

SSLによる通信を有効にするモジュールとしてSSLTransport.pyを実装した。
rtc.confに以下のような記述を追加することでSSLTransportInitが実行される。

manager.modules.preload: SSLTransport.py

さらに以下の記述を追加する事で、証明書、秘密鍵、パスワードの設定ができるようにした。
corba.ssl.certificate_authority_file: root.pem
corba.ssl.key_file: private-key.pem
corba.ssl.key_file_password: password

SSLTransportInit関数では、まずエンドポイントの設定を環境変数により行っている。

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

そしてSSLに関する設定を行う。
certificate_authority_file = manager._config.getProperty("corba.ssl.certificate_authority_file")
key_file = manager._config.getProperty("corba.ssl.key_file")
key_file_password = manager._config.getProperty("corba.ssl.key_file_password")
sslTP.certificate_authority_file(certificate_authority_file)
sslTP.key_file(key_file)
sslTP.key_file_password(key_file_password)

ただし、このORBの初期化前にこのモジュールのロードができないとSSLによる保護が有効にならないため、現在はまだ動作できていない。

#3 Updated by miyamoto almost 8 years ago

rtc.confのmanager.preload.modulesにモジュール名を記述する事でManagerのinitManager関数内でモジュールがロードされInit関数が呼び出される機能を追加した。

このためrtc.confへの記述方法を以下のように変更した。

manager.preload.modules: SSLTransport.py
corba.ssl.certificate_authority_file: root.crt
corba.ssl.key_file: server.pem
corba.ssl.key_file_password: password

ただしエンドポイントがsslのみの場合はRTシステムエディタなどからの操作ができなくなるため、他にエンドポインドがない場合はtcpを自動的に追加するようにしている。

if not OpenRTM_aist.toBool(prop.getProperty("manager.is_master"), "YES", "NO", True):
if len(prop.getProperty("corba.endpoints")) 0:
if len(prop.getProperty("corba.endpoint")) 0:
corba_args += " -ORBendPoint giop:tcp::"
prop.setProperty("corba.args",corba_args)

添付したテスト用コードでテストを行った。
テスト用コードを実行してomniORBのログを出した結果、sslが有効になっている事が確認できた。

omniORB: Perform SSL accept for new incoming connection giop:ssl:[::ffff:192.168
.0.2]:60389
omniORB: Server accepted connection from giop:ssl:[::ffff:192.168.0.2]:60389
omniORB: AsyncInvoker: thread id = 5 has started. Total threads = 4
omniORB: giopWorker task execute.
omniORB: Accepted connection from giop:ssl:[::ffff:192.168.0.2]:60389 because of
this rule: "* unix,ssl,tcp"
omniORB: inputMessage: from giop:ssl:[::ffff:192.168.0.2]:60389 38 bytes
omniORB: Handling a GIOP LOCATE_REQUEST.
omniORB: sendChunk: to giop:ssl:[::ffff:192.168.0.2]:60389 20 bytes
omniORB: inputMessage: from giop:ssl:[::ffff:192.168.0.2]:60389 96 bytes
omniORB: Receive codeset service context and set TCS to (ISO-8859-1,UTF-16)
omniORB: Creating new Python state for thread id 7744
omniORB: sendChunk: to giop:ssl:[::ffff:192.168.0.2]:60389 28 bytes

#4 Updated by n-ando almost 8 years ago

どのような条件で、endpoint が tcpかsslになるかの調査をお願いします。

#5 Updated by miyamoto almost 8 years ago

endpointをどのような条件でtcpかsslかを選択するかについて

指定方法①
クライアント側でORB_initのオプションORBclientTransportRuleを設定することでどのエンドポイントを優先するかを設定可能

例えば、

-ORBclientTransportRule "* ssl, tcp"

というオプションを追加するとsslが優先される。
sslとtcpを逆にするとtcpが優先される。

-ORBclientTransportRule "* tcp, ssl"

ここにssl、もしくはtcpを記述しなかった場合は、そのエンドポイントでの通信はできなくなる。

-ORBclientTransportRule "* ssl"

この場合はsslのエンドポイントでのみ通信ができる。

指定方法②
corbaloc形式でオブジェクトリファレンスを取得する場合は明示的に指定できる。

例えば、

corbaloc:ssliop:localhost:2810/ExampleEcho

とした場合はsslで通信する。

corbaloc:iiop:localhost:2810/ExampleEcho

の場合はtcpで通信する。

#6 Updated by miyamoto over 7 years ago

  • % Done changed from 60 to 100

#7 Updated by n-ando over 6 years ago

  • Status changed from 新規 to 終了

Also available in: Atom PDF