Sun Java System Web Server 7.0 管理员指南

第 6 章 证书和密钥

本章介绍了如何使用证书和密钥验证来确保 Sun Java System Web Server 的安全性。还介绍了如何激活用于保护您的数据、拒绝入侵者访问和允许所需的访问的各种安全功能。

在阅读本章之前,您应该已经熟悉公钥加密的基本概念。这些概念包括加密和解密、公钥和私钥、数字证书以及加密协议。

使用证书进行验证

验证是确认身份的过程。在网络交互环境中,验证是一方对另一方身份确认的过程。证书是支持验证的一种方法。

证书中包含的数字数据指定了个人、公司或其他实体的名称,并证明证书中包含的公钥属于该实体。客户机和服务器都可以拥有证书。

证书由证书授权机构(即 CA)颁发并进行数字签名。CA 可以是通过 Internet 销售证书的公司,也可以是负责为您公司的内联网或外部网颁发证书的部门。您可以将您充分信任的 CA 确定为其他用户身份的检验器。

除了公钥和由证书标识的实体名称之外,证书还包括到期日期、颁发该证书的 CA 的名称和颁发该证书的 CA 的“数字签名”。


注 –

在激活加密之前必须安装服务器证书。


服务器验证

服务器验证指客户机对服务器进行的信任识别;即对被认为要对位于特定网络地址的服务器负责的组织进行识别。

客户机验证

客户机验证指服务器对客户机进行的信任识别;即对被认为要使用客户机软件的用户的识别。客户机可以有多个证书,如同一个人可以有几个不同的身份一样。

证书密钥类型

除 RSA 密钥之外,Sun Java System Web Server 7.0 还引入了对椭圆曲线加密算法 (Elliptic Curve Cryptography, ECC) 的支持。

ECC 为新兴算法,因为与传统密码学系统(如 RSA)相比,它是更富有吸引力的公钥加密系统,它使用更小的密钥大小,但可提供同样的安全性,这使计算更快,降低了能耗,并节省了内存和带宽。椭圆曲线加密算法 (Elliptic Curve Cryptography, ECC) 已被美国政府认可。

现在,可以选择是使用 RSA 密钥还是 ECC 密钥来生成证书请求或自签名证书。

对于 RSA 密钥,可以提供不同的密钥大小(密钥大小越大,加密效果越好。默认密钥大小为 1024)。对于 ECC 密钥,您应选择要用哪种曲线生成密钥对。各个组织(ANSI X9.62、NIST、SECG)已指定多种曲线,Sun Java System Web Server 7.0 支持当前指定的所有曲线。

如果打算从 CA 请求证书(而不使用自签名证书),请务必先与首选 CA 联系,获取有关 ECC 用法的最新信息。就您的情况,询问他们是否推荐使用特定的 ECC 曲线。如果您的 CA 或组织内部策略并未提供选择曲线的指导,请参考以下给出的某些建议。请谨记,ECC 是一种新兴技术,所以此文件正在编写时,特定使用情况的曲线建议可能已经有所更改。

以下列出了一些支持的 ECC 曲线:

prime256v1 

secp256r1 

nistp256 

secp256k1 

secp384r1 

nistp384 

secp521r1 

nistp521 

sect163k1 

nistk163 

sect163r1 

sect163r2 

nistb163 

sect193r1 

sect193r2 

sect233k1 

nistk233k1 

nistk233 

sect233r1 

nistb233 

sect239k1 

sect283k1 

nistk283 

sect283r1 

nistb283 

sect409k1 

nistk409 

sect571k1 

nistk571 

sect571r1 

nistb571 

secp160k1 

secp160r1 

secp160r2 

secp192k1 

secp192r1 

nistp192 

secp224k1 

secp224r1 

nistp224 

prime192v1 

创建自签名证书

如果不需要 CA 签署的证书,或者希望在 CA 签署证书的同时测试新的 SSL 实现,则可以生成自签名证书。此临时证书将在客户机浏览器中生成错误,以表明签署证书的授权机构未知且不受信任。

要通过 CLI 创建自签名证书,请执行以下命令:


wadm> create-selfsigned-cert --user=admin --port=8989 --password-file=admin.pwd 
--config=config1 --token=internal --org-unit=org1 --locality=XYZ --state=DEF 
--validity=10 --org=sun --country=ABC --server-name=serverhost --nickname=cert1

请参见 CLI 参考 create-selfsigned-cert(1)

管理证书

请求证书

证书中包含的数字数据指定了个人、公司或其他实体的名称,并证明证书中包含的公钥属于该个人。启用 SSL 的服务器必须具有证书,客户机有无证书均可。

证书由证书授权机构(即 CA)颁发并进行数字签名。CA 可以是通过 Internet 销售证书的公司,也可以是负责为您公司的内联网或外部网颁发证书的部门。您可以将您充分信任的 CA 确定为其他用户身份的检验器。

您可以请求证书并将其提交到证书授权机构 (Certificate Authority, CA)。如果公司有自己的内部 CA,则可以向其申请证书。如果打算从商业 CA 处购买证书,请选择一个 CA 并索要所需的特定格式信息。您还可以为服务器创建自签名证书。自签名证书不适用于面向 Internet 的部署,但对于开发和测试却很有帮助,因为它们使您在无需 CA 介入的情况下即可设置测试服务器。

如上所述,证书包含实体(此例中为 Web 服务器)的公钥。公钥是根据特定的算法而生成(证书中还对该算法类型进行了编码)。下一节介绍有关 Web Server 对其密钥支持的算法类型的背景。

Procedure请求证书

  1. 单击“服务器证书”选项卡 >“请求”按钮。

  2. 选择配置

    从需要为其安装证书的配置列表中选择一个配置。

  3. 选择令牌

    选择包含密钥的令牌(加密设备)。如果密钥存储在由 Sun Java System Web Server 7.0 维护的本地密钥数据库中,请选择内部令牌。如果密钥存储在智能卡或者其他外部设备或引擎中,请从下拉式列表框中选择外部令牌的名称。输入选定令牌的密码。

  4. 输入详细信息

    开始请求过程之前,请确保您了解 CA 所需的信息。无论是从商业 CA 还是内部 CA 请求服务器证书,都需要提供以下信息:

    • 服务器名必须是在 DNS 查找中使用的全限定主机名(例如,www.sun.com)。这是浏览器用于连接至您站点的 URL 中的主机名。如果这两个名称不匹配,客户机将收到证书名称与站点名称不匹配的通知,并怀疑您的证书的真实性。

      如果从内部 CA 申请证书,也可以在此字段中输入通配符或正则表达式。多数供应商都不会批准在通用名称中输入通配符或正规表达式的证书请求。

    • 组织是公司、教育机构、合作伙伴等的正式而合法的名称。多数 CA 需要您使用法律文档(例如营业执照副本)来验证此信息。

    • 组织单位是用于说明公司中组织的可选字段。也可以用于标注不太正式的公司名称(不带 Inc.Corp. 等等)。

    • 地址是通常用于说明组织所在的城市、公国的可选字段。

    • 省/自治区/直辖市为可选字段。

    • 国家/地区是必填的,即您所在国家/地区名称的两个字符的缩写(以 ISO 格式)。美国的国家代码为 US。

    所有这些信息组合为一系列属性值对(称为标识名 [DN]),用于形成证书的主题。

  5. 选择证书选项

    您必须提供密钥信息。您可以选择 RSA 或 ECC 密钥类型。如果密钥类型为 RSA,则密钥大小可以为 1024、2048 或 4098。如果密钥类型为 ECC,则您还需要选择曲线。请谨记,生成新的密钥对需要花费时间。密钥长度越长,向导生成它所需的时间越长。


    注意 – 注意 –

    请务必选择 CA(稍后会向其提交签署请求)可以支持的密钥类型。


  6. 选择证书类型

    为自签名证书或 CA 签署的证书选择证书签署授权机构 (Certificate Signing Authority, CSA)。如果选择自签名证书,则还可以关联证书的 HTTP 侦听器。也可以在以后执行此操作。

  7. 生成请求

    如果是 CA 签名证书,生成的证书请求将以 ASCII 格式提供。如果是自签名证书,则生成的证书将直接安装。如果为自签名类型,请为昵称、有效期(月份)和 HTTP 侦听器名称提供相应的值以便处理安全请求。

  8. 查看结果

    此页面为您提供了选定选项的摘要。单击“完成”可以完成请求的生成。


    注 –

    使用 CLI

    要通过 CLI 请求证书,请执行以下命令:


    wadm> create-cert-request --user=admin --password-file=admin.pwd 
    --host=serverhost --port=8989 --config=config1 --server-name=servername.org 
    --org=sun --country=ABC --state=DEF --locality=XYZ --token=internal

    请参见 CLI 参考 create-cert-request(1)

安装证书

从 CA 获取证书后,您可以使用管理控制台为配置安装此证书。

Procedure安装证书

  1. 单击“服务器证书”选项卡 >“安装”按钮。

  2. 选择配置

    从需要为其安装证书的配置列表中选择一个配置。

  3. 选择令牌

    选择包含密钥的令牌(加密设备)。如果密钥存储在由 Sun Java System Web Server 7.0 维护的本地密钥数据库中,请选择内部令牌。如果密钥存储在智能卡或者其他外部设备或引擎中,请从下拉式列表框中选择外部令牌的名称。输入选定令牌的密码。

  4. 输入证书数据

    将证书文本粘贴到所提供的文本区域中。复制并粘贴文本时,请确保包含标头 "Begin Certificate" 和 "End Certificate",其中包含起始和终止连字符。您也可以单击“浏览”按钮并手动选择 .DER 文件。

  5. 提供证书详细信息

    提供将用于此证书的昵称。从可用列表中选择 HTTP 侦听器以便处理安全请求。

  6. 查看结果

    此页面为您提供了选定选项的摘要。单击“完成”可以完成安装过程。


    注 –

    使用 CLI

    要通过 CLI 安装证书,请执行以下命令:


    wadm> install-cert --user=admin --port=8989  --password-file=admin.pwd 
    --config=config1 --token=internal --cert-type=server --nickname=cert1 cert.req

    其中 cert.req 包含证书数据。

    请参见 CLI 参考 install-cert(1)


更新证书

要更新现有证书,请执行以下步骤:

Procedure更新证书

  1. 单击“服务器证书”选项卡>“证书名”>“更新”按钮。

  2. 提供令牌信息

    输入令牌密码(如果需要)。否则,单击“下一步”继续进行操作。

  3. 更新证书详细信息

    查看证书详细信息,并提供有效期(以月份为单位)。

  4. 更新密钥信息

    您可以选择 RSA 或 ECC 密钥类型。如果密钥类型为 RSA,则密钥大小可以为 1024、2048 或 4098。如果密钥类型为 ECC,则您还需要选择曲线。请谨记,生成新的密钥对需要花费时间。

  5. 查看摘要

    此页面为您提供了选定选项的摘要。单击“完成”以完成更新过程。

删除证书

要删除证书,请执行以下任务:

Procedure删除证书

  1. 单击“服务器证书”选项卡。

  2. 选择证书

    从证书列表中选择相应的证书名。

  3. 删除证书

    单击“删除”按钮以删除选定证书。


    注 –

    使用 CLI

    要通过 CLI 删除证书,请执行以下命令:


    wadm> delete-cert --user=admin --port=8989  --password-file=admin.pwd 
    --token=internal --config=config1 cert1

    请参见 CLI 参考 delete-cert(1)


更新 Administration Server 证书

要更新管理服务器证书,请执行 CLI 命令 renew-admin-certs。使用此命令可更新昵称为 Admin-CA-Cert Admin-Server-CertAdmin-Client-Cert 的管理认证。此命令还可以更新当前正在运行且使用更新的证书可以访问的节点。

执行此命令后,建议重新启动管理服务器和节点,以便新证书能够生效。如果在更新证书的过程中,节点处于脱机状态(未运行或由于网络问题无法访问),必须重新注册该节点。要更新管理服务器证书,请执行以下命令:


wadm> renew-admin-certs --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --validity=120

请参见 CLI 参考 renew-admin-certs(1)

管理证书撤销列表 (Certificate Revocation List, CRL)

证书撤销列表 (Certificate Revocation List, CRL) 用于列出客户机或服务器用户不应再信任的所有证书和密钥。如果证书中的数据发生变化(例如,用户在证书到期之前换单位或离职),该证书将被撤销,并且其数据将显示在 CRL 中。CRL 由 CA 生成并定期更新。

Procedure安装 CRL

要从 CA 获得 CRL,请执行以下步骤:

  1. 从 CA 获取文件形式的 CRL。

  2. 转至管理控制台中的配置页面。

  3. 单击“证书”>“证书授权机构”选项卡。

  4. 单击“安装 CRL”按钮

  5. 输入关联文件的完整路径名。

  6. 单击“确定”。


    注 –

    如果数据库中已存在 CRL,则将显示“替换证书撤销列表”页面。


  7. 您可能需要单击“部署”才可以使更改生效。


    注 –

    使用 CLI

    要通过 CLI 安装 CRL,请执行以下命令:


    wadm> install-crl --user=admin --password-file=admin.pwd 
    --host=serverhost --port=8989 --config=config1 data/install-crl/ServerSign.crl

    请参见 CLI 参考 install-crl(1)

Procedure删除 CRL

  1. 转至管理控制台中的配置页面。

  2. 单击“证书”>“证书授权机构”选项卡。

  3. 选择 CRL 条目并单击“删除”。

  4. 您可能需要单击“部署”才可以使更改生效。


    注 –

    使用 CLI

    要通过 CLI 删除 CRL,请执行以下命令:


    wadm> delete-crl --user=admin --password-file=admin.pwd 
    --host=serverhost --port=8989 --config=config1 issuer

    请参见 CLI 参考 delete-crl(1)


设置内部令牌的密码

要设置内部 PKCS11 令牌的密码,请执行以下操作:

Procedure设置令牌密码

  1. 转至管理控制台中的配置页面。

  2. 单击“证书”>“PKCS11 令牌”选项卡。

  3. 单击 PKCS11 令牌名称(默认为内部)。

  4. 选中“令牌状态”复选框。

  5. 输入密码信息。

  6. 如果不希望在启动实例时提示输入密码,请选中“不要在启动实例时提示输入新密码”复选框。单击“确定”。

  7. 密码将保存在配置中。要删除密码,请执行上述步骤,并选择“未设置密码”选项。


    注 –

    使用 CLI

    要通过 CLI 为内部 PKCS11 令牌设置密码,请执行以下命令:


    wadm> set-token-pin --user=admin --password-file=admin.pwd --host=serverhost 
    --port=8989 --config=config1 --token=internal

    请参见 CLI 参考 set-token-pin(1)

为服务器配置 SSL

使用命令 create-cert-request 生成请求并将请求发送到 CA。以后,在从 CA 收到证书时,则需要使用 install-cert 命令来安装证书。如果 Java 密钥库中包含希望迁移的密钥和证书,请使用 migrate-jks-keycert 命令。对于开发/测试服务器,最便捷的实现方式是使用 create-selfsigned-cert 命令来生成自签名证书。


wadm> create-selfsigned-cert --server-name=hostname --nickname=MyServerCert 
--token=internal

有关更多选项和示例,请查看手册页。

安装证书后,需要在将启用 SSL 的某端口上创建侦听器。


wadm> create-http-listener --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --listener-port=18003 --config=config1 --server-name=config1.com 
--default-virtual-server-name=config1_vs_1 config1_ls_1

现在,为该侦听器启用 SSL 并将侦听器与证书昵称关联。


wadm> set-ssl-prop --http-listener=http-listener-ssl enabled=true
wadm> set-ssl-prop --http-listener=http-listener-ssl server-cert-nickname=MyServerCert

完成此设置后,部署配置并启动实例。


wadm> deploy-config config_name
wadm> start-instance --config config_name hostname

为配置启用 SSL 加密算法

要为配置启用 SSL 加密算法,请执行以下命令:


wadm> enable-ciphers --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 --http-listener=http-listener-1 
--cipher-type=ssl2 SSL_RC4_128_WITH_MD5

请参见 CLI 参考 enable-ciphers(1)

为 HTTP 侦听器启用安全性


注 –

仅当已安装可用的证书时才能为 HTTP 侦听器启用安全性。


具有证书后,您可以将此证书与 HTTP 侦听器关联以保护服务器。

加密是转换信息的过程,因此除预期的收件人外,此过程对其他人来说意义不大。解密是转换加密信息的过程,因此,此过程又再次变得有意义。Sun Java System Web Server 支持 SSL 和 TLS 协议。

加密算法是一种用于加密或解密的密码学算法(一种数学函数)。SSL 和 TLS 协议包含多个加密算法套件。某些加密算法比其他加密算法更强大且更安全。一般而言,加密算法使用的位越多,将数据解密越难。

在任何双向加密过程中,双方都必须使用相同的加密算法。由于可以使用多种加密算法,因此需要让服务器使用最常用的加密算法。

在安全连接过程中,客户机和服务器都同意使用可以进行通信的最强大的加密算法。您可以从 SSL2、SSL3 和 TLS 协议中选择加密算法。


注 –

因为在 SSL 2.0 版本之后对 SSL 的安全性和性能进行了各种改进,所以除非客户机无法使用 SSL 3,否则不要使用 SSL 2。使用 SSL 2 加密算法无法为客户机证书提供保证。


单独的加密过程并不足以确保服务器机密信息的安全。使用加密算法的同时还必须使用密钥,以便生成真正的加密结果,或解密以前加密的信息。加密过程使用以下两种密钥获得此结果:公钥和私钥。使用公钥加密的信息只能使用关联的私钥进行解密。公钥作为证书的一部分发布,因此只有关联的私钥受到保护。

Sun Java System Web Server 支持用于加密通信的安全套接字层 (Secure Sockets Layer, SSL) 和传输层安全 (Transport Layer Security, TLS) 协议。SSL 和 TLS 是独立于应用程序的,并且可以在它们上面透明地分层运行更高级别的协议。

SSL 和 TLS 协议支持各种加密算法,用于服务器和客户机的相互验证、传输证书和建立会话密钥。客户机和服务器可以支持各种加密算法套件或加密算法集合,这取决于各种因素,例如它们所支持的协议、公司有关加密强度的政策以及政府对加密软件出口的限制。在其他函数中,SSL 和 TLS 握手协议将确定服务器和客户机如何协商以决定将用来进行通信的加密算法套件。

单击配置 > HTTP 侦听器 > 安全性选项卡,可以编辑 HTTP 侦听器安全性设置。下表列出了您可以在此页面中进行配置的属性。

表 6–1 HTTP 侦听器安全性属性

属性

说明

名称

HTTP 侦听器的名称。 

安全性

启用/禁用选定 HTTP 侦听器的安全性。 

证书

从可用证书中选择服务器证书。必须已安装 RSA 或 ECC 证书才可以执行此操作。 

客户机验证

指定客户机验证是必要的还是可选的。选择 "False" 选项可以禁用客户机验证。 

验证超时

超时值,超过该时间后,客户机验证握手就会失败。[0.001–3600]。默认值为 60 秒。

最大验证数据量

进入缓冲区的最大验证数据量。[0–2147.0483647.0]。默认值为 104857.06。

SSL 版本 2/SSL 版本 3

启用/禁用 SSL 版本 2/SSL 版本 3。 

TLS

启用/禁用 TLS。默认情况下将启用检测版本回滚。这将会配置服务器,使其检测人为版本回滚攻击尝试。为了实现与某些未正确实现 TLS 规范的客户机的互操作性,可能需要禁用 TLS。

SSL3/SSL2/TLS 加密算法

要保护 Web 服务器的安全性,应启用 SSL。您可以启用 SSL 2.0、SSL 3.0 和 TLS 加密协议并选择各种加密算法套件。可以在侦听套接字上为管理服务器启用 SSL 和 TLS。在侦听套接字上为 Server Manager 启用 SSL 和 TLS 将为所有与该侦听套接字关联的虚拟服务器设置安全首选项。

默认设置允许使用最常用的加密算法。除非有充分的理由不使用特定的加密算法套件,否则应全部启用。