2

Windows php ローカル テスト環境で、安全な接続でリモート LDAP サーバーにクエリを実行しようとしています。LDAP ブラウザ アプリケーションを使用でき、リモート サーバーに正常に接続できるため、アクセス権を正しく付与する必要があると思います。また、「telnet remoteserverurl.com 636」を実行すると、コマンド プロンプトに空白の画面が表示されるので、少なくとも接続しています。しかし、次の .php コードでは、バインド時にエラーが発生します。「PHP 警告: ldap_bind(): サーバーにバインドできません: 行内の LDAP サーバーに接続できません...」

Linux サーバーでも同じコードが機能します。安全な LDAP 接続のためにローカルの php 環境に欠けている LDAP ライブラリがあると思いますか? とにかく、ここにコードがあります:

$ds=ldap_connect("ldaps://serveraddress.com", "636");  // remote server
//$ds=ldap_connect("ldap://localhost", 389);  // works
//putenv('LDAPTLS_REQCERT=never');//doesn't help with secure ldap
//ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); //works for local LDAP server (Open LDAP)
$r=ldap_bind($ds, "cn=xxx,ou=proxy,o=xxx", "passwordxxxx");//throws error for remote

何か案が?ありがとう!

4

3 に答える 3

7

これは古いことを知っていますが、最近、Windows 2008 および 2012 (IIS 7.x および 8.x、PHP 5.6) で wordpress 3.x および 4.x を使用しているときに、同様の問題に遭遇しました。

wordpressのldap認証用のプラグインを作成しました-LDAPS(ポート636で動作するldapセキュア)を取得しようとしていたように。

いくつかのこと:

  1. PHP LDAPS を使用する場合、ドキュメントには、LDAP サーバーの前にldaps://. そのserver1.domain.comため、LDAPS の場合は...注意してください ( http://php.net/manual/en/function.ldap-connect.phpldaps://server1.domain.com/ごとに) 接続方法にポートを渡す必要はまったくありません。これは、元の質問の提出内容と非常によく似ています。
  2. Windows PHP ライブラリは、開いている LDAP 構成ファイル ( ldap.conf) を で検索するようにハードコーディングされていますC:\openldap\sysconf\ldap.conf
  3. 上記の #2 で説明したテキスト ファイルを作成します。これは、証明書ストアを指す場所です。このファイルを作成したら、入れることができTLS_REQCERT neverます...しかし、これは証明書が検証されず、すべてが自動的に(本質的に)信頼されることを意味します-テスト用にのみ使用する必要があります...本番用ではありません。TLS / SSLセキュリティ対策の一部を無効にするため(つまり、接続していると思われるホストと実際に話していることを証明します)。
  4. インターウェブで人気のある (そしておそらく誤った) 提案であると思われる安全でないTLS_REQCERT neverオプションの代わりに... curl などで使用される一般的な公開認証局リストを入手してください - http://curl.haxx.se/ca/cacert.ペム。これは基本的に、公開認証局の信頼のために Firefox に付属するものです (つまり、Firefox をインストールして、証明書の警告などなしにhttps://amazon.comにアクセスできる理由です)。
  5. ダウンロードした cacert.pem ファイル (一連の証明書ハッシュと説明を含む単なるテキスト ファイル) を PHP インストールと共にドロップします。たとえば、php install in でダンプしたとしc:\php5\cacert.pemます。あなたの場所は異なるかもしれませんが、アクセスできる場所に置き、関連しているためphpのものとグループ化されます. cacert.pemファイルの内容がわかるように、ファイル の内容のショットをいくつか示します。サンプル cacert.pem コンテンツ cacert.pem のハッシュの例
  6. を編集し、図のようC:\openldap\sysconf\ldap.confにコマンドの行を追加しTLS_CACERTます。 サンプル ldap.conf ファイル
  7. これにより、最新の Web ブラウザーなどと同じように、公開された有効な証明書を信頼できるようになります。内部で発行された証明書または自己署名証明書の信頼の問題は修正されないことに注意してください。ただし、独自の証明書ハッシュを cacert.pem ファイルに追加することで、これも簡単に行うことができます。
  8. 別の証明書を cacert.pem ファイルにトラステッドとして追加するには、問題の証明書のコピーを取得するだけです ( .cerbase64 形式でエクスポートする必要があるだけです - 秘密鍵は必要なく、拡張子は実際には問題ではありません)。 - ハッシュ出力である必要があります)。正しい形式でエクスポートした場合は、証明書ファイルを開いてハッシュを確認できます。これは、Thawte サーバー CA の例のスクリーンショットに似ています (ただし同一ではありません)。エクスポートしたハッシュを cacert.pem ファイルに追加するだけで、信頼されます。巧妙になりたい場合は、代わりに、プライベート発行の証明書の発行証明書をインポートできます。これにより、インポートされた証明書によって署名された証明書が信頼されます。疑わしい場合は、提示された証明書をいつでもインポートできます。
  9. このような変更を行った後、Web サーバーを再起動するのが最善であることがわかり (iis マネージャー -> Web サーバー ノード -> 再起動オプション)、php を使用するすべてがリセットされました。
  10. 余分なクレジットとして、php.ini ファイルを編集し、cacert.pem ファイルへのフル パスを行に入力することで、同じ cacert.pem ファイルを curl 実装に使用できますcurl.cainfo =
  11. 繰り返しますが、これが古い投稿であることは承知していますが、LDAPS を介して wordpress を eDirectory に接続する際に学んだことを共有したいと思いました。
于 2014-11-12T03:39:59.520 に答える
1

PHP ライブラリを確認する

<?php phpinfo() ?>

LDAP クライアントを使用して接続できるので、LDAP が SSL を実行していることを期待します

SSL証明書をコピーしましたか?

  1. サーバー証明書を sys:/php5/cert ディレクトリにコピーします。この場所は php.ini ファイルで設定できます。

  2. ホスト名引数に「ldaps://」プレフィックスを使用するか、ldap_connect 呼び出しのポート番号引数に値 636 を使用します。

于 2013-02-11T15:30:17.537 に答える
0

私はこれを機能させました!@s.lendersの「回答」(ありがとう)は、証明書の問題を指摘しましたが、実際には証明書の問題でした。削除された LDAP サーバーの証明書が期限切れの状態でした。デスクトップ アプリケーション (SoftTerra LDAP ブラウザー) を使用して接続した場合でも、そのことについて警告が表示されました。そのため、証明書を Windows 証明書にインポートしました。SoftTerra LDAP ブラウザ アプリケーションにより、そのオプションが許可されました。そして、出来上がり!SSL LDAP 呼び出しが機能しています。

**更新:上記の証明書が役に立ったかどうかはわかりませんが、ここで私を助けたより具体的なものがあります:php LDAPライブラリが特定のconfファイルを探すようです。ハードコーディング: C\OpenLDAP\sysconf\ldap.conf ?! したがって、基本的にこの情報に従って新しいフォルダーを作成し、「TLS_REQCERT never」だけを含む ldap.conf ファイルを配置しました。テストしました..このファイルを削除すると、セキュア LDAP クエリが機能せず、「バインド」ステップで失敗します。これは自分のワークステーションでのみ行われるため、conf の「never」に満足していることに注意してください。

また、IIS 7 以降を実行している Windows 7 を使用していることにも注意してください **

これが誰かに役立つことを願っています。

于 2013-02-12T17:08:40.447 に答える