Sun Java System Calendar Server 6.3 管理指南

第 7 章 配置 SSL

安全套接口层 (Secure Socket Layer, SSL) 是一种协议,用于加密和解密在客户机和具有 SSL 功能的服务器之间传输的数据,以保证安全连接。服务器负责向客户机发送用于实现加密的数字证书和公钥。如果客户机信任服务器的证书,则可建立 SSL 连接。所有从一方传输到另一方的数据都会被加密。只有客户机和服务器可解密数据。

Sun Java System 服务器支持通过检查用户的数字证书来验证用户。当客户机与服务器建立 SSL 会话时,它会显示用户的证书而非密码。如果证书通过了验证,表示用户也通过了验证。Calendar Server 支持使用 SSL 协议加密在日历客户机最终用户和 Calendar Server 之间传输的数据。为支持 SSL,Calendar Server 使用 Netscape 安全服务 (Netscape Security Services, NSS) certutil 工具的 SSL 库,Sun Java System Messaging Server 也使用这些库。NSS certutil 工具捆绑在 Calendar Server 产品的 sbin 目录中。

可以在 ics.conf 文件中配置 Calendar Server,以实现只对 Caleder Server 登录和密码进行加密或加密整个日历会话。

本章涵盖了配置 SSL 所必需的三个任务和故障排除:


注 –

Calendar Server 并不支持基于客户机的 SSL 验证。


7.1 配置 Calendar Server 的 SSL

本节说明如何配置 Calendar Server 的 SSL。

本节包含以下主题:

Procedure创建 SSL 证书数据库

网关需要证书才能将其公钥发送给客户机。证书包括网关的公钥、与网关证书相关的标识名、证书的序列号或颁发日期以及证书的到期时间。证书由认证机构 (Certification Authority, CA) 颁发,该机构会验证网关的身份。CA 为一个或多个用户所信任的机构,它负责颁发和管理 X.509 公钥证书以及 CARL 或证书撤销列表 (Certification Revocation List, CRL)。CA 是公钥基础结构 (Public Key Infrastructure, PKI) 的基本构建块。另一方面,PKI 是一组用于管理证书和公/私钥对(包括颁发、维护和撤销公钥证书的功能)的策略、进程、服务器平台、软件和工作站。

CA 会在所生成的每个证书和 CRL 中插入其名称,并使用私钥来对证书进行数字签名。直接或通过认证路径与 CA 建立信任关系后,就可信任由该 CA 颁发的证书。可通过比较其名称来轻松地识别该 CA 所颁发的证书。不过,可使用其公钥来确保证书的有效性。

CA 执行以下四个基本的 PKI 功能:

服务器的证书和密钥对代表服务器的身份。它们存储在证书数据库中,此数据库可存放在服务器内部,也可存放在外部的可移除硬件卡(智能卡)上。实现 Calendar Server 的 SSL 需要证书数据库。证书数据库必须定义 Calendar Server 的认证机构 (CA) 和证书。本部分包含概念性信息和任务信息:

开始之前

创建证书数据库之前,请先熟悉以下内容:

  1. 以超级用户 (root) 身份登录或转为超级用户。

  2. /etc/opt/SUNWics5/config/sslpassword.conf 中指定证书数据库密码。

    例如:


    # echo "password file entry" 
          /etc/opt/SUNWics5/config/sslpassword.conf

    password file entry 的格式如下:

    Internal (Software) Token: password

  3. 创建证书数据库目录。例如:


    # cd /var/opt/SUNWics5
     # mkdir alias
  4. 转到 bin 目录,生成证书数据库 (cert8.db) 和密钥数据库 (key3.db)。例如:


    # cd /opt/SUNWics5/cal/bin
     # ./certutil -N -d /etc/opt/SUNWics5/config
                     -f /etc/opt/SUNWics5/config/sslpassword.conf

    注 –

    在这一次以及其他必须运行 certutil 实用程序的时候,请完全遵照本示例,或参考 certutil 帮助页来理解语法。

    例如,在本例中,如果没有同时指定 -d /文件信息时,则不要运行带 -N 选项的实用程序。


  5. 生成默认的自签名根证书授权机构。例如:


    # ./certutil -S -n SampleRootCA -x -t "CTu,CTu,CTu"
     -s "CN=My Sample Root CA, O=sesta.com" -m 25000
     -o /etc/opt/SUNWics5/config/SampleRootCA.crt
     -d /etc/opt/SUNWics5/config
     -f /etc/opt/SUNWics5/config/sslpassword.conf -z
     /etc/passwd
  6. 生成主机的证书。例如:


    # ./certutil -S -n SampleSSLServerCert -c SampleRootCA 
     -t "u,u,u"
     -s "CN=hostname.sesta.com, O=sesta.com" -m 25001
     -o /etc/opt/SUNWics5/config/SampleSSLServer.crt
     -d /etc/opt/SUNWics5/config 
     -f /etc/opt/SUNWics5/config/sslpassword.conf
     -z /etc/passwd

    其中,hostname.sesta.com 是服务器主机名。

  7. 验证证书。例如:


    # ./certutil -V -u V -n SampleRootCA  
        -d /etc/opt/SUNWics5/config
     # ./certutil -V -u V -n SampleSSLServerCert 
       -d /etc/opt/SUNWics5/config
  8. 列出证书。例如:


    # ./certutil -L -d /etc/opt/SUNWics5/config
     # ./certutil -L -n SampleSSLServerCert 
       -d /etc/opt/SUNWics5/config
  9. 使用 modutil 列出可用的安全模块 (secmod.db)。例如:


    # ./modutil -list -dbdir /etc/opt/SUNWics5/config
  10. 将 alias 文件的所有者更改为 icsusericsgroup(或将要运行 Calendar Server 的用户和组标识)。例如:


    # find /etc/opt/SUNWics5/config -exec chown icsuser {};
     # find /etc/opt/SUNWics5/config -exec chgrp icsgroup {};

7.1.1 自签名证书

自签名证书通过网关自身的私钥来进行签名。自签名证书并不安全,但是可使用它们在签名证书可用前测试需要证书的应用程序。自签名证书将其自身的证书请求而非 CA 的签名用作签名。

在通过 PKI 创建自签名证书时,共有十个通用字段,其中六个字段为必填字段,其余四个为可选字段。序列号、证书签名算法标识符、证书颁发者名称、证书有效期、公钥和主题名称为必填字段。可选字段有版本号、两个唯一标识符和扩展名。这些可选字段仅出现在版本 2 和版本 3 证书中。

必填字段“有效期”表示证书的生效时间和到期时间。NSS certutil 中提供的默认到期时间为三个月。然而,在到期时间前,证书中的有效数据会变得不可靠。X.509 CRL 机制提供其已颁发证书的状态更新以密切关注证书的到期时间。此外,CA 也将证书的到期时间强制限制为一到两年。

证书到期或其有效期结束后,需要进行续展。续展是一种行为或过程,即通过颁发新证书来延长由公钥证书所声明的数据绑定的有效期。可使用以下命令验证证书:

-V -n certname -b validity-time -u certusage [-e] [-l] [-d certdir]

以下示例说明如何使用命令来验证证书:

certutil -V -n jsmith@netscape.com -b 9803201212Z -u SR -e -l -d certdir.

“证书数据库工具”显示与以下内容类似的结果:

Certificate:'jsmith@netscape.com' is valid.

UID=jsmith, E=jsmith@netscape.com, CN=John Smith, O=Netscape Communications Corp., C=US : Expired certificate

UID=jsmith, E=jsmith@netscape.com, CN=John Smith, O=Netscape Communications Corp., C=US : Certificate not approved for this operation

Procedure从根证书授权机构请求并导入证书

以下步骤将介绍如何生成认证请求,将请求提交给公钥基础设施 (Public Key Infrastructure, PKI) Web 站点,然后导入证书。这些说明假设您要将证书数据库放置在 config 目录下。

开始之前

证书数据库和密码文件必须处于同一目录中。此处显示的默认目录为 config 目录,但是,也可选择另一目录,这时必须如以下过程所示配置另一路径参数。

  1. 以超级用户 (root) 身份登录或转为超级用户。

  2. 转到 bin 目录:

    # cd /opt/SUNWics5/cal/bin

  3. 基于认证机构或公钥基础设施 (PKI) Web 站点,使用 certutil 生成认证请求。例如:


    # ./certutil -R -s "CN=hostname.sesta.com, 
    OU=hostname/ SSL Web Server, O=Sesta, 
    C=US" -p "408-555-1234" -o hostnameCert.req 
    -g 1024  -d /etc/opt/SUNWics5/config 
    -f /etc/opt/SUNWics5/config/sslpassword.conf  -z /etc/passwd -a

    其中,"hostname.sesta.com" 为主机名。

  4. 从认证机构或公钥基础设施 (PKI) Web 站点为 SSL Web 服务器请求一个测试证书。将 hostnameCert.req 文件的内容复制并粘贴到认证请求中。

    系统将通知您证书何时签名并可用。

  5. 将认证机构证书链和 SSL 服务器证书复制到文本文件中。

  6. 将认证机构证书链导入证书数据库以建立机构链。例如:


    # ./certutil -A -n "GTE CyberTrust Root"
        -t "TCu,TCu,TCuw" 
        -d /etc/opt/SUNWics5/config 
        -a 
        -i /export/wspace/Certificates/CA_Certificate_1.txt
        -f /etc/opt/SUNWics5/config/sslpassword.conf
    # ./certutil -A -n "Sesta TEST Root CA" 
        -t "TCu,TCu,TCuw" 
        -d /etc/opt/SUNWics5/config 
        -a 
        -i /export/wspace/Certificates/CA_Certificate_2.txt
        -f /etc/opt/SUNWics5/config/sslpassword.conf
  7. 导入已签名的 SSL 服务器证书:


    # ./certutil -A -n "hostname SSL Server Test Cert"
        -t "u,u,u" -d /etc/opt/SUNWics5/config 
        -a 
        -i /export/wspace/Certificates/SSL_Server_Certificate.txt
        -f /etc/opt/SUNWics5/config/sslpassword.conf
  8. 列出证书数据库中的证书:

    # ./certutil -L -d /etc/opt/SUNWics5/config

  9. ics.conf 文件中的 SSL 服务器昵称配置为已签名的 SSL 服务器证书,例如:"hostname SSL Server Test Cert"。

    注意:ics.conf 文件中的 service.http.calendarhostnameservice.http.ssl.sourceurl 参数的主机名应与 SSL 证书中的主机名相匹配(如果您的系统具有多个别名)。例如:calendar.sesta.com

Procedure配置 ics.conf 文件中的 SSL 参数

要在 Calendar Server 上实现 SSL,必须设置 ics.conf 文件中的特定参数。如果下表中列出的任何参数不在 ics.conf 文件中,请使用指定的值将它们添加到该文件中。由于当系统启动时(发出 start-cal 时),ics.conf 是只读的,因此只有重新启动 Calendar Server 后,这些新值才会生效。有关这些 SSL 参数的说明,参见 E.2.10 Calendar Server SSL 配置参数

  1. 以有权更改此配置的管理员身份登录。

  2. 转至 /etc/opt/SUNWics5/cal/config 目录。

  3. 通过复制和重命名旧的 ics.conf 文件来保存该文件。

  4. 编辑下表中所示的一个或多个参数:

    参数 

    值 

    encryption.rsa.nssslactivation

    "on"

    encryption.rsa.nssslpersonalityssl

    "SampleSSLServerCert"

    encryption.rsa.nsssltoken

    "internal"

    service.http.tmpdir

    "/var/opt/SUNWics5/tmp"

    service.http.uidir.path

    "html"

    service.http.ssl.cachedir

    "."

    service.http.ssl.cachesize

    "10000"

    local.ssldbpath

    "/etc/opt/SUNWics5/config"

    service.http.ssl.port.enable

    "yes"

    service.http.ssl.port

    "443"(默认 SSL 端口)


    注 –

    不在 HTTP 默认端口 "80" 上。


    service.http.securesession

    "yes"(加密整个会话)

    service.http.ssl.sourceurl

    "https://localhost:port"(提供本地主机名和 service.http.ssl.port 的值。) 开始

    service.http.ssl.ssl3.ciphers

    "rsa_red_40_md5,

    rsa_rc2_40_md5,

    rsa_des_sha,

    rsa_rc4_128_md5,

    rsa_3des_sha"

    service.http.ssl.ssl3.sessiontimeout

    "0"

    service.http.sslusessl

    "yes"

  5. 将此文件另存为 ics.conf

  6. 重新启动 Calendar Server 使上述更改生效。

    cal-svr-base/SUNWics5/cal/sbin/start-cal

7.2 Calendar Server 6.3 软件的 SSL 故障排除

首先,应定期备份证书数据库,以免发生了不可恢复的错误。本节包括备份数据库后的注意事项。

7.2.1 检查 cshttpd 进程

SSL 要求 Calendar Server cshttpd 进程正在运行。要确定 cshttpd 是否正在运行,使用以下命令:

# ps -ef | grep cshttpd

7.2.2 验证证书

要列出证书数据库中的证书并检查其有效期,请使用以下命令:

# ./certutil -L -d /etc/opt/SUNWics5/config

7.2.3 查看 Calendar Server 日志文件

查看 Calendar Server 日志文件中记录的 SSL 错误。

7.2.4 连接 SSL 端口

使用浏览器及以下 URL 连接 SSL 端口:

https://server-name:ssl-port-number

其中:

server-name 是运行 Calendar Server 的服务器的名称。

ssl-port-number 是由 ics.conf 文件中的 service.http.ssl.port 参数指定的 SSL 端口号。默认端口为 443。

7.2.5 使 cshttpd 停止侦听常规 HTTP 端口

HTTP 和 HTTPS 在不同的端口上侦听(SSL 使用 443,HTTP 使用 80),所以二者永远不可能侦听同一端口。目前,尚无法通知 cshttpd 停止侦听常规 HTTP 端口。但是,管理员可以将 service.http.port 更改为未公开的端口号。


注意 – 注意 –

请勿为了阻止 cshttpd 侦听 HTTP 而设置 service.http.enable ="no"。这样做也会导致 HTTP 故障。必须将 service.http.enableservice.http.ssl.port.enable 都设置为 "yes",SSL 才能正确配置。