本章介绍了如何使用证书和密钥验证来确保服务器的安全。还介绍了如何激活用于保护您的数据、拒绝入侵者访问和允许所需的访问的各种安全功能。
在阅读本章之前,您应该已经熟悉公钥加密的基本概念。这些概念包括加密和解密、公钥和私钥、数字证书以及加密协议。
验证是确认身份的过程。在网络交互环境中,验证是一方对另一方身份确认的过程。证书是支持验证的一种方法。
证书中包含的数字数据指定了个人、公司或其他实体的名称,并证明证书中包含的公钥属于该实体。客户机和服务器都可以拥有证书。
证书由证书授权机构(即 CA)颁发并进行数字签名。CA 可以是通过 Internet 销售证书的公司,也可以是负责为您公司的内联网或外部网颁发证书的部门。您可以将您充分信任的 CA 确定为其他用户身份的检验器。
除了公钥和由证书标识的实体名称之外,证书还包括到期日期、颁发该证书的 CA 的名称和颁发该证书的 CA 的“数字签名”。
在激活加密之前必须安装服务器证书。
服务器验证指客户机对服务器进行的信任识别;即对被认为要对位于特定网络地址的服务器负责的组织进行识别。
客户机验证指服务器对客户机进行的信任识别;即对被认为要使用客户机软件的用户的识别。客户机可以有多个证书,如同一个人可以有几个不同的身份一样。
除 RSA 密钥之外,Web Server 还引入了对椭圆曲线加密算法 (Elliptic Curve Cryptography, ECC) 的支持。
ECC 正在成为一个具有吸引力的公钥加密系统,因为与传统密码学系统(如 RSA)相比,ECC 算法使用更小的密钥大小,但可提供同样的安全性,这使计算更快,降低了能耗,并节省了内存和带宽。椭圆曲线加密算法 (Elliptic Curve Cryptography, ECC) 已被美国政府认可。
现在,可以选择是使用 RSA 密钥还是 ECC 密钥来生成证书请求或自签名证书。
对于 RSA 密钥,可以提供不同的密钥大小(密钥大小越大,加密效果越好。默认密钥大小为 1024)。对于 ECC 密钥,您应选择要用哪种曲线生成密钥对。各个组织(ANSI X9.62、NIST、SECG)命名了多种曲线,Web Server 支持当前指定的所有曲线。
如果打算从 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)。
Web Server 安装程序应将管理自签名证书导入到 IE 证书选项卡中。在使用浏览器访问管理控制台时,会显示一个弹出窗口(使用 IE6 和 Mozilla/Firefox 时)或警告页面(使用 IE7 时),说明证书不是由受信任证书颁发机构颁发的。这是因为管理服务器使用的是自签证书。要转至管理 GUI 登录页面,请执行以下操作:
在 Mozilla/Firefox 中,单击弹出式窗口中的确定按钮。
在 Internet Explorer 6 中,单击弹出式窗口中的是按钮。
在 Internet Explorer 7 中,单击页面中的“继续浏览此网站”链接。
以上过程将在相应浏览器会话中临时接受证书。要永久接受证书,请按以下步骤操作:
在 Firefox/Mozilla 中:
选中弹出式窗口中的永久接受此证书单选按钮并单击确定。
在 Internet Explorer 6.0 中:
单击弹出式窗口中的查看证书按钮。
将显示另一个弹出式窗口。
单击证书路径选项卡,然后选择 admin-ca-cert。
单击查看证书按钮,然后单击安装证书... 按钮。此操作将调用证书导入向导,可以使用该向导将管理 CA 证书导入到信任的根证书数据库中。
在 Internet Explorer 7 中:
单击警告页面中的继续浏览此网站链接。此时将显示登录页面。
单击位于地址栏旁边的证书错误链接。此时将显示警告窗口。单击查看证书链接。
执行“在 Internet Explorer 6 中”部分所述的步骤 1 至步骤 3,将管理 CA 证书导入到信任的根证书数据库中。
证书中包含的数字数据指定了个人、公司或其他实体的名称,并证明证书中包含的公钥属于该个人。启用 SSL 的服务器必须具有证书,客户机有无证书均可。
证书由证书授权机构(即 CA)颁发并进行数字签名。CA 可以是通过 Internet 销售证书的公司,也可以是负责为您公司的内联网或外部网颁发证书的部门。您可以将您充分信任的 CA 确定为其他用户身份的检验器。
您可以请求证书并将其提交到证书授权机构 (Certificate Authority, CA)。如果公司有自己的内部 CA,则可以向其申请证书。如果打算从商业 CA 处购买证书,请选择一个 CA 并索要所需的特定格式信息。您还可以为服务器创建自签名证书。自签名证书不适用于面向 Internet 的部署,但对于开发和测试却很有帮助,因为它们使您在无需 CA 介入的情况下即可设置测试服务器。
如上所述,证书包含实体(此例中为 Web 服务器)的公钥。公钥是根据特定的算法而生成(证书中还对该算法类型进行了编码)。下一节介绍有关 Web Server 对其密钥支持的算法类型的背景。
单击“服务器证书”选项卡 >“请求”按钮。
选择配置
从需要为其安装证书的配置列表中选择一个配置。
选择令牌
选择包含密钥的令牌(加密设备)。如果密钥存储在由服务器维护的本地密钥数据库中,请选择内部令牌。如果密钥存储在智能卡或者其他外部设备或引擎中,请从下拉式列表框中选择外部令牌的名称。输入选定令牌的密码。
输入详细信息
开始请求过程之前,请确保您了解 CA 所需的信息。无论是从商业 CA 还是内部 CA 请求服务器证书,都需要提供以下信息:
服务器名必须是在 DNS 查找中使用的全限定主机名(例如,www.sun.com)。这是浏览器用于连接至您站点的 URL 中的主机名。如果这两个名称不匹配,客户机将收到证书名称与站点名称不匹配的通知,并怀疑您的证书的真实性。
如果从内部 CA 申请证书,也可以在此字段中输入通配符或正则表达式。多数供应商都不会批准在通用名称中输入通配符或正规表达式的证书请求。
组织是公司、教育机构、合作伙伴等的正式而合法的名称。多数 CA 需要您使用法律文档(例如营业执照副本)来验证此信息。
组织单位是用于说明公司中组织的可选字段。也可以用于标注不太正式的公司名称(不带 Inc.、Corp. 等等)。
地址是通常用于说明组织所在的城市、公国的可选字段。
省/自治区/直辖市为可选字段。
国家/地区是必填的,即您所在国家/地区名称的两个字符的缩写(以 ISO 格式)。美国的国家代码为 US。
所有这些信息组合为一系列属性值对(称为标识名 [DN]),用于形成证书的主题。
选择证书选项
您必须提供密钥信息。您可以选择 RSA 或 ECC 密钥类型。如果密钥类型为 RSA,则密钥大小可以为 1024、2048 或 4098。如果密钥类型为 ECC,则还需要选择一条曲线。请谨记,生成新的密钥对需要花费时间。密钥长度越长,向导生成它所需的时间越长。
请务必选择 CA(稍后会向其提交签署请求)可以支持的密钥类型。
选择证书类型
为自签名证书或 CA 签署的证书选择证书签署授权机构 (Certificate Signing Authority, CSA)。如果选择自签名证书,则还可以关联证书的 HTTP 侦听器。也可以在以后执行此操作。
生成请求
如果是 CA 签名证书,生成的证书请求将以 ASCII 格式提供。如果是自签名证书,则生成的证书将直接安装。如果为自签名类型,请为别名、有效期(月份)和 HTTP 侦听器名称提供相应的值以便处理安全请求。
查看结果
此页面为您提供了选定选项的摘要。单击“完成”可以完成请求的生成。
使用 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)。
要通过 CLI 创建自签名证书,请参见创建自签名证书。
本节介绍如何配置用于 Web Server 的 Solaris 加密。
使用以下命令从计算机中删除 ./sunw 目录:
%rm -rf $HOME/.sunw
使用以下命令设置新的 PIN:
% pktool setpin Enter new PIN:<type the pin here>
Re-enter new PIN:<retype the pin again>
使用以下命令禁用 pkcs11_kernel.so 和 pkcs11_softtoken.so 文件中的机制:
#cryptoadm disable provider=/usr/lib/security/$ISA/pkcs11_kernel.so mechanism=CKM_SSL3_PRE_MASTER_KEY_GEN,CKM_SSL3_MASTER_KEY_DERIVE,CKM_SSL3_KEY AND_MAC_DERIVE,CKM_SSL3_MASTER_KEY_DERIVE_DH,CKM_SSL3_MD5_MAC,CKM_SSL3_SHA1_MAC
#cryptoadm disable provider=/usr/lib/security/$ISA/pkcs11_softtoken.so mechanism=CKM_SSL3_PRE_MASTER_KEY_GEN,CKM_SSL3_MASTER_KEY_DERIVE,CKM_SSL3_KEY AND_MAC_DERIVE,CKM_SSL3_MASTER_KEY_DERIVE_DH,CKM_SSL3_MD5_MAC,CKM_SSL3_SHA1_MAC
确保禁用 pkcs11_softtoken_extra.so 文件(如果使用)中的机制。
键入以下命令,将 Solaris 加密框架添加到 config 目录下的网络安全服务 (Network Security Services, NSS) 中:
$ cd <install-dir>/<instance-dir>/lib/modutil -dbdir <install-dir>/<instance-dir>/config -nocertdb -add "scf" -libfile /usr/lib/libpkcs11.so -mechanisms RSA
使用以下命令验证注册:
$ cd <install-dir>/<instance-dir>/lib/modutil -dbdir <install-dir>/<instance-dir>/config -nocertdb -list
Listing of PKCS #11 Modules 1. NSS Internal PKCS #11 Module slots: 2 slots attached status: loaded slot: NSS Internal Cryptographic Services token: NSS Generic Crypto Services slot: NSS User Private Key and Certificate Services token: NSS Certificate DB 2. scf library name: /usr/lib/libpkcs11.so slots: 1 slot attached status: loaded slot: Sun Crypto Softtoken token: Sun Software PKCS#11 softtoken 3. Root Certs library name: libnssckbi.so slots: There are no slots attached to this module status: Not loaded
有关创建服务器证书的更多信息,请参见请求证书。
如果 NSS 数据库中存在证书,则可以使用以下 pk12util 命令导出或导入证书:
$pk12util -o server.pk12 -d . -n <server-cert>
$pk12util -i server.pk12 -d . -h "Sun Software PKCS#11 softtoken"
默认情况下,certutil/pk12util 在数据库中搜索 cert8.db 和 key3.db。对于 Web Server,请添加前缀 -P,该服务器使用替代名称 https-instance-hostname-cert8.db 和 https-instance-hostname-key3.db。
在主页中单击“配置”选项卡
在“配置”页中,单击要启用 PKCS#11 和“允许绕过”选项的配置
单击“证书”选项卡
单击“PKCS#11 令牌”子选项卡
在“常规设置”中,选中相应的复选框以启用 PKCS#11 和“允许绕过”
单击“保存”按钮
请参见 CLI 参考 set-pkcs11-prop(1)。
从安装目录中启动 wadm 并执行以下步骤:
$wadm --user=admin Please enter admin-user-password>enter the administration serverpassword $wadm>list-tokens --config=test.sun.com internal Sun Software PKCS#11 softtoken $wadm>create-selfsigned-cert --config=test.sun.com --server-name=test.sun.com --nickname=MyCert --token="Sun Software PKCS#11 softtoken" Please enter token-pin>enter the password CLI201 Command 'create-selfsigned-cert' ran successfully $wadm>set-ssl-prop --config=test.sun.com --http-listener=http-listener-1 enabled=true server-cert-nickname="Sun Software PKCS#11 softtoken:MyCert" CLI201 Command 'set-ssl-prop' ran successfully $wadm>deploy-config test.sun.com CLI201 Command 'deploy-config' ran success
现在,启动 Administration Server。
$ cd <install-dir>/<instance-dir>/bin/startserv Sun Java System Web Server 7.0 Update 3 Please enter the PIN for the "Sun Software PKCS#11 softtoken" token:enter the password info: HTTP3072: http-listener-1: https://test.sun.com:2222 ready to accept requests info: CORE3274: successful server startup
从 CA 获取证书后,您可以使用管理控制台为配置安装此证书。
单击“服务器证书”选项卡 >“安装”按钮。
选择配置
从需要为其安装证书的配置列表中选择一个配置。
选择令牌
选择包含密钥的令牌(加密设备)。如果密钥存储在由服务器维护的本地密钥数据库中,请选择内部令牌。如果密钥存储在智能卡或者其他外部设备或引擎中,请从下拉式列表框中选择外部令牌的名称。输入选定令牌的密码。
输入证书数据
将证书文本粘贴到所提供的文本区域中。复制并粘贴文本时,请确保包含标头 "Begin Certificate" 和 "End Certificate",其中包含起始和终止连字符。您也可以单击“浏览”按钮并手动选择 .DER 文件。
提供证书详细信息
提供将用于此证书的别名。从可用列表中选择 HTTP 侦听器以便处理安全请求。您也可以选择自签名证书选项。
查看结果
此页面为您提供了选定选项的摘要。单击“完成”可以完成安装过程。
使用 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)。
您可以请求并安装来自其他证书授权机构的证书。业界中有很多 CA。本节介绍如何请求并安装外部服务器证书。
执行请求证书一节中所述的步骤 1 至步骤 5。按照以下说明完成外部证书请求。
在“证书类型”向导中,选择“CA 签名证书”选项,然后单击下一步。
将显示查看页面。检查设置,然后单击完成按钮。
复制包括标头在内的证书签署请求 (Certificate Signing Request, CSR),然后单击关闭按钮。
转至证书授权机构的 Web 站点,办理正式手续以获取该授权机构签名的证书。
将证书保存在本地文件夹中,或者从 Web 站点复制证书。
要安装获取的证书,请执行安装证书中所述的步骤 1 至步骤 3。按照以下说明完成外部证书安装。
在“输入证书数据”页中,粘贴该证书,或者提供在计算机中保存的文件的路径。单击下一步按钮。
输入证书的别名,然后从下拉列表中选择侦听器。单击“下一步”按钮。
将显示查看页面。单击完成按钮以完成安装。
有关设置令牌 PIN 的更多信息,请参见设置令牌密码。
要更新现有证书,请执行以下步骤:
单击“服务器证书”选项卡>“证书名”>“更新”按钮。
提供令牌信息
输入令牌密码(如果需要)。否则,单击“下一步”继续进行操作。
更新证书详细信息
查看证书详细信息,并提供有效期(以月份为单位)。
更新密钥信息
您可以选择 RSA 或 ECC 密钥类型。如果密钥类型为 RSA,则密钥大小可以为 1024、2048 或 4098。如果密钥类型为 ECC,则还需要选择一条曲线。请谨记,生成新的密钥对需要花费时间。
查看摘要
此页面为您提供了选定选项的摘要。单击“完成”以完成更新过程。
在更新管理服务器证书后,必须重新启动管理服务器和节点。
要删除证书,请执行以下任务:
单击“服务器证书”选项卡。
选择证书
从证书列表中选择相应的证书名。
删除证书
单击“删除”按钮以删除选定证书。
使用 CLI
要通过 CLI 删除证书,请执行以下命令:
wadm> delete-cert --user=admin --port=8989 --password-file=admin.pwd --token=internal --config=config1 cert1 |
请参见 CLI 参考 delete-cert(1)。
要更新管理服务器证书,请执行 CLI 命令 renew-admin-certs。使用此命令可更新别名为 Admin-CA-Cert、 Admin-Server-Cert 和 Admin-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) 用于列出客户机或服务器用户不应再信任的所有证书和密钥。如果证书中的数据发生变化(例如,用户在证书到期之前换单位或离职),该证书将被撤销,并且其数据将显示在 CRL 中。CRL 由 CA 生成并定期更新。
要安装从 CA 获取的 CRL,请执行以下步骤:
从 CA 获取文件形式的 CRL。
转至管理控制台中的配置页面。
单击“证书”>“证书授权机构”选项卡。
单击“安装 CRL”按钮
输入关联文件的完整路径名。
单击“确定”。
如果数据库中已存在 CRL,则将显示“替换证书撤销列表”页面。
您可能需要单击“部署”才可以使更改生效。
使用 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)。
转至管理控制台中的配置页面。
单击“证书”>“证书授权机构”选项卡。
选择 CRL 条目并单击“删除”。
您可能需要单击“部署”才可以使更改生效。
使用 CLI
要通过 CLI 删除 CRL,请执行以下命令:
wadm> delete-crl --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 issuer |
请参见 CLI 参考 delete-crl(1)。
要设置内部 PKCS11 令牌的密码,请执行以下操作:
转至管理控制台中的配置页面。
单击“证书”>“PKCS11 令牌”选项卡。
单击 PKCS11 令牌名称(默认为内部)。
选中“令牌状态”复选框。
输入密码信息。
如果不希望在启动实例时提示输入密码,请选中“不要在启动实例时提示输入新密码”复选框。单击“确定”。
密码将保存在配置中。要删除密码,请执行上述步骤,并选择“未设置密码”选项。
使用 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)。
使用命令 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 |
Using Administration Console
要通过管理控制台创建自签名证书,请执行请求证书中所述的任务,然后选择“自签名证书”作为证书类型。
要为配置启用 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 侦听器关联以保护服务器。
加密是转换信息的过程,因此除预期的收件人外,此过程对其他人来说意义不大。解密是转换加密信息的过程,因此,此过程又再次变得有意义。Web Server 支持 SSL 和 TLS 协议。
加密算法是一种用于加密或解密的密码学算法(一种数学函数)。SSL 和 TLS 协议包含多个加密算法套件。某些加密算法比其他加密算法更强大且更安全。一般而言,加密算法使用的位越多,将数据解密越难。
在任何双向加密过程中,双方都必须使用相同的加密算法。由于可以使用多种加密算法,因此需要让服务器使用最常用的加密算法。
在安全连接过程中,客户机和服务器都同意使用可以进行通信的最强大的加密算法。您可以从 SSL2、SSL3 和 TLS 协议中选择加密算法。
在 SSL 版本 2.0 以后的版本中,对安全性和性能做了一些改进;除非客户机不能使用 SSL 3,否则,不应使用 SSL 2。不保证客户机证书能够使用 SSL 2 加密算法。
单独的加密过程并不足以确保服务器机密信息的安全。使用加密算法的同时还必须使用密钥,以便生成真正的加密结果,或解密以前加密的信息。加密过程使用以下两种密钥获得此结果: 公钥和私钥。使用公钥加密的信息只能使用关联的私钥进行解密。公钥作为证书的一部分发布,因此只有关联的私钥受到保护。
Web Server 支持用于加密通信的安全套接字层 (Secure Sockets Layer, SSL) 和传输层安全 (Transport Layer Security, TLS) 协议。SSL 和 TLS 是独立于应用程序的,并且可以在它们上面透明地分层运行更高级别的协议。
SSL 和 TLS 协议支持各种加密算法,用于服务器和客户机的相互验证、传输证书和建立会话密钥。客户机和服务器可以支持各种加密算法套件或加密算法集合,这取决于各种因素,例如它们所支持的协议、公司有关加密强度的政策以及政府对加密软件出口的限制。在其他函数中,SSL 和 TLS 握手协议将确定服务器和客户机如何协商以决定将用来进行通信的加密算法套件。
单击配置 > HTTP 侦听器 > 安全性选项卡,可以编辑 HTTP 侦听器安全性设置。下表列出了您可以在此页面中进行配置的属性。
表 6–1 HTTP 侦听器安全性属性