创建证书
证书颁发机构 (CA) 是颁发数字证书以用于公钥加密的实体。执行 SSL 事务的应用程序(例如 Web 浏览器)信任由证书颁发机构颁发或签名的证书。这些应用程序维护着它们信任的 CA 的列表。如果任何受信任的 CA 对用于安全交易的证书进行签名,则应用程序会继续进行交易。
注意: Citrix 建议您对所有 SSL 事务使用从授权 CA(例如 Verisign)获取的证书。在 NetScaler 设备上生成的证书仅用于测试目的,不能用于任何实时部署。
要导入现有证书和密钥,请参阅 导入证书。
执行以下步骤创建证书并将其绑定到 SSL 虚拟服务器。文件名中唯一允许的特殊字符是下划线和点。文件名中不允许使用特殊字符作为第一个字符。
- 创建私钥。
- 创建证书签名请求 (CSR)。
- 将 CSR 提交给证书颁发机构。
- 创建证书密钥对。
- 将证书密钥对绑定到 SSL 虚拟服务器
下图说明了工作流程。
如何创建和安装新证书
创建私钥
备注:
从版本 12.1 build 49.x 开始,您可以使用具有 PEM 密钥格式的 AES256 算法来加密设备上的私钥。与数据加密标准 (DES) 的56位密钥相比,具有256位密钥的AES在数学上更加高效和安全。
从版本 12.1 build 50.x 开始,您可以创建 PKCS #8 格式的 RSA 密钥。
私钥是数字证书中最重要的部分。根据定义,此密钥不得与任何人共享,必须安全地保存在NetScaler设备上。使用公钥加密的任何数据只能使用私钥解密。
您从 CA 收到的证书仅对用于创建 CSR 的私钥有效。将证书添加到 NetScaler 设备需要密钥。
设备仅支持用于创建私钥的 RSA 加密算法。您可以将任一类型的私钥提交给证书颁发机构 (CA)。您从 CA 收到的证书仅对用于创建 CSR 的私钥有效。将证书添加到 NetScaler 设备需要密钥。
重要:
- 请务必限制对私钥的访问。有权访问您的私钥的任何人都可以解密您的 SSL 数据。
- 如果密钥名称中包含路径,则允许的 SSL 密钥名称的长度包括绝对路径名的长度。
所有 SSL 证书和密钥都存储在设备上的 /nsconfig/ssl
文件夹中。为了提高安全性,您可以使用 DES 或三重 DES (3DES) 算法对存储在设备上的私钥进行加密。
使用 CLI 创建 RSA 私钥
在命令提示符下,键入:
create ssl rsakey <keyFile> <bits> [-exponent ( 3 | F4 )] [-keyform (DER | PEM )] [-des | -des3 | -aes256] {-password } [-pkcs8]
<!--NeedCopy-->
示例:
create rsakey testkey 2048 -aes256 -password 123456 -pkcs8
<!--NeedCopy-->
使用 GUI 创建 RSA 私钥
-
导航到“流量管理”>“SSL”>“SSL 文件”。
-
在“密钥”选项卡中,选择“创建 RSA 密钥”。
-
输入以下参数的值,然后单击 创建。
- 密钥文件名 — RSA 密钥文件的名称和路径(可选)。/nsconfig/ssl/ 是默认路径。
- 密钥大小 — RSA 密钥的大小(以位为单位)。范围从512位到4096位不等。
- 公共指数值 -RSA 密钥的公共指数。指数是密码算法的一部分,是创建 RSA 密钥所必需的。
- 密钥格式 -RSA 密钥文件存储在设备上的格式。
- PEM 编码算法 -使用 AES 256、DES 或 Triple-DES (DES3) 算法对生成的 RSA 密钥进行加密。默认情况下,私钥是未加密的。
- PEM 密码短 语-如果私钥已加密,请输入密钥的密码短语。
使用 GUI 在 RSA 密钥中选择 AES256 编码算法
-
导航到 流量管理 > SSL > SSL 文件 > 创建 RSA 密钥。
-
在 密钥格式中,选择 PEM。
-
在 PEM 编码算法中,选择 AES256。
-
选择 PKCS8。
使用 CLI 创建证书签名请求
在命令提示符下,键入:
create ssl certreq <reqFile> -keyFile <input_filename> | -fipsKeyName <string>) [-keyForm (DER | PEM) {-PEMPassPhrase }] -countryName <string> -stateName <string> -organizationName <string> -organizationUnitName <string> -localityName <string> -commonName <string> -emailAddress <string> {-challengePassword } -companyName <string> -digestMethod ( SHA1 | SHA256 )
<!--NeedCopy-->
示例:
create ssl certreq priv_csr_sha256 -keyfile priv_2048_2 -keyform PEM -countryName IN -stateName Karnataka -localityName Bangalore -organizationName Citrix -organizationUnitName NS -digestMethod SHA256
<!--NeedCopy-->
使用 GUI 创建证书签名请求
- 导航到流量管理 > SSL。
-
在 SSL 证书中,单击 创建证书签名请求 (CSR)。
- 在 摘要 方法中,选择 SHA256 。
有关详细信息 ,请参阅创建 CSR 。
支持证书签名请求中的使用者备用名称
证书中的使用者备用名称 (SAN) 字段允许您将多个值(例如域名和 IP 地址)与单个证书关联。换句话说,您可以用一个证书保护多个域名,例如 www.example.com、www.example1.com、www.example2.com。
某些浏览器(例如 Google Chrome)不再支持证书签名请求 (CSR) 中的通用名称。它们在所有公开信任的证书中强制执行 SAN。
NetScaler 设备支持在创建 CSR 时添加 SAN 值。您可以将带有 SAN 条目的 CSR 发送给证书颁发机构,以获取带有该 SAN 条目的签名证书。当设备收到请求时,它会在服务器证书的 SAN 条目中检查匹配的域名。如果找到匹配项,它会将证书发送到客户端并完成 SSL 握手。您可以使用 CLI 或 GUI 创建具有 SAN 值的 CSR。
注意: NetScaler 设备仅处理基于 DNS 的 SAN 值。
使用 CLI 创建使用主体备用名称的 CSR
create ssl certReq <reqFile> (-keyFile <input_filename> | -fipsKeyName <string>) [-subjectAltName <string>] [-keyform ( DER | PEM ) {-PEMPassPhrase }] -countryName <string> -stateName <string> -organizationName <string> [-organizationUnitName <string>] [-localityName <string>] [-commonName <string>] [-emailAddress <string>] {-challengePassword } [-companyName <string>] [-digestMethod ( SHA1 | SHA256 )]
<!--NeedCopy-->
参数:
subjectAltName: 主体备用名称 (SAN) 是 X.509 的扩展,它允许使用 subjectaltName 字段将各种值与安全证书关联。这些值称为“主体备用名称”(SAN)。名称包括:
-
IP 地址(带有“IP:”的前缀示例:IP: 198.51.10.5 IP: 192.0.2.100)
-
DNS 名称(带有“DNS:”的前缀示例:dns: www.example.com dns: www.example.org dns: www.example.net)
在命令行中,在引号内输入值。用空格分隔两个值。GUI 中不需要引号。 最大长度:127
示例:
create certReq test1.csr -keyFile test1.ky -countryName IN -stateName Kar -organizationName citrix -commonName ctx.com -subjectAltName "DNS:*.example.com DNS:www.example.org DNS:www.example.net"
<!--NeedCopy-->
注意:
在 FIPS 设备上,如果直接在设备上创建 FIPS 密钥,则必须将密钥文件名替换为 FIPS 密钥名称。
create certReq <csrname> -fipsKeyName fipskey.ky -countryName IN -stateName Kar -organizationName citrix -commonName ctx.com -subjectAltName "DNS:www.example.com DNS:www.example.org DNS:www.example.net" <!--NeedCopy-->
使用 GUI 创建 CSR
- 导航到 流量管理 > SSL > SSL 文件。
- 在 CSR 选项卡中,单击 创建证书签名请求 (CSR)。
- 输入值,然后单击 创建。
限制
要在创建 SSL 证书时使用 SAN,必须明确指定 SAN 值。这些值不会自动从 CSR 文件中读取。
将 CSR 提交给证书颁发机构
大多数证书颁发机构 (CA) 都接受通过电子邮件提交证书。CA 将向您提交 CSR 的电子邮件地址返回有效证书。
CSR 存储在 /nsconfig/ssl
文件夹中。
生成测试证书
注意:
要生成服务器测试证书,请参阅 生成服务器测试证书。
NetScaler 设备具有内置的 CA 工具套件,可用于创建用于测试目的的自签名证书。
注意: 由于 NetScaler 设备签署的是这些证书,而不是实际的 CA,因此您不得在生产环境中使用它们。如果您尝试在生产环境中使用自签名证书,则每次访问虚拟服务器时,用户都会收到“证书无效”警告。
设备支持创建以下类型的证书
- 根 CA 证书
- 中级 CA 证书
- 最终用户证书
- 服务器证书
- 客户端证书
在生成证书之前,请创建私有密钥并使用该密钥在设备上创建证书签名请求 (CSR)。然后,与其将 CSR 发送给 CA,不如使用 NetScaler CA 工具来生成证书。
使用向导创建证书
- 导航到流量管理 > SSL。
- 在详细信息窗格的 入门下,选择要创建的证书类型的向导。
- 按照屏幕上的说明进行操作。
使用 CLI 创建根 CA 证书
在命令提示符下,键入以下命令:
create ssl cert <certFile> <reqFile> <certType> [-keyFile <input_filename>] [-keyform ( DER | PEM )] [-days <positive_integer>]
<!--NeedCopy-->
在以下示例中,csreq1 是 CSR,rsa1 是之前创建的私钥。
示例:
create ssl cert cert1 csreq1 ROOT_CERT -keyFile rsa1 -keyForm PEM -days 365
Done
<!--NeedCopy-->
使用 CLI 创建中间 CA 证书
create ssl cert <certFile> <reqFile> <certType> [-keyFile <input_filename>] [-keyform ( DER | PEM )] [-days <positive_integer>] [-certForm ( DER | PEM )] [-CAcert <input_filename>] [-CAcertForm ( DER | PEM )] [-CAkey <input_filename>] [-CAkeyForm ( DER | PEM )] [-CAserial <output_filename>]
<!--NeedCopy-->
在以下示例中,csr1 是之前创建的 CSR。Cert1 和 rsakey1 是自签名 (root-CA) 证书的证书和对应密钥,pvtkey1 是中级 CA 证书的私钥。
示例:
create ssl cert certsy csr1 INTM_CERT -CAcert cert1 -CAkey rsakey1 -CAserial 23
Done
create ssl rsakey pvtkey1 2048 -exponent F4 -keyform PEM
Done
<!--NeedCopy-->
使用 GUI 创建根 CA 证书
导航到 流量管理 > SSL ,然后在入门组中选择 根 CA 证书向导,然后配置根 CA 证书。
使用 GUI 创建中级 CA 证书
导航到 流量管理 > SSL ,然后在入门组 中选择中间 CA 证书向导,然后配置中间 CA 证书。
创建最终用户证书
最终用户证书可以是客户端证书或服务器证书。要创建测试最终用户证书,请指定中间 CA 证书或自签名 root-CA 证书。
注意: 要创建用于生产的最终用户证书,请指定受信任的 CA 证书,然后将 CSR 发送给证书颁发机构 (CA)。
使用命令行界面创建测试最终用户证书
create ssl cert <certFile> <reqFile> <certType> [-keyFile <input_filename>] [-keyform ( DER | PEM )] [-days<positive_integer>] [-certForm ( DER | PEM )] [-CAcert <input_filename>] [-CAcertForm ( DER | PEM )] [-CAkey<input_filename>] [-CAkeyForm ( DER | PEM )] [-CAserial <output_filename>]
<!--NeedCopy-->
如果没有中间证书,请在 CAcert
和 CAkey
中使用根 CA 证书的证书 (cert1) 和私钥 (rsakey1) 值。
示例:
create ssl cert cert12 csr1 SRVR_CERT -CAcert cert1 -CAkey rsakey1 -CAserial 23
Done
<!--NeedCopy-->
如果存在中间证书,请在 CAcert
和 CAkey
中使用中间证书的证书 (certsy
) 和私钥 (pvtkey1) 值。
示例:
create ssl cert cert12 csr1 SRVR_CERT -CAcert certsy -CAkey pvtkey1 -CAserial 23
Done
<!--NeedCopy-->
使用 OpenSSL 创建自签名的 SAN 证书
要创建具有多个使用者备用名称的自签名SAN证书,请执行以下步骤:
-
根据公司要求编辑相关字段,在本地计算机上创建 OpenSSL 配置文件。
注意:在以下示例中,配置文件是“req.conf”。
[req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = VA L = SomeCity O = MyCompany OU = MyDivision CN = www.company.com [v3_req] keyUsage = keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = www.company.net DNS.2 = company.com DNS.3 = company.net <!--NeedCopy-->
-
将文件上载到 NetScaler 设备上的 /nsconfig/ssl 目录中。
-
以
nsroot
用户身份登录 NetScaler CLI 并切换到 shell 提示符。 -
运行以下命令创建证书:
cd /nsconfig/ssl openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout cert.pem -out cert.pem -config req.conf -extensions 'v3_req' <!--NeedCopy-->
-
运行以下命令验证证书:
openssl x509 -in cert.pem -noout –text Certificate: Data: Version: 3 (0x2) Serial Number: ed:90:c5:f0:61:78:25:ab Signature Algorithm: md5WithRSAEncryption Issuer: C=US, ST=VA, L=SomeCity, O=MyCompany, OU=MyDivision, CN=www.company.com Validity Not Before: Nov 6 22:21:38 2012 GMT Not After : Nov 6 22:21:38 2014 GMT Subject: C=US, ST=VA, L=SomeCity, O=MyCompany, OU=MyDivision, CN=www.company.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): … Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Key Encipherment, Data Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Alternative Name: DNS:www.company.net, DNS:company.com, DNS:company.net Signature Algorithm: md5WithRSAEncryption … <!--NeedCopy-->