web-dev-qa-db-ja.com

LDAP + TLS-2台のマシンで異なる動作

マシン:

  1. debian wheezy
  2. suse 11

コマンド:

  1. _ldapsearch -ZZ -h ad.unsw.edu.au -x_
  2. Perl -we "use Net::LDAP; print Net::LDAP->new ('ad.unsw.edu.au')->start_tls(verify => 'require', capath => '/etc/ssl/certs/')->{errorMessage}"

結果:

  • マシン1、コマンド1:TLS:ホスト名がピア証明書のCNと一致しません
  • マシン1、コマンド2:動作
  • マシン2、コマンド1:動作します
  • マシン2、コマンド2:検証用のピアホスト名を判別できません

不整合を説明できず、コマンド2をマシン2で動作させたいのですが。何かアイデアはありますか?

straceの後、debian-ldapsearchは_/etc/ssl/certs/ca-certificates.crt_を調べており、suse-ldapsearchは何も調べていないように見えます。 debian -_Net::LDAP_は_/etc/ssl/certs/157753a5.?_(_AddTrust_External_Root.pem_)を見ており、suse -_Net::LDAP_は何も見ていない。

1
Jayen

Net/LDAP.pm0.43のNet::LDAPの233行目は

SSL_verifycn_scheme => "ldap",

debian wheezyは0.40を使用していますが、不安定から0.43にアップグレードすると同様に壊れます。

https://rt.cpan.org/Public/Bug/Display.html?id=70795

0
Jayen

Net :: LDAP :: start_tls()はPerl-ldap-0.43で壊れています。 0.44以降にアップグレードすると、コマンドラインは正常に機能するはずです。これは、変更ファイルに記載されています。

http://cpansearch.Perl.org/src/MARSCHAP/Perl-ldap-0.44/Changes

Bug Fixes
 * un-break certificate verification
1
nick

コマンドのLDAPSサーバーのホスト名(ad.unsw.edu.au)と同じサブジェクトの「CN」部分がリモートSSL証明書に含まれていることを確認する必要があります。

リモート証明書を確認するには、次を使用します。

echo ""|openssl s_client -connect ad.unsw.edu.au:636 |openssl x509 -noout -subject -dates -issuer

全詳細:

echo ""|openssl s_client -connect ad.unsw.edu.au:636 |openssl x509 -noout -text

発行者のルート証明書がLDAP( OpenLDAP SSL ドキュメントを参照)およびPerl SSLキーストア( IO :: Socket :: SSL を参照)にインポートされ、信頼されていることを確認します。自己署名証明書の場合は、その証明書を信頼できるSSLキーチェーンに追加する必要があります。

1