在 Oracle® Solaris 11.2 中复制和创建软件包系统信息库

退出打印视图

更新时间: 2014 年 9 月
 
 

创建用于访问系统信息库的客户机证书

生成 CA 后,可以生成客户机证书。

生成证书签名请求

要生成客户机证书,请生成证书签名请求 (Certificate Signing Request, CSR)。CSR 包含安全地传递到服务器所需的所有信息。

如果只希望检查客户机是否拥有您颁发的有效证书,无需对任何信息进行编码。当客户机向服务器提供其证书时,服务器将根据 CA 对该证书进行确认,验证该客户机证书是否由您生成。但是,SSL 需要 CSR 的 subject。如果不需要将任何其他信息传递到服务器,只需将 subject 设置为颁发证书的国家/地区。例如,可以将 subject 设置为 C=US

比较好的做法是将客户机的用户名编码到证书中,从而允许服务器标识客户机。用户名是您向其授予对系统信息库的访问权限的用户的名称。可以将 CN 用于此目的。为此 CSR 指定标签,以便您可以找到并提取最终证书的密钥(如提取证书密钥中所述)。

使用以下命令生成 CSR:

$ pktool gencsr subject="C=US,CN=username" label=label format=pem \
outcsr=cert.csr

使用以下 OpenSSL 命令检查文件 cert.csr 中的 CSR:

$ openssl req -text -in cert.csr

对 CSR 进行签名

CSR 必须经过 CA 的签名才能创建证书。要对 CSR 进行签名,请提供以下信息:

  • 将证书的 issuer 设置为使用 gencert 命令创建 CA 时用于 subject 的相同字符串,如创建客户机证书的证书颁发机构中所述。

  • 设置十六进制序列号。在此示例中,CA 序列号被指定为 0x01,因此应为第一个客户机证书提供序列号 0x02。对生成的每个新客户机证书递增序列号。

    每个 CA 及其子孙客户机证书都具有其自己的序列号集。如果在密钥库中配置了多个 CA,请小心地正确设置客户机证书序列号。

  • signkey 设置为密钥库中的 CA 的标签。

  • outcert 设置为证书文件的名称。比较好的做法是在要访问的系统信息库后指定证书和密钥。

使用以下命令对 CSR 进行签名:

$ pktool signcsr signkey=CAlabel csr=cert.csr  \
serial=0x02 outcert=reponame.crt.pem issuer="CN=name"

在文件 reponame.crt.pem 中创建证书。使用以下 OpenSSL 命令检查证书:

$ openssl x509 -text -in reponame.crt.pem

提取证书密钥

从密钥库提取此证书的密钥。将 label 设置为在生成证书签名请求中运行 gencsr 以生成 CSR 时指定的相同标签值。使用以下命令从密钥库导出密钥:

$ pktool export objtype=key label=label outformat=pem \
outfile=reponame.key.pem

将证书和密钥传输到需要访问受 SSL 保护的系统信息库的客户机系统。

允许客户机系统访问受保护的系统信息库

要访问受 SSL 保护的系统信息库,客户机系统必须具有证书副本和密钥,并且必须在发布者配置中指定证书和密钥。

将证书 (reponame.crt.pem) 和密钥 (reponame.key.pem) 复制到每个客户机系统。例如,可以将它们复制到每个客户机上的 /var/pkg/ssl 目录。

使用以下命令在发布者配置中指定生成的证书和密钥:

$ pkg set-publisher -k reponame.key.pem -c reponame.crt.pem \
-p https://repolocation

请注意,仅 HTTPS 系统信息库 URI 支持 SSL 验证。文件系统信息库 URI 不支持 SSL 验证。