InfoDirectory使用手引書 |
目次 索引 |
第3部 SDK編 | > 第5章 アプリケーション開発環境(LDAP C API) | > 5.2 関数インタフェース | > 5.2.2 セションのオープン/初期設定 |
この関数は、SSLを使用する場合に、通常のldap_init()の代わりに使用します。
この関数でセションをオープンした場合は、サーバとの通信を安全なものとすることができます。また、SSLの環境を指定することにより、証明書による認証を行うことも可能です。この関数は、スレッドアンセーフです。【指定形式】
LDAP *ldapssl_init(
char *hostname,
int portno,
SSLENV *sslenv
);【パラメタの説明】
- hostname
InfoDirectoryサーバのホスト名、またはIPアドレスを示す文字列のアドレスを指定します。ホスト名やIPアドレスは、空白で区切って複数指定することができます。
複数の相手ホストが指定された場合、コネクションを確立する際に指定された順番で接続を試みて、接続に成功した最初のホストと通信を行います。
- portno
InfoDirectoryサーバのポート番号を指定します。
デフォルトのLDAPポートを使用する場合は、ポート番号に0を指定します。デフォルトのポート番号はLDAP_SSL_PORT“636”です。
- sslenv
SSLENV構造体のアドレスを指定します。
SSLを使用する場合は、ここで指定する構造体にSSLの動作環境の情報を設定し、パラメタとして渡す必要があります。この構造体の各メンバには、以下の値を設定します(“省略可”となっているパラメタは、NULLを指定するとデフォルトが指定されたものとみなされます)。
SSLENV構造体のメンバを以下に示します。【SSLENV構造体のメンバの説明】
- ssl_version(省略可)
使用するSSLプロトコルの種類を指定します。
- SSL V2プロトコルの場合 : 2
- SSL V3プロトコルの場合 : 3
これ以外の値を指定した場合は、SSLを使用しないものとして処理されます(ldap_init()と同じ処理となります)。
- ssl_verify(省略可)
証明書の検証を行うかどうかの指定を行います。
- 証明書の検証を行わない場合 : 0
- クライアントの証明書のみ検証を行う場合 : 1
- サーバから送られてきた証明書の検証を行う場合 : 2
これ以外の値を指定した場合は、以下の値が指定されたものとみなされます。
- SSL V2の場合 : 1
- SSL V3の場合 : 2
- crypt(省略可)
暗号化の方法を、暗号化アルゴリズムを示す文字列のアドレスで指定します。複数指定する場合には、“:”(コロン)で区切り、列記します。
指定可能な文字列を以下に示します。セキュリティレベルの値は、暗号強度の順位を表しています。
表: 指定可能な暗号化アルゴリズム
プロトコル
暗号化方式の文字列
セキュリティ
レベルSSL V2
"DES-CBC3-MD5"
1
"DES-CBC-MD5"
2
"RC4-MD5"
3
"RC2-MD5"
3
"EXP-RC4-MD5"
5
"EXP-RC2-MD5"
5
SSL V3
"RSA-3DES-SHA"
1
"RSA-DES-SHA"
2
"RSA-RC4-MD5"
3
"RSA-RC4-SHA"
3
"RSA-EXPORT-RC4-MD5"
5
"RSA-EXPORT-RC2--MD5"
5
"RSA-NULL-MD5"
7
"RSA-NULL-SHA"
7
デフォルトは、暗号化ライブラリ(SCTL/SCLライブラリ)がサポートしている暗号仕様で、組合せ可能な暗号化アルゴリズムが指定されたものとみなします。
- slot_path(必須)
スロットディレクトリのアドレスを指定します(ディレクトリのパス名をフルパスで指定します)。指定するスロットディレクトリは、管理ツールで証明書環境を作成するときに指定したスロットディレクトリを指定してください。管理ツールでの証明書環境の作成については、証明書管理機能を参照してください。
- tkn_lbl(必須)
トークンラベルのアドレスを指定します。指定するトークンラベルは、管理ツールで証明書環境を作成するときに指定したトークンラベルを指定してください。管理ツールでの証明書環境の作成については、証明書管理機能を参照してください。
- tkn_pwd(必須)
ユーザPINのアドレスを指定します。指定するユーザPINは、管理ツールで証明書環境を作成するときに指定したユーザPINを指定してください。管理ツールでの証明書環境の作成については、証明書管理機能を参照してください。
- cert_path(必須)
運用管理ディレクトリのアドレスを指定します(ディレクトリのパス名をフルパスで指定します)。指定する運用管理ディレクトリは、管理ツールで証明書環境を作成するときに指定した運用管理ディレクトリを指定してください。管理ツールでの証明書環境の作成については、証明書管理機能を参照してください。
- user_cert(省略可)
ユーザ証明書ニックネームのアドレスを指定します。デフォルトは、証明書管理に登録されている自分の証明書がすべて指定されたものとみなします。指定するユーザ証明書ニックネームは、管理ツールで証明書環境を作成するときに指定したユーザ証明書ニックネームを指定してください。管理ツールでの証明書環境の作成については、証明書管理機能を参照してください。
- ssl_err(必須)
SSLエラーコードが設定されます。必ず0で初期化する必要があります。
- ssl_err_detail(必須)
SSLエラー詳細コードが設定されます。必ず0で初期化する必要があります。
- ssl_timer(省略可)
SSLにおけるタイマ(秒単位)を設定します。省略時は、タイマが3600秒となります。InfoDirectoryサーバの応答に対する最大の待ち時間に使用されます。
【復帰値】
正常完了の場合には、復帰値としてセションハンドルを返します。セションハンドルは、獲得したLDAP構造体へのポインタです。
異常完了の場合には、復帰値としてNULLを返します。この場合、以下の状況が考えられます。
- LDAP構造体用のメモリが獲得できないなど、システムの資源が不足した。
- トレースを取得している場合には、トレースファイルのバックアップに失敗した。
SSLライブラリパッケージがインストールされていない。- SSL環境設定に誤りがある(必須項目が設定されていない)。
- SSLライブラリでエラーが発生した。
【注意事項】
- セションハンドル
これ以降に呼出す関数は、ここで取得したセションハンドルをパラメタに指定します。セションハンドルは、そのセションをクローズするまで有効です。
- SSLエラーコード
ldapssl_init()で発生したSSLライブラリのエラーコードは、ldapssl_error()で参照することができません。そのため、SSLENV構造体のメンバ(ssl_errとssl_err_detail)の値でチェックする必要があります。
SSLライブラリでエラーが発生していない場合は、0が設定されたままとなっています。SSLエラーコードの値については、SSLエラーコードを参照してください。
- 簡易認証について
SSLを使用した簡易認証を行う場合、認証はDN名とパスワードを使用して行われます。この場合、DN名による簡易認証とSSLによる安全な通信が可能になります。簡易認証については、ディレクトリサーバとのユーザ認証を参照してください。
- 証明書ベースの認証について
SSLを使用した証明書ベースの認証を行う場合、認証はldapssl_init()で指定されたSSL環境の証明書を使用する必要があります。この場合、証明書による認証とSSLによる安全な通信が可能になります。証明書ベースの認証については、ディレクトリサーバとのユーザ認証を参照してください。
- セションの共用について
オープンした1つのセションを複数のスレッドで共有し、各スレッドからLDAP要求を行うことはできません。スレッドを使用しLDAP要求を行う場合、各スレッドでldapssl_init()を呼び獲得したセションを使用し、それぞれのスレッドからLDAP要求を行ってください。
- スレッドの排他処理について
ldapssl_init()関数はスレッドアンセーフ関数です。この関数を複数のスレッドから同時に呼び出す際は、アプリケーション側で各スレッド間の排他処理を行ってください。排他を行わない場合、動作の保証はできません。
- 複数ホストの指定について
複数のホストを指定した場合は、1つ目のホストに対してCONNECTを行いソケットレベルで接続できない場合にのみ、2つ目以降のホストに対して接続を試みます。したがって以下のような場合には利用できません。
- 複数指定したホスト上に作成されているDSAの中から、起動しているDSAに対して接続する。
(1つ目のホストに接続してDSAが起動していなければ2つ目のホストのDSAに接続を試みる。)上記のようなDSA起動レベルの要件を満たすには、DSA起動確認(ldap_simple_bind()/ldap_simple_bind_s()/ldap_sasl_bind()/ldap_sasl_bind_s()の結果確認)を行うように、APIを使用してアプリケーション側で対応してください。
目次 索引 |