Apacheを使用してUbuntu11.04で実行されているSubversionサーバーがあり、LDAPSで認証をフックしようとしています。 LDAP(Sなし)に対して認証するようにApache構成ファイルを設定しましたが、セキュリティで保護されたバージョンでは問題が発生します。どうやらそれは証明書の問題です。残念ながら、私は証明書n00bです。
私は この質問 を見つけました。これは私が得ているのと同じ問題のようです。 httpd.confにLDAPVerifyServerCert off
行を入れてみましたが、うまくいきましたが、問題が発生した場合に証明書を無視したくないと思いますか?
私は考えます私たちのLDAPサーバーには自己署名証明書があります...多分あなたは私のためにそれを確認または拒否することから始めることができます。 openssl s_client -connect myldap.xyz.edu:636 -showcerts
を実行すると次のようになります。
CONNECTED(00000003)
depth=0 /CN=myldap.xyz.edu
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /CN=myldap.xyz.edu
verify error:num=27:certificate not trusted
verify return:1
depth=0 /CN=myldap.xyz.edu
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=myldap.xyz.edu
i:/DC=edu/DC=xyz/CN=myldap
-----BEGIN CERTIFICATE-----
[certificate here]
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=myldap.xyz.edu
issuer=/DC=edu/DC=xyz/CN=myldap
---
Acceptable client certificate CA names
/DC=edu/DC=xyz/CN=myldap
[...]
---
SSL handshake has read 13738 bytes and written 289 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: [...]
Session-ID-ctx:
Master-Key: [...]
Key-Arg : None
Start Time: 1335300252
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
この出力から(BEGIN行からEND行まで)証明書をコピーして/etc/ssl/certs/myldap.xyz.edu.pem
に貼り付け、c_rehash
を実行して、openssl s_client -connect myldap.xyz.edu:636 -CAfile /etc/ssl/certs/myldap.xyz.edu.pem -showcerts
を試しました。運がない。それは私に同じ正確なエラーを与えました。
これが私のhttpd.confファイルです:
ServerName svnserver.xyz.edu
<Location />
DAV svn
SVNParentPath /var/svn
SVNPathAuthz off
AuthName "Subversion server"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPBindDN "[email protected]"
AuthLDAPBindPassword "[password]"
AuthLDAPURL "ldaps://myldap.xyz.edu/DC=xyz,DC=edu?sAMAccountName?sub?(objectClass=*)" NONE
Require ldap-user user1 user2
</Location>
LDAPサーバーは、私が間違っていない限り、Windows Server2008で実行されているActiveDirectoryです。私は実際にそれを台無しにする立場にありません、そして私は私がそうする必要があるとは思いません-私たちはすでにそれをたくさんの場所でうまく使っています。クライアント側に何か問題があるはずです。私は運が悪かったので3日間グーグルを見回してきました。したがって、1)問題を解決する、2)解決策を使用して別の質問を指摘する、または3)チュートリアルへのリンクを提供できる人は誰でも大歓迎です。 :^)
編集:
Chutzの提案に従って実行したコマンドと結果は次のとおりです。
root@svnserver:~# openssl x509 -noout -issuer_hash < /etc/ssl/certs/myldap.xyz.edu.pem
505d0f30
root@svnserver:~# openssl x509 -noout -hash < /etc/ssl/certs/myldap.xyz.edu.pem
1045bba3
したがって、ハッシュと発行者ハッシュは異なります。つまり、自己署名されていません。私は今少しよく理解していると思います。最初は、エンティティ/CN=myldap.xyz.edu
と/DC=edu/DC=xyz/CN=myldap
が同じマシンを参照していても、2つの別個のものとして表示されていることに気づきませんでした。前者の証明書を持っていますが、後者の証明書が必要ですよね?上司が教えてくれることがわかります(彼はAD管理者です)。
編集#2:
発行者証明書を取得し、それを/etc/ssl/certs/myldap1.pem
に入れて、c_rehashを実行しました。ハッシュを確認したところ、myldap1.pem
は、505d0f30
証明書の発行者と同じ、myldap.xyz.edu
の件名と発行者の両方のハッシュを表示しました。そこで、openssl s_client
コマンドを再試行しました。最初は同じエラーセットが表示されましたが、-CAfile
オプションを追加することを思い出すと、代わりに
Verify return code: 10 (certificate has expired)
ああ、素晴らしい。結局のところ、私の証明書の有効期限は2009年です。> _ <少なくとも、解決方法がわかっている問題が発生しました。あなたのすべての協力に感謝します!
あなたの証明書は自己署名証明書ではありません。もしそうなら、次の「件名」と「発行者」は同じだったでしょう。
Server certificate
subject=/CN=myldap.xyz.edu
issuer=/DC=edu/DC=xyz/CN=myldap
これが、適切に検証されない理由である可能性があります。openssl s_client -showcerts
が画面に表示する証明書は、[〜#〜] ca [〜#〜]証明書ではありません。
再確認するために、次のコマンドを実行してみてください。
openssl x509 -noout -issuer_hash < /etc/ssl/....pem
openssl x509 -noout -hash < /etc/ssl/....pem
2つのハッシュが異なる場合、それは自己署名証明書ではありません。その場合(私が思うに)、唯一の選択肢は、発行元のCA証明書を何らかの方法で取得することです。 Active Directory管理者に依頼して、入手したときにすでに行ったことを実行してください。/etc/ssl/certsにダンプして、c_rehashを実行してください。
また、証明書を取得したら、openssl x509 -noout -hash
を実行して、LDAP証明書の-issuer_hash
と一致することを確認してください。