Sun Java System Directory Server Enterprise Edition 6.0 管理指南

第 5 章 目錄伺服器安全性

目錄伺服器支援數項可透過網路提供安全且可信任之通訊的機制。LDAPS 是執行優先權高於安全傳輸層 (SSL) 的標準 LDAP 協定。LDAPS 會為資料加密,並選擇性地使用憑證進行認證。本章所提及之 SSL 一詞,係指支援的協定 SSL2、SSL3 與 TLS 1.0。

目錄伺服器也支援可在原本未加密的 LDAP 連線上啟用 TLS 的 Start 傳輸層安全 (Start TLS) 延伸作業。

此外,目錄伺服器也支援透過簡單驗證與安全層 (SASL) 所執行的通用安全服務 API (GSSAPI)。GSSAPI 可讓您在 Solaris 作業系統上使用 Kerberos 第 5 版安全性協定。身份識別對映機制會接著為 Kerberos 主體與目錄中的身份識別建立關聯。

如需其他安全性資訊,請造訪 NSS 網站,網址是 http://www.mozilla.org/projects/security/pki/nss/

本章提供透過 SSL 配置安全性的程序。如需有關 ACI 的資訊,請參閱第 6 章, 目錄伺服器存取控制。如需有關使用者存取與密碼的資訊,請參閱第 7 章, 目錄伺服器密碼策略

本章包含下列主題:

對目錄伺服器使用 SSL

安全傳輸層 (SSL) 可在目錄伺服器及其用戶端之間提供加密通訊與可選擇的認證功能。SSL 可透過 LDAP 使用,或與 DSML-over-HTTP 搭配使用。SSL 預設會透過 LDAP 啟用,但若您使用 DSML-over-HTTP,亦可輕鬆啟用 SSL。此外,複寫經配置後亦可使用 SSL,讓伺服器之間能進行安全通訊。

若在簡單認證 (連結 DN 與密碼) 中使用 SSL,即會對伺服器所收送的所有資料進行加密。加密可確保機密度與資料完整性。用戶端可選擇性地透過簡單驗證與安全層 (SASL) 使用憑證,對目錄伺服器或第三方安全性機制進行認證。憑證型認證可使用公開金鑰加密法,防止用戶端或伺服器進行偽造或模擬。

目錄伺服器能夠在個別的連接埠上同時進行 SSL 與非 SSL 通訊。基於安全性考量,您也可以限定所有通訊皆需使用 LDAP 安全連接埠。用戶端認證也是可配置的。您可以將用戶端認證設為必要或允許項目。此設定將決定您所執行的安全性層級。

SSL 可支援 Start TLS 延伸作業,而為一般 LDAP 連線提供安全性。用戶端可連結至標準 LDAP 連接埠而使用傳輸層安全協定,以維護連線的安全性。Start TLS 作業可讓用戶端享有更大的彈性,並有利於簡化連接埠配置。

SSL 所提供的加密機制亦可用於屬性加密。啟用 SSL 可讓您對尾碼配置屬性加密,以維護資料儲存在目錄時的安全性。如需更多資訊,請參閱為屬性值加密

如需額外的安全性,您可以透過存取控制指令 (ACI),設定對目錄內容的存取控制。ACI 須使用特定的認證方法,同時確保資料僅可透過安全通道進行傳輸。設定 ACI,可彌補使用 SSL 與憑證的不足之處。如需更多資訊,請參閱第 6 章, 目錄伺服器存取控制

SSL 預設會透過 LDAP 啟用,在使用 DSML-over-HTTP 時,亦可輕鬆啟用 SSL。此外,您可能會如以下幾節所述,想修改某些方面的 SSL 配置。

管理憑證

本節說明如何管理目錄伺服器中的 SSL 憑證。

若要在目錄伺服器上執行 SSL,您必須使用自行簽署的憑證或公開金鑰基礎架構 (PKI) 解決方案。

PKI 解決方案與外部憑證授權機構 (CA) 相關。使用 PKI 解決方案時,必須具備 CA 簽署的伺服器憑證,其中包含公開金鑰與私密金鑰。此憑證隨各目錄伺服器而不同。您也需具備可信任的 CA 憑證,其中包含公開金鑰。可信任的 CA 憑證可確保來自您的 CA 之所有伺服器憑證皆可信任。此憑證有時亦稱為 CA 根金鑰或根憑證。


備註 –

若使用憑證進行測試,可能會使用自行簽署的憑證。但在生產環境中使用自行簽署的憑證,並不是安全的做法。在生產環境中,請使用可信任的憑證授權機構 (CA) 憑證。


本節中的程序使用 dsadm dsconf 指令。如需有關這些指令的資訊,請參閱 dsadm(1M) 線上手冊與 dsconf(1M) 線上手冊。

本節提供下列有關在目錄伺服器上配置憑證的資訊:

Procedure檢視預設自行簽署的憑證

目錄伺服器實例於首次建立時,會包含預設自行簽署的憑證。自行簽署的憑證是成對的公開與私密金鑰組,其中的公開金鑰由私密金鑰所簽署。自行簽署的憑證有效期限為三個月。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    若要檢視預設自行簽署的憑證,請使用此指令:


    $ dsadm show-cert instance-path defaultCert

Procedure管理自行簽署的憑證

當您建立目錄伺服器實例時,系統自動提供預設的自行簽署憑證。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 若要以非預設設定建立自行簽署的憑證,請使用此指令:


    $ dsadm add-selfsign-cert instance-path cert-alias
    

    其中 cert-alias 是您提供用以識別憑證的名稱。

    若要檢視此指令的所有選項,請參閱 dsadm(1M) 線上手冊或指令行說明:


    $ dsadm add-selfsign-cert --help
  2. 請在自行簽署的憑證到期時更新憑證:


    $ dsadm renew-selfsign-cert instance-path cert-alias
    

Procedure請求 CA 簽署的伺服器憑證

此程序說明如何請求及安裝用於目錄伺服器的 CA 簽署伺服器憑證。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 產生 CA 簽署的伺服器憑證請求。


    $ dsadm request-cert [-W cert-pwd-file] {-S DN | --name name [--org org] [--org-unit org-unit \
      [--city city] [--state state] [--country country]} [-o output-file] [-F format] instance-path
    

    例如,若要為 Example 公司請求 CA 簽署的伺服器憑證,請使用此指令:


    $ dsadm request-cert --name host1 --org Example --org-unit Marketing \
     -o my_cert_request_file /local/ds

    為完整識別伺服器,憑證授權機構可能會要求此範例中所顯示的所有屬性。如需每個屬性的說明,請參閱 dsadm(1M) 線上手冊。

    當您使用 dsadm request-cert 請求憑證時,除非指定 ASCII 做為輸出格式,否則所產生的憑證請求將是二進位憑證請求。若您指定 ASCII,所產生的憑證請求則會是 PEM 格式的 PKCS #10 憑證請求。PEM 是 RFC 1421 至 1424 (http://www.ietf.org/rfc/rfc1421.txt) 所指定的安全電子郵件 (Privacy Enhanced Mail) 格式,可用以透過 US-ASCII 字元呈現 base64 編碼的憑證請求。請求的內容如下列範例所示:


    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIIBrjCCARcCAQAwbjELMAkGA1UBhMCVXMxEzARBgNVBAgTCkNBElGT1JOSUExLD
    AqBgVBAoTI25ldHNjYXBlIGNvb11bmljYXRpb25zIGNvcnBvcmF0aWuMRwwGgYDV
    QQDExNtZWxsb24umV0c2NhcGUuY29tMIGfMA0GCSqGSIb3DQEBAUAA4GNADCBiQK
    BgCwAbskGh6SKYOgHy+UCSLnm3ok3X3u83Us7u0EfgSLR0f+K41eNqqWRftGR83e
    mqPLDOf0ZLTLjVGJaHJn4l1gG+JDf/n/zMyahxtV7+T8GOFFigFfuxJaxMjr2j7I
    vELlxQ4IfZgwqCm4qQecv3G+N9YdbjveMVXW0v4XwIDAQABAAwDQYJKoZIhvcNAQ
    EEBQADgYEAZyZAm8UmP9PQYwNy4Pmypk79t2nvzKbwKVb97G+MT/gw1pLRsuBoKi
    nMfLgKp1Q38K5Py2VGW1E47/rhm3yVQrIiwV+Z8Lcc=
    -----END NEW CERTIFICATE REQUEST-----
  2. 根據適當程序,將憑證請求傳輸到您的憑證授權機構。

    取得憑證授權機構憑證的程序會因使用的憑證授權機構而異。有些商業 CA 會提供網站供您自動下載憑證。其他 CA 則會在您請求時,以電子郵件傳送。

    傳送請求之後,必須等候 CA 回應以提供憑證。請求的回應時間各異。例如,若您的 CA 屬公司內部,則可能只需一或兩天即可回應您的請求。若所選取的 CA 屬公司外部,則可能需要數週才可回應您的請求。

  3. 請儲存您從憑證授權機構接收的憑證。

    將憑證備份在安全之處。萬一憑證遺失,可以使用備份檔案重新加以安裝。可以將其儲存於文字檔中。PEM 格式的 PKCS #11 憑證內容如下列範例所示:


    -----BEGIN CERTIFICATE-----
    MIICjCCAZugAwIBAgICCEEwDQYJKoZIhKqvcNAQFBQAwfDELMAkGA1UEBhMCVVMx
    IzAhBgNVBAoGlBhbG9a2FWaWxsZGwSBXaWRnZXRzLCBJbmMuMR0wGwYDVQQLExRX
    aWRnZXQgTW3FrZXJzICdSJyBVczEpMCcGAx1UEAxgVGVzdCBUXN0IFRlc3QgVGVz
    dCBUZXN0IFlc3QgQ0EswHhcNOTgwMzEyMDIzMzUWhcNOTgwMzI2MDIzMpzU3WjBP
    MQswCYDDVQQGEwJVUzEoMCYGA1UEChMfTmV0c2NhcGUgRGlyZN0b3J5VIFB1Ymxp
    Y2F0aW9uczEWMB4QGA1UEAxMNZHVgh49dq2tLNvbjTBaMA0GCSqGSIb3DQEBAQUA
    A0kAMEYkCQCksMR/aLGdfp4m0OiGgijG5KgOsyRNvwGYW7kfW+8mmijDtZaRjYNj
    jcgpF3VnlbxbclX9LVjjNLC5737XZdAgEDozYwpNDARBglghkgBhvhCEAQEEBAMC
    APAwHkwYDVR0jBBgwFAU67URjwCaGqZHUpSpdLxlzwJKiMwDQYJKoZIhQvcNAQEF
    BQADgYEAJ+BfVem3vBOPBveNdLGfjlb9hucgmaMcQa9FA/db8qimKT/ue9UGOJqL
    bwbMKBBopsDn56p2yV3PLIsBgrcuSoBCuFFnxBnqSiTS7YiYgCWqWaUA0ExJFmD6
    6hBLseqkSWulk+hXHN7L/NrViO+7zNtKcaZLlFPf7d7j2MgX4Bo=
    -----END CERTIFICATE-----

Procedure增加 CA 簽署的伺服器憑證與可信任的 CA 憑證

此程序說明如何安裝用於目錄伺服器之 CA 簽署的伺服器憑證與可信任的 CA 憑證。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 增加 CA 簽署的伺服器憑證。


    $ dsadm add-cert instance-path cert-alias cert-file
    

    其中 cert-alias 是提供用以識別憑證的名稱,而 cert-file 是文字檔,內含 PEM 格式的 PKCS #11 憑證。

    例如,若要安裝 CA 簽署的伺服器憑證,可以使用如下的指令:


    $ dsadm add-cert /local/ds server-cert /local/safeplace/serv-cert-file

    憑證此時已完成安裝,但尚未受信任。若要信任 CA 簽署的伺服器憑證,必須安裝憑證授權機構的憑證。

  2. 增加可信任的憑證授權機構憑證。


    $ dsadm add-cert -C instance-path cert-alias cert-file
    

    -C 選項指出此憑證為可信任的憑證授權機構憑證。

    例如,若要安裝憑證授權機構所提供之可信任的憑證,必須使用此指令:


    $ dsadm add-cert -C /local/ds CA-cert /local/safeplace/ca-cert-file
  3. (可選擇) 驗證所安裝的憑證。

    • 若要列出所有伺服器憑證並顯示其有效日期與別名,請鍵入:


      $ dsadm list-certs instance-path
      

      例如:


      $ dsadm list-certs /local/ds1
      Enter the certificate database password:
      Alias       Valid from Expires on Self-   Issued by          Issued to
                                        signed?                                     
      ----------- ---------- ---------- ------- -----------------  -----------------
      serverCert  2000/11/10 2011/02/10 n       CN=CA-Signed Cert, CN=Test Cert,
                  18:13      18:13              OU=CA,O=com        dc=example,dc=com
      defaultCert 2006/05/18 2006/08/18 y       CN=host1,CN=DS,    Same as issuer
                  16:28      16:28              dc=example,dc=com
      2 certificates found

      目錄代理伺服器的實例預設會包含名為 defaultCert 的預設伺服器憑證。Same as issuer 表示預設憑證為自行簽署的伺服器憑證。

    • 若要列出可信任的 CA 憑證,請鍵入:


      $ dsadm list-certs -C instance-path
      

      例如:


      $ dsadm list-certs -C /local/ds1
      Enter the certificate database password:
      Alias   Valid from Expires on Self-   Issued by           Issued to
                                    signed?                                     
      ------- ---------- ---------- ------- -----------------   -----------------
      CA-cert 2000/11/10 2011/02/10 y       CN=Trusted CA Cert, Same as issuer
              18:12      18:12              OU=CA,O=com
      1 certificate found
    • 若要檢視憑證的詳細資訊 (包括憑證過期日),請鍵入:


      $ dsadm show-cert instance-path cert-alias
      

      例如,若要檢視伺服器憑證,請鍵入:


      $ dsadm show-cert /local/ds1 "Server-Cert"
      Enter the certificate database password:
      Certificate:
          Data:
              Version: 3 (0x2)
              Serial Number: 2 (0x2)
              Signature Algorithm: PKCS #1 MD5 With RSA Encryption
              Issuer:
                  "CN=Server-Cert,O=Sun,C=US"
              Validity:
                  Not Before: Fri Nov 10 18:12:20 2000
                  Not After : Thu Feb 10 18:12:20 2011
              Subject:
                  "CN=CA Server Cert,OU=ICNC,O=Sun,C=FR"
              Subject Public Key Info:
                  Public Key Algorithm: PKCS #1 RSA Encryption
                  RSA Public Key:
                      Modulus:
                          bd:76:fc:29:ca:06:45:df:cd:1b:f1:ce:bb:cc:3a:f7:
                          77:63:5a:82:69:56:5f:3d:3a:1c:02:98:72:44:36:e4:
                          68:8c:22:2b:f0:a2:cb:15:7a:c4:c6:44:0d:97:2d:13:
                          b7:e3:bf:4e:be:b5:6a:df:ce:c4:c3:a4:8a:1d:fa:cf:
                          99:dc:4a:17:61:e0:37:2b:7f:90:cb:31:02:97:e4:30:
                          93:5d:91:f7:ef:b0:5a:c7:d4:de:d8:0e:b8:06:06:23:
                          ed:5f:33:f3:f8:7e:09:c5:de:a5:32:2a:1b:6a:75:c5:
                          0b:e3:a5:f2:7a:df:3e:3d:93:bf:ca:1f:d9:8d:24:ed
                      Exponent: 65537 (0x10001)
          Signature Algorithm: PKCS #1 MD5 With RSA Encryption
          Signature:
              85:92:42:1e:e3:04:4d:e5:a8:79:12:7d:72:c0:bf:45:
              ea:c8:f8:af:f5:95:f0:f5:83:23:15:0b:02:73:82:24:
              3d:de:1e:95:04:fb:b5:08:17:04:1c:9d:9c:9b:bd:c7:
              e6:57:6c:64:38:8b:df:a2:67:f0:39:f9:70:e9:07:1f:
              33:48:ea:2c:18:1d:f0:30:d8:ca:e1:29:ec:be:a3:43:
              6f:df:03:d5:43:94:8f:ec:ea:9a:02:82:99:5a:54:c9:
              e4:1f:8c:ae:e2:e8:3d:50:20:46:e2:c8:44:a6:32:4e:
              51:48:15:d6:44:8c:e6:d2:0d:5f:77:9b:62:80:1e:30
          Fingerprint (MD5):
              D9:FB:74:9F:C3:EC:5A:89:8F:2C:37:47:2F:1B:D8:8F
          Fingerprint (SHA1):
              2E:CA:B8:BE:B6:A0:8C:84:0D:62:57:85:C6:73:14:DE:67:4E:09:56
      
          Certificate Trust Flags:
              SSL Flags:
                  Valid CA
                  Trusted CA
                  User
                  Trusted Client CA
              Email Flags:
                  User
              Object Signing Flags:
                  User

Procedure更新過期的 CA 簽署伺服器憑證

當您的 CA 簽署伺服器憑證 (公開金鑰與私密金鑰) 過期時,請使用此程序加以更新。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 從憑證授權機構取得更新的 CA 簽署伺服器憑證。

  2. 收到更新的憑證後,請加以安裝。


    $ dsadm renew-cert instance-path cert-alias cert-file
    

Procedure匯出及匯入 CA 簽署伺服器憑證

有時您可能會想匯出憑證的公開與私密金鑰,以便後續可匯入憑證。例如,可能會想讓其他伺服器使用您的憑證。

此程序中的指令可用於含有萬用字元的憑證,例如 "cn=*,o=example"

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 匯出憑證。


    $ dsadm export-cert [-o output-file] instance-path cert-alias
    

    例如:


    $ dsadm export-cert -o /tmp/first-certificate /local/ds1 "First Certificate"
    $ dsadm export-cert -o /tmp/first-ca-server-certificate /local/ds1/ defaultCert
    Choose the PKCS#12 file password:
    Confirm the PKCS#12 file password:
    $ ls /tmp
    first-ca-server-certificate
     
  2. 匯入憑證。


    $ dsadm import-cert instance-path cert-file
    

    例如,若要將憑證匯入 host1 上的伺服器實例:


    $ dsadm import-cert -h host1 /local/ds2 /tmp/first-ca-server-certificate
    Enter the PKCS#12 file password:
     
  3. (可選擇) 若已將憑證匯入伺服器,請配置伺服器以使用匯入的憑證。


    $ dsconf set-server-prop -e -h host -p port -w - ssl-rsa-cert-name:server-cert

配置憑證資料庫密碼

目錄伺服器預設會透過儲存的密碼,在內部管理 SSL 憑證資料庫密碼。管理憑證時,使用者並不需鍵入憑證密碼或指定密碼檔案。此選項僅會隱藏密碼,而不會對密碼進行加密,因此並不安全。

但若您在使用憑證時想要有更多的控制,則可以配置伺服器,讓使用者在使用指令行時必須提供密碼。在此情況下,對於 autostartbackupdisable-serviceenable-service inforeindexrestorestop 以外的所有 dsadm 子指令,使用者都必須鍵入憑證資料庫密碼。憑證資料庫位於 instance-path/alias 目錄中。

Procedure配置伺服器,讓使用者必須提供憑證密碼

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 停止伺服器。


    $ dsadm stop instance-path
    
  2. 將密碼提示旗標設為 on


    $ dsadm set-flags instance-path cert-pwd-prompt=on

    系統會要求您選擇新的憑證密碼。

  3. 啟動伺服器。


    $ dsadm start instance-path
    

為目錄伺服器備份及復原憑證資料庫

當您備份目錄伺服器的實例時,會備份目錄伺服器的配置與憑證。備份的憑證會儲存在 archive-path/alias 目錄中。

如需有關如何備份及復原目錄伺服器的資訊,請參閱製作嚴重損壞回復所需的備份

配置 SSL 通訊

本節包含停用及啟用 SSL 的相關程序。

停用非安全通訊

建立伺服器實例時,預設會建立 LDAP 明文連接埠與 LDAP 安全連接埠 (LDAPS)。但在某些情況下,可能會想停用非 SSL 通訊,而使伺服器通訊只能透過 SSL 進行。

SSL 連線啟用時會使用預設的自行簽署憑證。若您認為有必要,也可安裝自己的憑證。如需在伺服器啟動後管理憑證及停用 SSL 的相關指示,請參閱第 5 章, 目錄伺服器安全性。如需憑證、憑證資料庫以及取得 CA 簽署伺服器憑證的簡介,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

Procedure停用 LDAP 明文連接埠

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 停用 LDAP 明文連接埠。

    若要停用非安全點,必須連結至 LDAP 安全點。此範例說明主機伺服器 host1 上的預設 LDAP 安全連接埠 1636 之連結。


    $ dsconf set-server-prop -h host1 -p 1636 ldap-port:disabled
  2. 重新啟動伺服器,使變更生效。


    $ dsadm restart /local/ds

    您現在再也不需要在非安全連接埠 1389 上進行連結。

選擇加密密碼

密碼是為資料加密及解密時所使用的演算法。一般而言,密碼在加密期間所使用的位元數越多,加密就越嚴密或安全。SSL 的密碼也可經由使用的訊息認證類型來識別。訊息認證也是一種演算法,可計算能夠確保資料完整性的總和檢查

當用戶端初始化與伺服器的 SSL 連線時,用戶端與伺服器必須協議出用以加密資訊的密碼。在任何雙向加密程序中,雙方都必須使用相同的密碼。所使用的密碼取決於伺服器所保存之密碼清單目前的順序。伺服器會選擇用戶端所呈現的密碼中,第一個符合其清單中之密碼的密碼。目錄伺服器的預設密碼值為 all,代表基礎 SSL 程式庫所支援的所有已知安全密碼。但您也可以修改此值,而僅接受特定密碼。

如需有關可用於目錄伺服器之密碼的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

Procedure選擇加密密碼

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 請確定您的伺服器已啟用 SSL。

    請參閱配置 SSL 通訊

  2. 檢視可用的 SSL 密碼。


    $ dsconf get-server-prop -h host -p port ssl-supported-ciphers
    ssl-supported-ciphers  :  TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
    ssl-supported-ciphers  :  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
    ssl-supported-ciphers  :  TLS_DHE_RSA_WITH_AES_256_CBC_SHA
    ssl-supported-ciphers  :  TLS_DHE_DSS_WITH_AES_256_CBC_SHA 
    ...
  3. (可選擇) 若要保有非加密資料的副本,請在設定 SSL 密碼前先匯出資料。

    請參閱匯出至 LDIF

  4. 設定 SSL 密碼。


    $ dsconf set-server-prop -h host -p port ssl-cipher-family:cipher
    

    例如,若要將密碼系列設為 SSL_RSA_WITH_RC4_128_MD5SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,請鍵入:


    $ dsconf set-server-prop -h host1 -p 1636 ssl-cipher-family:SSL_RSA_WITH_RC4_128_MD5 \
     ssl-cipher-family:SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
    Enter "cn=Directory Manager" password:  
    Before setting SSL configuration, export Directory Server data. 
    Do you want to continue [y/n] ? y
    Directory Server must be restarted for changes to take effect.
  5. 重新啟動伺服器,使變更生效。


    $ dsadm restart /local/ds

配置用戶端認證

用戶端認證是伺服器用以驗認用戶端之身份識別的機制。

用戶端認證可透過下列方式之一執行:

本節提供下列有關在目錄伺服器上配置兩個 SASL 機制的資訊。

如需有關配置安全性的更多資訊,請參閱配置 LDAP 用戶端以使用安全性

設定目錄伺服器中的 SASL 加密層級

配置 SASL 機制之前,必須先指定是否需要加密。SASL 加密的需求,由安全性強度係數 (SSF) 的最大值與最小值所設定。

dsSaslMinSSF(5dsat)dsSaslMaxSSF(5dsat) 屬性代表加密金鑰長度,這些屬性儲存於 cn=SASL, cn=security, cn=config 之中。

伺服器允許任何層級的加密,包含不加密。這表示目錄伺服器接受大於 256 的 dsSaslMinSSFdsSaslMaxSSF 值。但目前沒有任何 SASL 機制支援大於 128 的 SSF。目錄伺服器會在 SSF 可用的最大值 (128) 以內協調這些值。因此,視可用的基礎機制之不同,SSF 實際上的最大值可能會小於配置的最大值。

SASL 安全性係數認證取決於兩個主要項目:伺服器與用戶端應用程式所請求的最小與最大係數,以及基礎安全性元件所提供的可用加密機制。概略地說,伺服器與用戶端會嘗試使用小於或等於兩者之最大設定係數,但大於或等於兩者之最小係數的最高可用安全性係數。

目錄伺服器預設的最小 SASL 安全性係數 dsSaslMinSSF0,表示沒有任何保護。除非您變更目錄伺服器的最小值,否則實際上的最小值取決於用戶端設定。實務上應將最小值設為您實際上要讓伺服器與用戶端使用的最低層級。若伺服器與用戶端無法協調出符合最小需求的機制,則不會建立連線。

Procedure需要 SASL 加密

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    若需要 SASL 加密,請將 dsSaslMinSSF 值設為所需的最小加密。


    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: cn=SASL, cn=security, cn=config
    changetype: modify
    replace: dsSaslMinSSF
    dsSaslMinSSF: 128
    ^D

Procedure不允許 SASL 加密

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    若不允許 SASL 加密,請將 dsSaslMinSSFdsSaslMaxSSF 值都設為零。


    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: cn=SASL, cn=security, cn=config
    changetype: modify
    replace: dsSaslMinSSF
    dsSaslMinSSF: 0
    
    replace: dsSaslMaxSSF
    dsSaslMaxSSF: 0
    ^D

透過 DIGEST-MD5 的 SASL 認證

DIGEST-MD5 機制在進行用戶端認證時,會比較用戶端所傳送的雜湊值與使用者的密碼雜湊。但由於此機制必須讀取使用者密碼,因此所有想透過 DIGEST-MD5 進行認證的使用者,在目錄中都必須要有 {CLEAR} 密碼。將 {CLEAR} 密碼儲存到目錄時,您必須如第 6 章, 目錄伺服器存取控制中所述,確實透過 ACI 適當限制密碼值的存取權。此外,您還必須如為屬性值加密中所述,在尾碼中配置屬性加密。

Procedure配置 DIGEST-MD5 機制

下列程序說明如何配置目錄伺服器以使用 DIGEST-MD5。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 使用 ldapsearch 指令,驗證 DIGEST-MD5 是根項目上的 supportedSASLMechanisms 屬性值。

    例如,下列指令可顯示哪些是啟用的 SASL 機制:


    $ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \
     -s base -b "" "(objectclass=*)" supportedSASLMechanisms
    Enter bind password:
    dn:
    supportedSASLMechanisms: EXTERNAL
    supportedSASLMechanisms: DIGEST-MD5
    supportedSASLMechanisms: GSSAPI
    ^D
  2. 若 DIGEST-MD5 尚未啟用,請加以啟用。


    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w - 
    Enter bind password:
    dn: cn=SASL, cn=security, cn=config
    changetype: modify
    add: dsSaslPluginsEnable
    dsSaslPluginsEnable: DIGEST-MD5
    -
    replace: dsSaslPluginsPath
    dsSaslPluginsPath: SASL-library
    ^D

    其中 SASL-library 為下列其中一項:

    JES 安裝

    /usr/lib/mps/sasl2

    Zip 安裝

    install-path/dsee6/private/lib

  3. 針對 DIGEST-MD5 使用預設身份識別對映,或建立新的對映。

    如需相關資訊,請參閱DIGEST-MD5 身份識別對映

  4. 請確定所有將使用 DIGEST-MD5 而透過 SSL 存取伺服器的使用者,均已將密碼儲存在 {CLEAR} 中。

    如需密碼儲存機制,請參閱第 7 章, 目錄伺服器密碼策略

  5. 若修改了 SASL 配置項目或任何 DIGEST-MD5 身份識別對映項目,請重新啟動目錄伺服器。

DIGEST-MD5 身份識別對映

SASL 機制的身份識別對映會嘗試比對 SASL 身份識別的憑證與目錄中的使用者項目。如果在對映中找不到對應 SASL 身份識別的 DN,認證即會失敗。如需此機制的完整說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

SASL 身份識別是一個名為 Principal 的字串,用以表示各機制之特定格式下的使用者。在 DIGEST-MD5 中,用戶端應建立含有 dn: 前綴與 LDAP DN,或含有 u: 前綴與任何用戶端指定文字的主體。對映期間,用戶端所傳送的主體可用於 ${Principal} 預留位置中。

伺服器配置的下列項目,即為 DIGEST-MD5 的預設身份識別對映:


dn: cn=default,cn=DIGEST-MD5,cn=identity mapping,cn=config
objectClass: top
objectClass: nsContainer
objectClass: dsIdentityMapping
objectClass: dsPatternMatching
cn: default
dsMatching-pattern: \${Principal}
dsMatching-regexp: dn:(.*)
dsMappedDN: \$1

此身份識別對映會假設主體的 dn 欄位含有現有使用者在目錄中的實際 DN。

Procedure定義您自己的 DIGEST-MD5 身份識別對映

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 編輯預設對映項目,或在 cn=DIGEST-MD5,cn=identity mapping,cn=config 下建立新的對映項目。

    instance-path/ldif/identityMapping_Examples.ldif 中含有 DIGEST-MD5 的對映範例。

    此範例假設不合格的主體文字欄位內,含有想要的身份識別之使用者名稱。下列指令將說明此對映的定義方式:


    $ ldapmodify -a -h host1 -p 1636 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: cn=unqualified-username,cn=DIGEST-MD5,cn=identity mapping
    cn=config
    objectclass: dsIdentityMapping
    objectclass: dsPatternMatching
    objectclass: nsContainer
    objectclass: top
    cn: unqualified-username
    dsMatching-pattern: \${Principal}
    dsMatching-regexp: u:(.*)@(.*)\\.com
    dsSearchBaseDN: dc=\$2
    dsSearchFilter: (uid=\$1)
  2. 重新啟動目錄伺服器,使您的新對映生效。

透過 GSSAPI 的 SASL 認證 (僅適用於 SPARC)

透過 SASL 的通用安全服務 API (GSSAPI) 可讓您使用第三方安全性系統 (如 Kerberos V5) 進行用戶端認證。GSSAPI 程式庫僅適用於 Solaris 作業系統 SPARC® 平台。Sun 建議您在 Sun Enterprise Authentication MechanismTM 1.0.1 伺服器上安裝 Kerberos V5 實作。

此伺服器會使用 GSSAPI 驗證使用者的身份識別。接著,SASL 機制會套用 GSSAPI 對映規則,以取得此連線期間對所有作業而言皆為連結 DN 的 DN。

Procedure配置 Kerberos 系統

請根據製造商的指示配置 Kerberos 軟體。若您使用 Sun Enterprise Authentication Mechanism 1.0.1 伺服器,請執行此程序。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 配置 /etc/krb5 中的檔案。

  2. 建立用以儲存使用者與服務的 Kerberos 資料庫。

  3. 在資料庫中,建立 LDAP 服務的主體。


    $ ldap/server-FQDN@realm
    

    其中 server-FQDN 是您目錄伺服器完全合格的網域名稱。

  4. 啟動 Kerberos 常駐程式程序。


    備註 –

    DNS 必須配置於主機電腦上。


    如需這些步驟的詳細指示,請參閱軟體文件。另請參閱使用 GSSAPI 與 SASL 配置 Kerberos 認證的範例

Procedure配置 GSSAPI 機制

下列程序說明如何配置目錄伺服器以在 Solaris 作業系統上使用 GSSAPI。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. GSSAPI 身份識別對映中所述,建立 GSSAPI 的預設身份識別對映與所有自訂對映。

  2. 建立用以儲存服務金鑰的 keytab。

    您的 LDAP 服務金鑰會儲存在 keytab 中。

    1. 請確定只有目錄伺服器使用者可讀取 keytab。

    2. 將檔案名稱變更為預設值 /etc/krb5/krb5.keytab 以外的名稱。

    3. 設定環境變數 KRB5_KTNAME,以確保所使用的是新的 keytab,而非預設 keytab。

  3. 若修改了 SASL 配置項目或任何 GSSAPI 身份識別對映項目,請重新啟動目錄伺服器。

    請注意,DNS 必須配置於主機電腦上。

GSSAPI 身份識別對映

SASL 機制的身份識別對映,會嘗試比對 SASL 身份識別的憑證與目錄中的使用者項目。如果在對映中找不到對應 SASL 身份識別的 DN,認證即會失敗。

SASL 身份識別是一個名為 Principal 的字串,用以表示各機制之特定格式下的使用者。在 Kerberos 中使用 GSSAPI 時,主體將是 uid [/instance][@ realm] 格式的身份識別。uid 可包含一個可選擇的 instance 識別碼,再加上通常為網域名稱的可選擇 realm。例如,下列字串皆為有效的使用者主體:


bjensen
bjensen/Sales
bjensen@EXAMPLE.COM
bjensen/Sales@EXAMPLE.COM

目錄中最初並未定義 GSSAPI 對映。根據您的用戶端定義所使用之主體的方式,定義預設對映以及所需要的任何自訂對映。

Procedure定義 GSSAPI 的身份識別對映

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. cn=GSSAPI,cn=identity mapping, cn=config 下建立新的對映項目。

    如需身份識別對映項目中的屬性定義,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」instance-path/ldif/identityMapping_Examples.ldif 中含有 GSSAPI 的對映範例。

    此檔案中的預設 GSSAPI 對映,會假設主體中僅包含一個使用者 ID。此對映可判斷位在目錄之固定分支中的使用者:


    dn: cn=default,cn=GSSAPI,cn=identity mapping,cn=config
    objectclass: dsIdentityMapping
    objectclass: nsContainer
    objectclass: top
    cn: default
    dsMappedDN: uid=\${Principal},ou=people,dc=example,dc=com

    此檔案中的另一個範例說明如何在使用者 ID 位於含有已知範圍的主體中時,判斷使用者 ID。


    dn: cn=same_realm,cn=GSSAPI,cn=identity mapping,cn=config
    objectclass: dsIdentityMapping
    objectclass: dsPatternMatching
    objectclass: nsContainer
    objectclass: top
    cn: same_realm
    dsMatching-pattern: \${Principal}
    dsMatching-regexp: (.*)@EXAMPLE.COM
    dsMappedDN: uid=\$1,ou=people,dc=EXAMPLE,dc=COM
  2. 重新啟動目錄伺服器,使您的新對映生效。

配置 LDAP 用戶端以使用安全性

下列幾節說明如何在要與目錄伺服器建立安全連線的 LDAP 用戶端中,配置及使用 SSL。在 SSL 連線中,伺服器會將其憑證傳送至用戶端。用戶端必須先信任此憑證,以進行伺服器認證。接著,用戶端可選擇針對兩個 SASL 機制之一傳送其本身的憑證或資訊,以初始化其中一個用戶端認證機制。SASL 機制為 DIGEST-MD5 與使用 Kerberos V5 的 GSSAPI。

下列小節將以 ldapsearch 工具做為啟用 SSL 之 LDAP 用戶端的範例。目錄伺服器隨附的 ldapmodifyldapdeleteldapcompare 等工具的配置方式均相同。這些目錄存取工具均以 Directory SDK for C 為基礎,其詳細資訊載於「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中。

若要在其他 LDAP 用戶端上配置 SSL 連線,請參閱應用程式隨附的文件。


備註 –

有一些用戶端應用程式可實作 SSL,但無法驗證伺服器是否具有可信任的憑證。這些用戶端應用程式可使用 SSL 協定進行資料加密,但無法確保機密度,也無法防止模擬。


下列幾節說明如何配置 LDAP 用戶端以使用安全性:

在用戶端中使用 SASL DIGEST-MD5

在用戶端中使用 DIGEST-MD5 機制時,無須安裝使用者憑證。但若要使用加密的 SSL 連線,則仍須如管理憑證中所述,信任伺服器憑證。

指定範圍

範圍可定義用以從中選取認證身份識別的名稱空間。在 DIGEST-MD5 認證中,必須對特定的範圍進行認證。

目錄伺服器會以機器完全合格的主機名稱做為 DIGEST-MD5 的預設範圍。伺服器會使用位於 nsslapd-localhost 配置屬性中的主機名稱小寫值。

若未指定範圍,則會使用伺服器所提供的預設範圍。

指定環境變數

在 UNIX 環境中,您必須設定 SASL-PATH 環境變數,LDAP 工具才找得到 DIGEST-MD5 程式庫。DIGEST-MD5 程式庫是一種可由 SASL 外掛程式動態載入的共用程式庫。請以下列方式設定 SASL_PATH 環境變數:


export SASL_PATH=SASL-library

此路徑假設目錄伺服器安裝於呼叫 LDAP 工具的相同主機上。

ldapsearch 指令範例

您可以在未使用 SSL 的情況下,執行 DIGEST-MD5 用戶端認證。下列範例將使用預設的 DIGEST-MD5 身份識別對映,判斷連結 DN:


$ ldapsearch -h host1 -p 1389 \
 -o mech=DIGEST-MD5 [ \
 -o realm="example.com"] \
 -o authid="dn:uid=bjensen,dc=example,dc=com" \
 -w - \
 -o authzid="dn:uid=bjensen,dc=example,dc=com" \
 -o secProp="minssf=56,maxssf=256,noplain" \
 -b "dc=example,dc=com" "(givenname=Richard)"

上述範例說明如何使用 -o (小寫字母 o) 選項,指定 SASL 選項。realm 是可選擇的項目,但若要指定此項目,則必須使用伺服器主機電腦完全合格的網域名稱。authidauthzid 皆須存在同時完全相同,但並不會使用為代理伺服器作業所設定的 authzid-w 密碼選項會套用至 authid

authid 的值為身份識別對映中所使用的主體。authid 應包含 dn: 前綴與目錄中的有效使用者 DN,或包含 u: 前綴與用戶端所決定的任何字串。authid 的此項用法可讓您使用DIGEST-MD5 身份識別對映中所述的對映。

讓 SSL 連線透過 LDAPS 安全連接埠提供加密,以及讓 DIGEST-MD5 提供用戶端認證,是最常見的配置。下列範例將透過 SSL 執行相同的作業:


$ ldapsearch -h host1 -p 1636 \
 -Z -P .mozilla/bjensen/BJE6001.slt/cert8.db \
 -N "cert-example" -w - \
 -o mech=DIGEST-MD5 [-o realm="example.com"] \
 -o authid="dn:uid=bjensen,dc=example,dc=com" \
 -o authzid="dn:uid=bjensen,dc=example,dc=com" \
 -o secProp="minssf=0,maxssf=0,noplain" \
 -b "dc=example,dc=com" "(givenname=Richard)"

在此範例中,由於作業會透過 SSL 執行,因此 ldapsearch 指令必須使用 -N-w 選項。但這些選項並不會使用於用戶端認證上。伺服器會在 authid 值中執行主體的其他 DIGEST-MD5 身份識別對映。

在用戶端中使用 Kerberos SASL GSSAPI

在用戶端中使用 GSSAPI 機制時,無需安裝使用者憑證,但必須配置 Kerberos V5 安全性系統。此外,若要使用加密的 SSL 連線,則必須如管理憑證中所述,信任伺服器憑證。

Procedure在主機上配置 Kerberos V5

您必須在將要執行 LDAP 用戶端的主機電腦上配置 Kerberos V5。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 請根據安裝指示進行 Kerberos V5 的安裝。

    Sun 建議安裝 Sun Enterprise Authentication Mechanism 1.0.1 用戶端軟體。

  2. 配置 Kerberos 軟體。

    使用 Sun Enterprise Authentication Mechanism 軟體,配置 /etc/krb5 下的檔案。此配置可設定 kdc 伺服器,並定義預設範圍與您的 Kerberos 系統所需的所有其他配置。

  3. 請視需要修改檔案 /etc/gss/mech,使 kerberos_v5 成為第一個列出的值。

Procedure指定 Kerberos 認證的 SASL 選項

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 使用以 GSSAPI 機制啟用的用戶端應用程式前,請先以使用者主體初始化 Kerberos 安全性系統。


    $ kinit user-principal
    

    其中 user-principal 是您的 SASL 身份識別,如 bjensen@example.com

  2. 指定使用 Kerberos 時所需的 SASL 選項。

    請注意,在 UNIX 環境中,必須將 SASL_PATH 環境變數設為 SASL 程式庫的正確路徑。以 Korn shell 為例:


    $ export SASL_PATH=SASL-library
    

    此路徑假設目錄伺服器安裝於呼叫 LDAP 工具的相同主機上。

    ldapsearch 工具的下列範例說明如何使用 -o (小寫字母 o) 選項,指定使用 Kerberos 時所需的 SASL 選項:


    $ ldapsearch -h www.host1.com -p 1389 -o mech=GSSAPI -o authid="bjensen@EXAMPLE.COM" \
     -o authzid="bjensen@EXAMPLE.COM" -b "dc=example,dc=com" "(givenname=Richard)"

    authid 可以省略,因為它會出現在 kinit 指令所初始化的 Kerberos 快取中。如果 authid 存在,authidauthzid 必須完全相同,但並不會使用為代理伺服器作業所設定的 authzidauthid 的值為身份識別對映中所使用的主體。主體必須是完整的,其中必須包含範圍。請參閱GSSAPI 身份識別對映

使用 GSSAPI 與 SASL 配置 Kerberos 認證的範例

為目錄伺服器配置 Kerberos 有時是很複雜的作業。您應以 Kerberos 文件做為首要參考資料。

如需更多說明,請以下列範例程序評估所應執行的步驟。但請注意,此程序僅是範例。您必須根據本身的配置與環境,適當地修改此程序。

如需有關在 Solaris 作業系統中配置及使用 Kerberos 的更多資訊,請參閱「System Administration Guide: Security Services」。此指南是 Solaris 文件集的一部分。您也可以參考線上手冊。

    此範例與前述步驟的相關資訊如下:

  1. 此範例的假設

  2. 所有機器:編輯 Kerberos 用戶端配置檔

  3. 所有機器:編輯管理伺服器 ACL 配置檔

  4. KDC 機器:編輯 KDC 伺服器配置檔

  5. KDC 機器:建立 KDC 資料庫

  6. KDC 機器:建立管理主體與 Keytab

  7. KDC 機器:啟動 Kerberos 常駐程式

  8. KDC 機器:增加 KDC 與目錄伺服器機器的主機主體

  9. KDC 機器:增加目錄伺服器的 LDAP 主體

  10. KDC 機器:為 KDC 增加測試使用者

  11. 目錄伺服器機器:安裝目錄伺服器

  12. 目錄伺服器機器:配置目錄伺服器以啟用 GSSAPI

  13. 目錄伺服器機器:建立目錄伺服器 Keytab

  14. 目錄伺服器機器:為目錄伺服器增加測試使用者

  15. 目錄伺服器機器:以測試使用者的身份取得 Kerberos 票證

  16. 用戶端機器:透過 GSSAPI 對目錄伺服器進行認證

此範例的假設

此範例中的程序說明如何將一部機器配置成為金鑰分配中心 (KDC),並將另一部機器配置成執行目錄伺服器的機器。完成此程序後,使用者即可透過 GSSAPI 執行 Kerberos 認證。

在同一部機器上可同時執行 KDC 與目錄伺服器。若選擇在同一部機器上同時執行兩者,請使用相同的程序,但可在目錄伺服器機器的步驟中省略已對 KDC 機器執行過的部分。

此程序對於所使用的環境有許多相關假設。使用範例程序時,請根據您的環境適當地修改其值。這些假設包含:

所有機器:編輯 Kerberos 用戶端配置檔

/etc/krb5/krb5.conf 配置檔中含有可讓 Kerberos 用戶端與 KDC 通訊的必要資訊。

在 KDC 機器、目錄伺服器機器,以及任何將使用 Kerberos 對目錄伺服器進行認證的用戶端機器上,編輯 /etc/krb5/krb5.conf 配置檔。

更新的 /etc/krb5/krb5.conf 配置檔應如下列範例的內容所示。


範例 5–1 編輯後的 Kerberos 用戶端配置檔 /etc/krb5/krb5.conf


#pragma ident   "@(#)krb5.conf  1.2     99/07/20 SMI"
# Copyright (c) 1999, by Sun Microsystems, Inc.
# All rights reserved.
#
# krb5.conf template
# In order to complete this configuration file
# you will need to replace the __<name\>__ placeholders
# with appropriate values for your network.
#

[libdefaults]
        default_realm = EXAMPLE.COM
[realms]
        EXAMPLE.COM = {
                kdc = kdc.example.com
                admin_server = kdc.example.com
        }
[domain_realm]
        .example.com = EXAMPLE.COM
[logging]
        default = FILE:/var/krb5/kdc.log
        kdc = FILE:/var/krb5/kdc.log
        kdc_rotate = {

# How often to rotate kdc.log. Logs will get rotated no more
# often than the period, and less often if the KDC is not used
# frequently.
                period = 1d

# how many versions of kdc.log to keep around (kdc.log.0, kdc.log.1, ...)
                versions = 10
        }

[appdefaults]
        kinit = {
                renewable = true
                forwardable= true
        }
        gkadmin = {
                help_url =
 http://docs.sun.com:80/ab2/coll.384.1/SEAM/@AB2PageView/1195
        }

所有機器:編輯管理伺服器 ACL 配置檔

/etc/krb5/kadm5.acl 配置檔中,將 "___default_realm___" 取代為 "EXAMPLE.COM"。更新的檔案應如下列範例所示。


範例 5–2 編輯後的管理伺服器 ACL 配置檔


#
# Copyright (c) 1998-2000 by Sun Microsystems, Inc.
# All rights reserved.
#
# pragma ident   "@(#)kadm5.acl  1.1     01/03/19 SMI"
*/admin@EXAMPLE.COM *

KDC 機器:編輯 KDC 伺服器配置檔

編輯 /etc/krb5/kdc.conf 檔案,將 "___default_realm___" 取代為 "EXAMPLE.COM"。更新的檔案應如下列範例所示。


範例 5–3 編輯後的 KDC 伺服器配置檔 /etc/krb5/kdc.conf


# Copyright 1998-2002 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident  "@(#)kdc.conf   1.2     02/02/14 SMI"

[kdcdefaults]
        kdc_ports = 88,750

[realms]
        EXAMPLE.COM = {
                profile = /etc/krb5/krb5.conf
                database_name = /var/krb5/principal
                admin_keytab = /etc/krb5/kadm5.keytab
                acl_file = /etc/krb5/kadm5.acl
                kadmind_port = 749
                max_life = 8h 0m 0s
                max_renewable_life = 7d 0h 0m 0s
                default_principal_flags = +preauth
        }

KDC 機器:建立 KDC 資料庫


$ /usr/sbin/kdb5_util create -r EXAMPLE.COM -s
Initializing database ’/var/krb5/principal’ for realm ’EXAMPLE.COM’,
master key name ’K/M@EXAMPLE.COM’
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: password
Re-enter KDC database master key to verify: password
$

KDC 機器:建立管理主體與 Keytab

使用下列指令,建立具有 kws/admin@EXAMPLE.COM 主體與管理常駐程式所將使用之服務金鑰的管理使用者。


$ /usr/sbin/kadmin.local
kadmin.local:  add_principal kws/admin
Enter password for principal "kws/admin@EXAMPLE.COM": secret
Re-enter password for principal "kws/admin@EXAMPLE.COM": secret
Principal "kws/admin@EXAMPLE.COM" created.
kadmin.local:  ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc.example.com
Entry for principal kadmin/kdc.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local:  ktadd -k /etc/krb5/kadm5.keytab changepw/kdc.example.com

Entry for principal changepw/kdc.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local:  ktadd -k /etc/krb5/kadm5.keytab kadmin/changepw
Entry for principal kadmin/changepw with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local:  quit$

KDC 機器:啟動 Kerberos 常駐程式

執行下列指令,以啟動 KDC 與管理常駐程式:


$ /etc/init.d/kdc start
$ /etc/init.d/kdc.master start
$

KDC 程序會以 /usr/lib/krb5/krb5kdc 的形式顯示在程序清單中。管理常駐程式會顯示為 /usr/lib/krb5/kadmind

請注意,Solaris 10 作業系統中的常駐程式係由「服務管理功能 (SMF)」架構所管理。在 Solaris 10 作業系統上啟動常駐程式:


$ svcadm disable network/security/krb5kdc
$ svcadm enable network/security/krb5kdc
$ svcadm disable network/security/kadmin
$ svcadm enable network/security/kadmin
$

KDC 機器:增加 KDC 與目錄伺服器機器的主機主體

使用以下一系列的指令,為 KDC 與目錄伺服器機器的 Kerberos 資料庫增加主機主體。klist 等特定 Kerberos 公用程式會使用主機主體。


$ /usr/sbin/kadmin -p kws/admin
Enter Password: secret
kadmin:  add_principal -randkey host/kdc.example.com
Principal "host/kdc.example.com@EXAMPLE.COM" created.
kadmin:  ktadd host/kdc.example.com
Entry for principal host/kdc.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab.
kadmin:  add_principal -randkey host/directory.example.com
Principal "host/directory.example.com@EXAMPLE.COM" created.
kadmin:  ktadd host/directory.example.com
Entry for principal host/directory.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab.
kadmin:  quit
$

KDC 機器:增加目錄伺服器的 LDAP 主體

目錄伺服器必須具有本身的主體,才能對進行認證的使用者驗證其所持有之 Kerberos 票證。目錄伺服器目前採用硬式編碼要求 ldap/fqdn@realm 形式的主體,其中 fqdn 是目錄伺服器完全合格的網域名稱,而 realm 是 Kerberos 範圍。fqdn 必須符合安裝目錄伺服器時所提供之完全合格的名稱。在此情況下,目錄伺服器的主體將是 ldap/directory.example.com@EXAMPLE.COM

使用以下一系列的指令,建立目錄伺服器的 LDAP 主體:


$ /usr/sbin/kadmin -p kws/admin 
Enter Password: secret 
kadmin: add_principal -randkey ldap/directory.example.com 
Principal "ldap/directory.example.com@EXAMPLE.COM" created. 
kadmin: quit 
$

KDC 機器:為 KDC 增加測試使用者

Kerberos 資料庫中必須有進行認證的使用者,才能執行 Kerberos 認證。在此範例中,使用者的使用者名稱為 kerberos-test,這表示 Kerberos 主體為 kerberos-test@EXAMPLE.COM

使用此範例中的指令序列建立使用者:


$ /usr/sbin/kadmin -p kws/admin
Enter Password: secret
kadmin:  add_principal kerberos-test
Enter password for principal "kerberos-test@EXAMPLE.COM": secret

Re-enter password for principal "kerberos-test@EXAMPLE.COM": secret

Principal "kerberos-test@EXAMPLE.COM" created.
kadmin:  quit
$

目錄伺服器機器:安裝目錄伺服器

安裝 Directory Server 6.0 與最新的修補程式。以下是範例設定。

變數類型 

範例值 

完全合格的電腦名稱 

directory.example.com

安裝目錄 

/opt/SUNWdsee

實例路徑 

/local/ds

伺服器使用者 

unixuser

伺服器群組 

unixgroup

伺服器識別碼 

directory

伺服器連接埠 

389

尾碼 

dc=example,dc=com

管理員 ID 

admin

管理網域 

example.com

目錄伺服器管理員 DN 

cn=admin,cn=Administrators,cn=config

管理連接埠 

390

目錄伺服器機器:配置目錄伺服器以啟用 GSSAPI

首先建立 /data/ds/shared/bin/gssapi.ldif 檔案以定義目錄伺服器所應使用的對映,再根據主體識別進行認證的 Kerberos 使用者。建立下列範例中所顯示的相同檔案內容。


範例 5–4 gssapi.ldif 檔案內容


dn: cn=GSSAPI,cn=identity mapping,cn=config
changetype: add
objectClass: top
objectClass: nsContainer
cn: GSSAPI
dn: cn=default,cn=GSSAPI,cn=identity mapping,cn=config
changetype: add
objectClass: top
objectClass: nsContainer
objectClass: dsIdentityMapping
objectClass: dsPatternMatching
cn: default
dsMatching-pattern: \${Principal}
dsMatching-regexp: (.*)@EXAMPLE.COM
dsMappedDN: uid=\$1,ou=People,dc=example,dc=com

dn: cn=SASL,cn=security,cn=config
changetype: modify
replace: dsSaslPluginsPath
dsSaslPluginsPath: /usr/lib/mps/sasl2/libsasl.so

接著使用 ldapmodify 指令更新目錄伺服器,以啟用具有適當對映的 GSSAPI,如下列範例所示:


$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -a -f /data/ds/shared/bin/gssapi.ldif
adding new entry cn=GSSAPI,cn=identity mapping,cn=config
adding new entry cn=default,cn=GSSAPI,cn=identity mapping,cn=config
modifying entry cn=SASL,cn=security,cn=config
$

目錄伺服器機器:建立目錄伺服器 Keytab

如前所述,目錄伺服器必須在 KDC 中具有本身的主體,才能透過 GSSAPI 認證 Kerberos 使用者。為使認證正確運作,主體資訊必須位於目錄伺服器機器的 Kerberos keytab 中。此項資訊必須位於執行目錄伺服器的使用者帳號可讀取的檔案中。

使用下列指令序列,建立具有正確特性的 keytab 檔案:


$ /usr/sbin/kadmin -p kws/admin
Enter Password: secret
kadmin:  ktadd -k //local/ds/config/ldap.keytab ldap/directory.example.com
Entry for principal ldap/directory.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab
 WRFILE:/local/ds/config/ldap.keytab.
kadmin:  quit
$

變更此自訂 keytab 中的權限與所有權。讓用以執行目錄伺服器的使用者帳號擁有此 keytab,且只有該名使用者可加以讀取:


$ chown unixuser:unixgroup /local/ds/config /ldap.keytab
$ chmod 600 /local/ds/config/ldap.keytab
$

目錄伺服器預設會嘗試使用 /etc/kerb5/krb5.keytab 檔案中的標準 Kerberos keytab。但若讓目錄伺服器使用者可讀取此檔案,將會構成安全性風險,為目錄伺服器建立自訂 keytab 的用意即在於此。

配置目錄伺服器以使用新的自訂 keytab。請設定 KRB5_KTNAME 環境變數,以執行此作業。

最後,請重新啟動目錄伺服器,變更方可生效:


$ KRB5_KTNAME=/etc/krb5/ldap.keytab dsadm restart /local/ds 

目錄伺服器機器:為目錄伺服器增加測試使用者

若要對目錄伺服器認證 Kerberos 使用者,使用者必須有目錄項目可對應於其 Kerberos 主體。

在上一個步驟中,測試使用者以 kerberos-test@EXAMPLE.COM 的主體增加到 Kerberos 資料庫中。由於身份識別對映配置已增加到目錄中,因此該名使用者的對應目錄項目必須具有 DN uid=kerberos-test,ou=People,dc=example,dc=com

在目錄中增加使用者之前,必須以下列內容建立檔案 testuser.ldif


範例 5–5 新的 testuser.ldif 檔案


dn: uid=kerberos-test,ou=People,dc=example,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: kerberos-test
givenName: Kerberos
sn: Test
cn: Kerberos Test
description: An account for testing Kerberos authentication through GSSAPI

接著,請使用 ldapmodify 將此項目增加到伺服器中:


$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -f testuser.ldif
adding new entry uid=kerberos-test,ou=People,dc=example,dc=com
$

目錄伺服器機器:以測試使用者的身份取得 Kerberos 票證

測試使用者存在於 Kerberos 資料庫、目錄伺服器與 KDC 中。因此,現在可以透過 GSSAPI 使用 Kerberos,利用測試使用者的身份,對目錄伺服器進行認證。

首先,請使用 kinit 指令取得使用者的 Kerberos 票證,如下列範例所示:


$ kinit kerberos-test
Password for kerberos-test@EXAMPLE.COM: secret
$

接著,請使用 klist 指令檢視此票證的相關資訊:


$ klist
Ticket cache: /tmp/krb5cc_0
Default principal: kerberos-test@EXAMPLE.COM

Valid starting            Expires                   Service principal
Sat Jul 24 00:24:15 2004  Sat Jul 24 08:24:15 2004  krbtgt/EXAMPLE.COM@EXAMPLE.COM
        renew until Sat Jul 31 00:24:15 2004
$

用戶端機器:透過 GSSAPI 對目錄伺服器進行認證

最後一個步驟是使用 GSSAPI,對目錄伺服器進行認證。目錄伺服器隨附的 ldapsearch 公用程式可支援 SASL 認證,包含 GSSAPI、DIGEST-MD5 與 EXTERNAL 等機制。但若要使用 GSSAPI 進行連結,則必須為用戶端提供 SASL 程式庫的路徑。將 SASL_PATH 環境變數設為 lib/sasl 目錄,以提供路徑:


$ SASL_PATH=SASL-library
$ export SASL_PATH
$

若要實際使用 ldapsearch 對目錄伺服器執行 Kerberos 型認證,則必須納入 -o mech=GSSAPI-o authzid=principal 引數。

此外,還必須指定完全合格的主機名稱,在此案例中為 -h directory.example.com,此名稱必須與伺服器之 cn=confignsslapd-localhost 屬性值相符。在此必須使用 -h 選項,因為 GSSAPI 認證程序中必須要有用戶端所提供的主機名稱,用以比對伺服器所提供的主機名稱。

下列範例將在 dc=example,dc=com 項目認證為先前所建立的 Kerberos 測試使用者帳號時,擷取此項目:


$ ldapsearch -h directory.example.com -p 389 -o mech=GSSAPI \
 -o authzid="kerberos-test@EXAMPLE.COM" -b "dc=example,dc=com" -s base "(objectClass=*)"
version: 1
dn: dc=example,dc=com
dc: example
objectClass: top
objectClass: domain
$

查看目錄伺服器存取記錄,以確定認證是否已如預期般進行處理:


$ tail -12 /local/ds/logs/access

[24/Jul/2004:00:30:47 -0500] conn=0 op=-1 msgId=-1 - fd=23 slot=23 LDAP 
		connection from 1.1.1.8 to 1.1.1.8
[24/Jul/2004:00:30:47 -0500] conn=0 op=0 msgId=1 - BIND dn="" method=sasl 
     version=3 mech=GSSAPI
[24/Jul/2004:00:30:47 -0500] conn=0 op=0 msgId=1 - RESULT err=14 tag=97 
     nentries=0 etime=0, SASL bind in progress
[24/Jul/2004:00:30:47 -0500] conn=0 op=1 msgId=2 - BIND dn="" method=sasl 
     version=3 mech=GSSAPI
[24/Jul/2004:00:30:47 -0500] conn=0 op=1 msgId=2 - RESULT err=14 tag=97 
     nentries=0 etime=0, SASL bind in progress
[24/Jul/2004:00:30:47 -0500] conn=0 op=2 msgId=3 - BIND dn="" method=sasl 
     version=3 mech=GSSAPI
[24/Jul/2004:00:30:47 -0500] conn=0 op=2 msgId=3 - RESULT err=0 tag=97 
     nentries=0 etime=0 dn="uid=kerberos-test,ou=people,dc=example,dc=com"
[24/Jul/2004:00:30:47 -0500] conn=0 op=3 msgId=4 - SRCH base="dc=example,dc=com"
     scope=0 filter="(objectClass=*)" attrs=ALL
[24/Jul/2004:00:30:47 -0500] conn=0 op=3 msgId=4 - RESULT err=0 tag=101 nentries=1 
     etime=0
[24/Jul/2004:00:30:47 -0500] conn=0 op=4 msgId=5 - UNBIND
[24/Jul/2004:00:30:47 -0500] conn=0 op=4 msgId=-1 - closing - U1
[24/Jul/2004:00:30:48 -0500] conn=0 op=-1 msgId=-1 - closed.
$

此範例說明連結為三步驟的程序。前兩個步驟會傳回 LDAP 結果 14 (SASL 連結進行中),而第三個步驟說明連結已順利完成。method=sasl mech=GSSAPI 標記說明連結採用 GSSAPI SASL 機制。成功連結回應結尾處的 dn="uid=kerberos-test,ou=people,dc=example,dc=com",說明連結已由適當的使用者身份執行。

傳遞式認證

傳遞式認證 (PTA) 是一項可讓連結請求據以依照連結 DN 進行篩選的機制。一部目錄伺服器 (委託方) 在收到連結請求後,即可根據篩選器洽詢其他目錄伺服器 (委託),以認證連結請求。此外,此功能中的 PTA 外掛程式還可讓委託方目錄伺服器,針對未必儲存在其本機資料庫中的項目,接受簡單密碼型連結作業。

DSCC 亦可使用 PTA 外掛程式,與伺服器進行私密通訊。在 DSCC 中註冊伺服器實例時,即會啟用 PTA 外掛程式,並將 DSCC URL 增加為引數。


$ dsconf get-plugin-prop -h host -p port "Pass Through Authentication" enabled argument
argument  :  ldap://DSCC_URL:DSCC_PORT/cn=dscc
enabled   :  on

備註 –

請儘可能避免在您自己的使用中修改 PTA 外掛程式。修改 PTA 外掛程式可能會導致 DSCC 的存取問題。


若必須修改 PTA 外掛程式,請務必執行下列動作:

若已停用 PTA 外掛程式,或 DSCC URL 已從引數中移除,則伺服器實例在 DSCC 中將顯示為 inaccessible。若發生此情況,DSCC 會自動讓您選擇是否要重設 PTA 外掛程式。