web-dev-qa-db-ja.com

ApacheLDAPSアクセスに関する証明書の問題

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年です。> _ <少なくとも、解決方法がわかっている問題が発生しました。あなたのすべての協力に感謝します!

3
DLosc

あなたの証明書は自己署名証明書ではありません。もしそうなら、次の「件名」と「発行者」は同じだったでしょう。

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と一致することを確認してください。

1
chutz