セキュア LDAP の接続テスト

この機能に対応しているエディション: Frontline Standard、Frontline Plus、Business Plus、Enterprise Standard、Enterprise Plus、Education Fundamentals、Education Standard、Education Plus、Enterprise Essentials Plus。エディションを比較する

LDAP クライアントをセキュア LDAP サービスに接続する前に、必要に応じて ldapsearchADSIldp.exe といったツールを使用して簡単な接続テストを行うことができます。これらのツールは、LDAP クライアントをサービスに接続しようとしてエラーが発生した場合のトラブルシューティングにも使用できます。

以下で説明するテストを行うことで、設定の問題の有無や一般的なエラー メッセージ、問題の解決方法を確認できます。

この記事の内容は次のとおりです。

注: この操作中に Google Workspace サポートまたは Cloud Identity Premium サポートに連絡する必要がある場合は、必ずコマンドの出力を保存してください。また、出力したデータは必ず個人情報を削除してからサポートチームにご提示ください。

接続を確認して LDAP クエリを実行する

Google 管理コンソールでセキュア LDAP サービスを設定したら、3 つのシンプルなツール、ldapsearchADSIldp.exe のいずれかを使用してセキュア LDAP との接続を確認します。詳細と手順については、下記をご覧ください。

ldapsearch

コマンドラインから ldapsearch ユーティリティを使用して、基本的な LDAP クエリを作成します。LDAP クエリが正常に実行された場合は、LDAP クライアントと基盤となっている TLS セッションおよび TCP 接続が意図したとおりに動作しています。

ldapsearch で接続をテストするには:

  1. LDAP クライアントを追加するの手順に沿って、LDAP 設定を作成し、証明書をダウンロードします。

    注: シンプルな環境でテストできるよう、LDAP クライアントのアクセスを承認する組織部門にはユーザーがいるようにしてください。

  2. LDAP クエリを実行します。この例では、特定のユーザーにクエリを実行します(詳しくは、OpenLDAP ldapsearch をご覧ください)。

    LDAPTLS_CERT={crt_file} LDAPTLS_KEY={key_file} ldapsearch -H ldaps://ldap.google.com:636 -b dc={domain},dc={domain} '(mail={user_email})'

    プレースホルダを次のように置き換えます。

    • {crt_file}: .crt ファイルの名前
    • {key_file}: .key ファイルのファイル名
    • {domain} ドメイン名の各部分。たとえば、example.com は「dc=example,dc=com」になります。
    • {user_email}: ドメイン内のユーザーのメインのメールアドレス。

ldapsearch の使用に関する注意事項

  • BindDN 値が指定されていない場合、ldapsearch は鍵と証明書を使用して検索を承認します。
  • BindDN 値が 管理コンソールで生成した LDAP ユーザー名の場合、ldapsearch は管理コンソールで構成された LDAP クライアントの権限を使用します。

    ldapsearch -H ldaps://ldap.google.com:636 -b dc={domain},dc={domain} -D {ldap_access_credentials_username} -W '(mail={user_email})

  • BindDN 値が Workspace ユーザーのメールアドレスまたは LDAP 識別名の場合、ldapsearch はそのユーザーの認証情報を使用して、権限に基づいて検索を行います。

    ldapsearch -H ldaps://ldap.google.com:636 -b dc={domain},dc={domain} -D {workspace_username@domain} -W '(mail={user_email})'

ldapsearch を stunnel で使用する

導入に stunnel を使用する必要がある場合は、次の手順を行います。

  1. 管理コンソールで アクセス認証情報を生成し、ldapsearch に必要なユーザー名とパスワードを生成します。
  2. 次のコマンドを使用します。

    ldapsearch -x -D "{username}" -w {password} -H ldap://{stunnel_host}:{stunnel_port} -b dc={domain},dc={domain} '(mail={user_email})'

    プレースホルダを次のように置き換えます。

    • {username}: 管理コンソールで生成された認証情報のユーザー名
    • {password}: 管理コンソールで生成された認証情報のパスワード
    • {stunnel_host} : ネットワーク内で stunnel を実行しているマシンの IP アドレスまたはホスト名。
    • {stunnel_port} : stunnel が動作しているポート(stunnel の設定を確認してください)
    • {user_email} ドメイン内のユーザーのメインのメールアドレス

ldapsearch コマンドが正常に終了した場合

ldapsearch コマンドが正常に終了すると、ユーザーとそのメールアドレス(LDAP クライアント作成時に指定したもの)のリストが LDIF 形式で出力されます。

次に例を示します。

# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.com
dn: dc=example,dc=com
objectClass: top
objectClass: domain
objectClass: dcObject
dc: example

# admin-group, Groups, example.com
dn: cn=admin-group,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
objectClass: posixGroup
cn: admin-group
displayName: admin-group
description:
gidNumber: 12345
member: uid=admin,ou=Users,dc=example,dc=com
memberUid: admin
googleAdminCreated: FALSE


# example-user, Users, example.com
dn: uid=example-user,ou=Users,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
uid: example-user
googleUid: example-user
posixUid: example-user
cn: example-user
cn: FirstName LastName
sn: FirstName
displayName: FirstName LastName
givenName: FirstName
mail: example-user@example.com
uidNumber: 12345
gidNumber: 12345
homeDirectory: /home/example-user
loginShell: /bin/bash
gecos:

発生する可能性のあるエラー

  • OpenLDAP クライアントおよびライブラリが SNI のサポートなしでコンパイルされる

    LDAP クライアント(ここでは OpenLDAPOpenLDAP)が SNI(Server Name Indication)をサポートしている必要があります。SNI を利用できない場合、次のようなエラーが表示されることがあります。

    SASL/EXTERNAL authentication started

    ldap_sasl_interactive_bind_s: Unknown authentication method (-6)
    additional info: SASL(-4): no mechanism available:

    推奨事項:
    • macOS をご使用の場合、SASL はデフォルトで有効になっています。オプション「-x」を使用すると無効にできます。
    • ldapsearch-d5 オプションを追加して、出力に次の行があるか確認します。

      TLS certificate verification: depth: 0, err: 18, subject: /OU=No SNI provided; please fix your client.
  • ldapsearch でステータス 0(成功)が返されるのにユーザーが出力されない

    ldapsearch オプション -x(SASL 認証を使用)とクライアント証明書を指定すると、認証は成功しますがドメイン内のユーザーリストは出力されません。

    推奨事項: オプション -x を削除して、もう一度お試しください。

ADSI 編集(Windows)

  1. ldp.exe(Windows)の手順 1 ~ 11 を行ってクライアント証明書をインストールします。
  2. [操作] > [接続先] に移動します。
  3. 次の接続設定を入力します。

    名前: 接続の名前を入力します(例: Google LDAP)。
    接続ポイント: [識別名または名前付けコンテキストを選択または入力する]
    ドメイン名を DN 形式で入力します(例: example.com の場合は dc=example,dc=com)。

    コンピュータ: [ドメインまたはサーバーを選択または入力する]
    ldap.google.com

    SSL ベースの暗号化を使用する: オン
  4. [Advanced...] をクリックし、次の詳細を入力します。

    Specify credentials: チェックされている
    Username: 管理コンソールで生成したアクセス認証情報のユーザー名
    Password: 管理コンソールで生成したアクセス認証情報のパスワード
    Port Number: 636
    Protocol: LDAP
    Simple bind authentication: チェックされている
  5. [OK] をクリックし、再度 [OK] をクリックします。
  6. 接続に成功すると、ベース DN のディレクトリの内容が右側のパネルに表示されます。

ldp.exe(Windows)

  1. OpenSSL をインストールします。
  2. 証明書ファイルとキーファイルを 1 つの PKCS12 形式のファイルに変換します。コマンド プロンプトで次のように入力します。

    openssl pkcs12 -inkey ldap-client.key -in ldap-client.crt -export -out ldap-client.p12

    出力ファイルを暗号化するためのパスワードを入力します。
  3. [コントロール パネル] に移動します。
  4. 検索ボックスで「証明書」を検索して [ユーザー証明書の管理] をクリックします。
  5. [操作] > [すべてのタスク] > [インポート] に移動します。
  6. [現在のユーザー] を選択し、[次へ] をクリックします。
  7. [Browse] をクリックします。
  8. ダイアログ ボックスの右下にあるファイル形式のプルダウン メニューから、[Personal Information Exchange (&ast;.pfx;&ast;.p12)] を選択します。
  9. 手順 2 の ldap-client.p12 ファイルを選択して [開く] をクリックし、[次へ] をクリックします。
  10. 手順 2 で入力したパスワードを入力し、[次へ] をクリックします。
  11. [個人] 証明書ストアを選択し、[次へ] をクリックしてから [完了] をクリックします。
  12. Ldp.exe を実行します。
  13. [接続] > [接続] をクリックします。
  14. 次の接続情報を入力します。

    サーバー: ldap.google.com
    ポート: 636
    コネクションレス: オフ
    SSL: オン
  15. [OK] をクリックします。
  16. [表示] > [ツリー] を選択します。
  17. ベース DN を入力します。これは DN 形式のドメイン名です。(例: example.com の場合は dc=example,dc=com)。
  18. [OK] をクリックします。
  19. 接続に成功すると、ベース DN のディレクトリの内容が右側のパネルに表示されます。

必要に応じて基本的な接続テストを行う

接続を確認して LDAP クエリを実行するで正常な結果が得られない場合は、以下の手順で接続テストを行います。ldapsearch で返された結果に期待されるユーザーが含まれておらず、基盤の TLS セッションの成否が不明な場合は、OpenSSL クライアントを使用して、OpenLDAP が使用するネットワーク層が想定どおりに動作していることを確認します。

基本的な接続テストを行うには:

  1. ご使用のオペレーティング システムに応じた openssl クライアント ユーティリティをインストールします。

    ほとんどの GNU/Linux ディストリビューションで、パッケージ名「openssl」が使用されます。詳しくは、他のオペレーティング システムについてのページをご覧ください。

  2. openssl クライアントを使用してセキュア LDAP サービスに手動で接続します。

    openssl s_client -connect ldap.google.com:636
    

    openssl s_client の出力の末尾に次の行があれば、SSL ネゴシエーションは成功しています。

    Verify return code: 0 (ok)
    

発生する可能性があるエラー

OpenSSL クライアントとライブラリが SNI(Server Name Indication)をサポートしていない

接続テスト中に次の出力が返されることがあります。

Verify return code: 18 (self signed certificate)

セキュア LDAP サービスには、SNI(Server Name Indication)を使用して TLS セッションをサポート、開始する TLS クライアントが必要です。TLS クライアントが SNI をサポートしていない場合、TLS サーバー(ldap.google.com)が返す自己署名証明書は CA 検証チェックをパスしないことから、SNI が必要であることがわかります。

この動作は、OpenSSL クライアントの出力の先頭付近に次の行があるか調べることで確認できます。

depth=0 OU = "No SNI provided; please fix your client.", CN = invalid2.invalid

このエラーの原因として、OpenSSL のバージョンが SNI をサポートしていないこと、またはアプリケーションが使用する OpenSSL ライブラリで SNI が明示的に無効になっていることが考えられます。

接続が拒否された

次の出力が返された場合({timestamp} はマイクロ秒単位の UNIX タイムスタンプ)、TCP 接続が拒否されているために TLS ネゴシエーションを開始できません。

{timestamp}:error:0200206F:system library:connect:Connection refused:crypto/bio/b_sock2.c:110:
{timestamp}:error:2008A067:BIO routines:BIO_connect:connect error:crypto/bio/b_sock2.c:111:connect:errno=111

この場合は、次のような原因が考えられます。

  • ローカルマシン上のアプリケーション レベルまたはシステムレベルのファイアウォール
  • 同じ物理ネットワークまたは上流ネットワーク上のファイアウォール

どのホストが接続を拒否しているかを調べるには、tcptraceroute を使用します(例: tcptraceroute ldap.google.com 636)。