09-OpenLDAP暗号化転送構成

16448 ワード

OpenLDAP暗号化転送構成(CAサーバとopenldapサーバが異なる)


ビューを読む

  • 環境準備
  • CA証明書サーバ構築
  • OpenLDAPサービス側とCA統合
  • OpenLDAPクライアント構成
  • クライアントテスト検証
  • 故障処理
  • 1.環境準備

  • サーバ計画
  • ホスト
    システムバージョン
    IPアドレス
    ホスト名
    じかんどうき
    ファイアウォール
    SElinux
    ldapサービス側
    Centos 6.9インストールの最小化
    192.168.244.17
    mldap01.gdy.com
    同期が必要
    閉じる
    閉じる
    ldapクライアント
    Centos 6.9インストールの最小化
    192.168.244.18
    test01.gdy.com
    同期が必要
    閉じる
    閉じる
    CA証明書サーバ
    Centos 6.9インストールの最小化
    192.168.244.23
    mldap01.gdy.com
    同期が必要
    閉じる
    閉じる
  • 本環境は02-openldapサービス側インストール構成に従って最も基本的な環境を構築し、ユーザーデータは02-openldapサービス側インストール構成の第10ステップ
  • から来ている.

    2.CA証明書サーバー構築

  • OpenSSLソフトウェア
    [root@ca ~]# rpm -qa | grep openssl
    openssl-1.0.1e-57.el6.x86_64
  • をインストールする
  • CAセンタは、以下のコマンドで自身の秘密鍵を生成する.
    [root@ca ~]# cd /etc/pki/CA/
    [root@ca CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
    Generating RSA private key, 2048 bit long modulus
    .................................................+++
    ......................+++
    e is 65537 (0x10001)
  • CAは自己公開鍵を発行し、命令は以下の通りである.
    [root@ca CA]# openssl  req -new -x509 -key private/cakey.pem -out cacert.pem -days 36500
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:Shanghai
    Locality Name (eg, city) [Default City]:Shanghai
    Organization Name (eg, company) [Default Company Ltd]:GDY
    Organizational Unit Name (eg, section) []:Tech
    Common Name (eg, your name or your server's hostname) []:ca.gdy.com
    Email Address []:[email protected]
    において、各フィールドの意味は以下の通りである.
  • Country Name(2 letter code):2文字の国番号
  • State or Province Name(full name)[]:省
  • Locality Name(eg,city)[Default City]:市または地域
  • Organization Name(eg,company)[Default Company Ltd]:会社名
  • Organizational Unit Name(eg,section)[]:Tech
  • などの部門名
  • Common Name(eg,your name or your server's hostname)[]:OLサーバのドメイン名やIPアドレスなどの汎用名.
  • Email Address[]:メールアドレス
  • データベースファイルおよび証明書シーケンスファイルを作成します.コマンドは、次の
    [root@ca CA]# ls -lh
    total 20K
    -rw-r--r--  1 root root 1.4K Jun  1 17:04 cacert.pem
    drwxr-xr-x. 2 root root 4.0K Mar 23  2017 certs
    drwxr-xr-x. 2 root root 4.0K Mar 23  2017 crl
    drwxr-xr-x. 2 root root 4.0K Mar 23  2017 newcerts
    drwx------. 2 root root 4.0K Jun  1 17:01 private
    [root@ca CA]# touch serial index.txt
    [root@ca CA]# echo "01" > serial 
    ディレクトリファイルの用途です.
  • cacert.pem:CA自己証明書ファイル(必要に応じて変更可能)
  • certs:クライアント証明書格納ディレクトリ
  • crl:CA取り消しクライアント証明書格納ディレクトリ
  • newcerts:新しい証明書格納ディレクトリ
  • を生成
  • index.txt:クライアント証明書情報
  • を格納する
  • serial:クライアント証明書を識別するためのクライアント証明書番号(番号はカスタマイズ可能).
  • private:CA自身の秘密鍵を格納ディレクトリ
  • OpenSSLコマンドによりルート証明書情報を取得し、コマンドは以下の
    [root@ca CA]# openssl x509 -noout -text -in /etc/pki/CA/cacert.pem
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 14795263444614255073 (0xcd5355b6d68e11e1)
        Signature Algorithm: sha1WithRSAEncryption
            Issuer: C=CN, ST=Shanghai, L=Shanghai, O=GDY, OU=Tech, CN=ca.gdy.com/[email protected]
            Validity
                Not Before: Jun  5 07:06:49 2018 GMT
                Not After : May 12 07:06:49 2118 GMT
            Subject: C=CN, ST=Shanghai, L=Shanghai, O=GDY, OU=Tech, CN=ca.gdy.com/[email protected]
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (2048 bit)
                    Modulus:
                        00:ba:0a:fa:87:16:4b:75:94:d6:98:a5:75:f5:93:
                        44:60:0c:c4:bc:d6:5e:3e:be:4c:29:41:36:5c:2d:
                        b8:c8:1e:97:10:38:0a:2d:60:0e:d9:38:5f:f5:7b:
                        ab:af:b6:35:d5:48:c0:50:c3:1e:17:5b:a8:c6:f8:
                        75:55:c7:0b:fb:7e:68:fc:a6:77:f9:7a:9a:d0:8f:
                        5a:c6:ca:c7:a7:b5:34:d4:ca:13:d6:3c:b6:aa:86:
                        7e:8f:17:24:f7:ce:b0:5f:11:3b:8a:6a:40:50:cc:
                        5c:b5:cc:b3:e2:17:be:f6:ab:f6:ae:6a:2f:58:88:
                        5f:12:65:58:cb:17:5e:00:51:ec:31:64:a7:d6:02:
                        63:b3:63:cc:00:87:49:67:a2:60:a0:82:ed:a8:08:
                        c5:77:c1:0a:04:42:9d:f2:c5:31:e7:b4:ee:67:f7:
                        28:05:27:a0:b3:06:b0:89:b5:8d:3c:14:79:6c:30:
                        ca:d3:90:8f:e5:72:61:13:c3:4d:bc:5a:80:9f:85:
                        3a:20:4c:9b:0d:bb:c0:bd:d5:98:65:0b:0e:29:e2:
                        45:ed:c2:e8:1c:74:e7:94:9b:07:49:28:06:13:44:
                        98:b5:a9:e3:46:59:99:77:e8:12:a8:91:38:bc:9f:
                        ef:48:b2:8f:58:8d:7c:a3:ba:fb:4f:e3:7b:8c:65:
                        20:6b
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Subject Key Identifier: 
                    FA:19:3B:1E:FA:2A:FE:CD:F7:CA:A3:D4:31:08:52:AF:72:08:ED:1D
                X509v3 Authority Key Identifier: 
                    keyid:FA:19:3B:1E:FA:2A:FE:CD:F7:CA:A3:D4:31:08:52:AF:72:08:ED:1D
    
                X509v3 Basic Constraints: 
                    CA:TRUE
        Signature Algorithm: sha1WithRSAEncryption
            38:9c:52:b7:a2:d8:03:60:ec:78:2a:4b:9b:b8:02:10:44:09:
            39:d3:e9:d0:b2:9a:bc:d5:2d:1d:a1:92:12:d7:06:c7:2c:c7:
            27:95:a5:8d:f1:db:e5:7b:09:d4:0e:a1:70:d9:d9:59:7b:54:
            5a:a0:19:b8:d4:ec:36:23:cf:8f:c1:a3:c3:a6:99:a6:3e:dc:
            1c:cc:8a:53:20:07:a6:f7:5d:c2:9d:7f:e2:ef:07:eb:f3:ca:
            c2:9b:6d:47:f1:34:70:e7:56:44:db:2d:8a:46:26:21:ce:99:
            62:21:b2:05:51:86:8c:ba:25:9e:3b:81:e8:0f:68:73:21:75:
            d7:64:c2:ed:4a:3b:4a:9d:74:da:ca:3a:4f:df:1f:c1:a5:88:
            6e:08:a8:2f:9b:f8:75:00:0d:53:6b:be:24:97:f8:03:6a:69:
            87:56:ec:57:ae:85:a4:9c:71:fa:dd:f8:e6:d9:8c:69:d8:ab:
            66:6e:da:c8:5d:2f:a7:34:b5:17:65:79:3e:02:d9:81:64:6e:
            37:9d:e6:26:59:18:73:83:f6:06:c4:a0:ff:7e:90:e2:a3:5f:
            a7:01:41:c0:e6:bc:c8:ce:b6:19:0a:78:19:f6:16:9d:45:9b:
            e3:46:9c:6f:ca:d5:29:61:4b:38:95:e9:65:b5:62:8d:78:c4:
            83:8b:f8:10
  • である.
  • 自作CA完成
  • 3.OpenLDAPサービスとCAの統合

  • openldapサーバ上で鍵
    [root@mldap01 ~]# mkdir -pv /etc/openldap/ssl
    mkdir: created directory `/etc/openldap/ssl'
    [root@mldap01 ~]# cd /etc/openldap/ssl
    [root@mldap01 ssl]# (umask 077; openssl genrsa -out ldapkey.pem 1024)
    Generating RSA private key, 1024 bit long modulus
    ............................++++++
    ...++++++
    e is 65537 (0x10001)
    [root@mldap01 ssl]# ls -lh
    total 4.0K
    -rw------- 1 root root 887 Jun  5 15:26 ldapkey.pem
  • を生成する.
  • OpenLDAPサービス側はCAに証明書署名要求を申請し、命令は以下の
    [root@mldap01 ssl]# openssl req -new -key ldapkey.pem -out ldap.csr -days 36500
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:Shanghai
    Locality Name (eg, city) [Default City]:Shanghai
    Organization Name (eg, company) [Default Company Ltd]:GDY
    Organizational Unit Name (eg, section) []:Tech
    Common Name (eg, your name or your server's hostname) []:mldap01.gdy.com
    Email Address []:[email protected]
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
  • である.
  • CAサーバは、CAサーバがopenldapサーバと同一でない場合、上記ステップで生成するldapを確認して発行する.csrファイルはCAサーバ署名
     openldap ldap.csr CA 
    [root@mldap01 ssl]# scp ldap.csr root@ca:/root/   
    The authenticity of host 'ca (192.168.244.23)' can't be established.
    RSA key fingerprint is 1a:8a:57:12:ee:68:91:a4:bd:c5:48:f1:03:a9:5f:9c.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'ca,192.168.244.23' (RSA) to the list of known hosts.
    root@ca's password: 
    ldap.csr                                                                                                                      100%  696     0.7KB/s   00:00  
    
    [root@ca ~]# openssl ca -in ldap.csr -out ldapcert.pem -days 36500
    Using configuration from /etc/pki/tls/openssl.cnf
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 1 (0x1)
            Validity
                Not Before: Jun  5 10:00:26 2018 GMT
                Not After : May 12 10:00:26 2118 GMT
            Subject:
                countryName               = CN
                stateOrProvinceName       = Shanghai
                organizationName          = GDY
                organizationalUnitName    = Tech
                commonName                = mldap01.gdy.com
                emailAddress              = [email protected]
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    26:1C:25:DA:AD:A0:E3:72:43:CD:AC:7F:77:9E:37:BD:1B:EF:1A:FE
                X509v3 Authority Key Identifier: 
                    keyid:CB:DE:C2:81:45:FE:B3:10:02:95:DA:49:16:F6:FA:03:13:F6:3E:2E
    
    Certificate is to be certified until May 12 10:00:26 2118 GMT (36500 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    
     ldapcert.pem ca Openldap /etc/openldap/ssl 
    [root@ca ~]# scp ldapcert.pem /etc/pki/CA/cacert.pem [email protected]:/etc/openldap/ssl/
    The authenticity of host '192.168.244.17 (192.168.244.17)' can't be established.
    RSA key fingerprint is 1a:8a:57:12:ee:68:91:a4:bd:c5:48:f1:03:a9:5f:9c.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.244.17' (RSA) to the list of known hosts.
    [email protected]'s password: 
    ldapcert.pem                                                                                                                  100% 3828     3.7KB/s   00:00    
    cacert.pem                                                                                                                    100% 1391     1.4KB/s   00:00
  • にアップロードされます.
  • OpenLDAP TLS/SASL配備
     
    [root@mldap01 ssl]# chown ldap.ldap -R /etc/openldap
    [root@mldap01 ssl]# chmod -R 0400 /etc/openldap/ssl/*
    
     OpenLDAP , 
    [root@mldap01 ~]# vim /etc/openldap/slapd.conf
    #TLSCACertificatePath /etc/openldap/certs
    #TLSCertificateFile "\"OpenLDAP Server\""
    #TLSCertificateKeyFile /etc/openldap/certs/password
    TLSCACertificateFile /etc/openldap/ssl/cacert.pem
    TLSCertificateFile /etc/openldap/ssl/ldapcert.pem
    TLSCertificateKeyFile  /etc/openldap/ssl/ldapkey.pem
    TlsVerifyClient never
    TLSVerifyClientクライアント認証の有無を設定します.Valueは次の値を取ることができます
  • never:サーバがユーザの要求に応答する場合、クライアントのアイデンティティを検証する必要はなく、CA公有証明書を提供するだけでよい.
  • allow:サーバがユーザーの要求に応答すると、サービスはクライアントのアイデンティティを検証することを要求し、クライアントに証明書がない場合、または証明書が無効な場合、セッションは依然として行われます.
  • try:クライアントは証明書を提供し、証明書が間違っている場合は接続を終了します.証明書がない場合、セッションは続行されます.
  • demand:サーバ側はクライアント証明書を検証する必要があり、クライアントはCAに証明書を申請する必要がある.

  • OpenSSL機能を起動し、以下の``shell[root@mldap01 ~]# vim/etc/sysconfig/ldap # Options of slapd (see man slapd) #SLAPD_OPTIONS= # At least one of SLAPD_LDAP, SLAPD_LDAPI and SLAPD_LDAPS must be set to 'yes'! # # Run slapd with -h "... ldap:///..."# yes/no, default: yes SLAPD_LDAP=yes # Run slapd with -h "... ldapi:///..."# yes/no, default: yes SLAPD_LDAPI=yes # Run slapd with -h "... ldaps:///..."# yes/no, default: no SLAPD_LDAPS=yes```デフォルトデータ構成ライブラリshell [root@mldap01 ~]# rm -rf /etc/openldap/slapd.d/* [root@mldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ config file testing succeeded [root@mldap01 ~]# chown ldap.ldap -R /etc/openldap/ [root@mldap01 ~]# /etc/init.d/slapd restart Stopping slapd: [ OK ] Starting slapd: [ OK ] を削除して再生成する.
  • CA証明書公開鍵によりOpenLDAPサービス側証明書の正当性を検証し、以下のように命令する
    [root@mldap01 ~]# openssl verify -CAfile /etc/pki/CA/cacert.pem /etc/openldap/ssl/ldapcert.pem 
    /etc/openldap/ssl/ldapcert.pem: OK
  • .
  • 現在のソケットがCAの検証に合格したかどうかを確認し、コマンドは以下の
    [root@mldap01 ssl]# openssl s_client -connect mldap01.gdy.com:636 -showcerts -state -CAfile /etc/openldap/ssl/cacert.pem               
    CONNECTED(00000003)
    SSL_connect:before/connect initialization
    SSL_connect:SSLv2/v3 write client hello A
    SSL_connect:SSLv3 read server hello A
    depth=1 C = CN, ST = Shanghai, L = Shanghai, O = GDY, OU = Tech, CN = ca.gdy.com, emailAddress = [email protected]
    verify return:1
    depth=0 C = CN, ST = Shanghai, O = GDY, OU = Tech, CN = mldap01.gdy.com, emailAddress = [email protected]
    verify return:1
    SSL_connect:SSLv3 read server certificate A
    SSL_connect:SSLv3 read server key exchange A
    SSL_connect:SSLv3 read server done A
    SSL_connect:SSLv3 write client key exchange A
    SSL_connect:SSLv3 write change cipher spec A
    SSL_connect:SSLv3 write finished A
    SSL_connect:SSLv3 flush data
    SSL_connect:SSLv3 read finished A
    ---
    Certificate chain
    0 s:/C=CN/ST=Shanghai/O=GDY/OU=Tech/CN=mldap01.gdy.com/[email protected]
    i:/C=CN/ST=Shanghai/L=Shanghai/O=GDY/OU=Tech/CN=ca.gdy.com/[email protected]
    -----BEGIN CERTIFICATE-----
    MIIDajCCAlKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgDELMAkGA1UEBhMCQ04x
  • である.

    4.OpenLDAPクライアント構成

  • CA公開鍵証明書をクライアント
    [root@mldap01 ssl]# scp cacert.pem [email protected]:/etc/openldap/ssl/
    
  • に送信する.
  • 構成/etc/openldap/ldap.conf
    [root@test01 ~]# grep -Ev "^$|^#" /etc/openldap/ldap.conf 
    TLS_CACERTDIR /etc/openldap/ssl
    TLS_CACERT /etc/openldap/ssl/cacert.pem
    TLS_REQCERT never 
    BASE dc=gdy,dc=com
    URI ldaps://mldap01.gdy.com
    TLS_REQCERT[never allow try demand|hard]#TLSセッションでserver証明書をチェックするかどうかを設定します.
  • Never:証明書はチェックされません.
  • Allow:server証明書をチェックします.証明書または証明書エラーがなく、接続が許可されます.
  • Try:server証明書を確認します.証明書(接続許可)、証明書エラー(接続終了)はありません.
  • demand|hard:server証明書を確認します.証明書がないか、証明書エラーがない場合は、すぐに接続を終了します.

  • 配置/etc/nslcd.conf
    [root@test01 ~]# grep -Ev "^$|^#" /etc/nslcd.conf 
    uid nslcd
    gid ldap
    uri ldaps://mldap01.gdy.com
    base dc=gdy,dc=com
    ssl on
    tls_cacertdir /etc/openldap/ssl
    tls_cacertfile /etc/openldap/ssl/cacert.pem
    tls_reqcert never
  • 配置/etc/pam_ldap.conf
    [root@test01 ~]# grep -Ev "^$|^#" /etc/pam_ldap.conf 
    host 127.0.0.1
    base dc=gdy,dc=com
    uri ldaps://mldap01.gdy.com
    ssl on
    tls_cacertdir /etc/openldap/ssl
    tls_cacertfile /etc/openldap/ssl/cacert.pem
    tls_reqcert never
    bind_policy soft
  • 5.クライアントテスト検証

  • クライアント匿名でSSL接続が正常かどうかをテストし、コマンドは以下の
    [root@test01 ~]# ldapwhoami -v -x -Z
    ldap_initialize(  )
    ldap_start_tls: Operations error (1)
            additional info: TLS already started
    anonymous
    Result: Success (0)
  • である.
  • LDAPユーザーはパスワードを検証し、命令は以下の
    [root@test01 ~]# ldapwhoami -D "uid=user1,ou=people,dc=gdy,dc=com" -W -H ldaps://mldap01.gdy.com -v
    ldap_initialize( ldaps://mldap01.gdy.com:636/??base )
    Enter LDAP Password: 
    dn:uid=user1,ou=people,dc=gdy,dc=com
    Result: Success (0)
  • である.
  • クライアントでOpenLDAPドメイン情報を検索し、コマンドは以下の
    [root@test01 ~]# ldapsearch -x -b 'dc=gdy,dc=com' -H ldaps://mldap01.gdy.com
    # extended LDIF
    #
    # LDAPv3
    # base  with scope subtree
    # filter: (objectclass=*)
    # requesting: ALL
    #
    
    # gdy.com
    dn: dc=gdy,dc=com
    dc: gdy
    objectClass: top
    objectClass: domain
    
    # people, gdy.com
    ...  
  • である.

    フェイルオーバ

  • openssl s_Client接続タイムズの間違いは、openldapとcaサーバが同じ台にいない場合にこの問題はありません.次回、caとldapサーバが同じ名前で
  • を試してみます.
    転載先:https://www.cnblogs.com/cishi/p/9160562.html