- PR -

LDAPのSSL設定方法

1
投稿者投稿内容
けんしろう
会議室デビュー日: 2003/10/09
投稿数: 10
投稿日時: 2005-04-11 17:57
毎々お世話になります。
現在JavaでLDAP認証を行うアプリケーションの開発を行っています。
そこで、LDAPサーバとJavaアプリケーションサーバの通信をSSLを
用いて行うようにしたいのですが、方法がわかりません。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jndi/jndi-ldap-gl.html

を参考にしてプログラムを組んでみたのですが、
SSLHandshakeException [No trusted certificate found]
がでてしまい、うまくいきません。
ご教授よろしくお願いいたします。

--------------------------------------------------------------

DirContext ctx = null;
Hashtable env = new Hashtable() ;

env.put(Context.INITIAL_CONTEXT_FACTORY, contextFactory);
env.put(Context.PROVIDER_URL, "ldaps://" + ldapServerName
+ "/uid=" + userId + rootContext);
env.put(Context.SECURITY_PRINCIPAL, "uid=" + userId + rootContext );
env.put(Context.SECURITY_CREDENTIALS, passwd);
env.put(Context.SECURITY_AUTHENTICATION, "EXTERNAL");
env.put(Context.SECURITY_PROTOCOL, "ssl");

ctx = new InitialDirContext(env);

--------------------------------------------------------------


OS : Windows 2000
AP : Tomcat 4.1
Java : jdk 1.4.2
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2005-04-11 19:11
けんしろうさんが参考にしたURLに以下のような文章がありますが
この部分を参考にしてはどうでしょうか?

コード:
java.naming.security.protocol 

このプロパティの値は、使用するプロバイダ用のセキュリティプロトコルを
指定する文字列です。次の値が、このプロパティ用に定義されています。
ssl
Secure Sockets Layer バージョン 3.0 を使用します。
このプロパティが ssl に設定されている場合、
プロバイダは SSL ソケットを使用する必要があります。
SSL ソケットを使用できない場合は、ConfigurationException を
スローする必要があります。上記の値リストに加え、
プロバイダは他のセキュリティプロトコルをサポートすることもできます。
ただし、そのようなプロバイダ固有のプロトコルを、
すべてのプロバイダがサポートするわけではありません。
このプロパティが、プロバイダが認識またはサポートしないセキュリティプロトコルに
設定される場合、ConfigurationException がスローされます。

java.naming.ldap.factory.socket プロパティを設定すると、
このプロパティにより識別されるソケットファクトリは、
このプロトコル設定に適したソケットを作成する必要があります。
たとえば、セキュリティプロトコルが ssl に設定されると、
ソケットファクトリは SSL に準拠したソケットを作成する必要があります。

このプロパティを設定しない場合には、セキュリティプロトコルを
使用しないことがデフォルトになります。

LDAP プロバイダの開発者は、SSL 接続を待機しないポート上のサーバへの接続に
SSL を使用するなら、ソケットがハングアップすることを明記しておく必要が
あります。同様に、SSL 接続を待機するサーバへの接続にプレーンなソケットを
使用してもハングアップが引き起こされます。
これは、実装によっては訂正が実行されることはあるが、
他の実装の場合には訂正を実行する必要はない、というプロトコルの特性です。
ただし、プロバイダのドキュメント内で、この動作をユーザに説明する必要があります。
SSL の使用方法については、SSL を参照してください。

次に例を示します。

env.put(Context.SECURITY_PROTOCOL, "ssl");
これは、サーバとの通信に SSL 準拠のソケットを使用することを示します。



後、JavaにはLDAPソフトとしてJXplorer
というものがあり、SSLの設定なんかもしっかりコーディングされてますので
ここのソースを参考にしてみてはどうでしょうか?

[ メッセージ編集済み 編集者: いっきゅう 編集日時 2005-04-11 19:18 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-04-11 19:13
http://www.mail-archive.com/tomcat-user@jakarta.apache.org/msg99233.html
似たような現象が検索で引っかかりましたので、参考になれば。
かしん
常連さん
会議室デビュー日: 2004/08/27
投稿数: 25
お住まい・勤務地: 窓際
投稿日時: 2005-04-12 09:20
引用:

けんしろうさんの書き込み (2005-04-11 17:57) より:

SSLHandshakeException [No trusted certificate found]
がでてしまい、うまくいきません。



確認してませんが、上記のエラーメッセージを見る限り、
SSL通信先のLDAPサーバの証明書が、指定しているローカルのjksキーストア内に存在しないのではないでしょうか。(サーバ認証に失敗している)
特にパスを指定をしていない場合、デフォルトのキーストアになります。

パスの指定方法
System.setProperty("javax.net.ssl.keyStore", keyStoreLocation);
1

スキルアップ/キャリアアップ(JOB@IT)