私钥是在生成 CSR(证书签名请求)代码时一并创建的。很多人并不清楚私钥是何时生成、存放在何处。但要激活 SSL 证书,知道私钥的位置至关重要。如果你找不到私钥,可以按照本指南解决问题。
SSL 中的私钥是什么
私钥通常是一串随机生成、难以猜测的长字母数字组合,在算法中用于加密或解密数据。它也被称为秘密密钥(secret key),必须安全地保存在服务器内或离线环境中。私钥在密码学(对称与非对称)中扮演关键角色,必须远离网络犯罪分子的接触,以保护服务器与用户的信息。
公钥与私钥
当你申请 SSL 证书时,会创建两把密钥——公钥与私钥。这两把密钥用于浏览器与服务器之间数据的安全交换。当访客访问服务器时,用户浏览器将信息发送给服务器,这些数据使用公钥加密以防被攻击者窃取。随后服务器使用其私钥解密数据,并将响应返回浏览器,服务器的回复同样经过编码。两把密钥就这样协同工作,实现用户与服务器之间的安全数据传输。
如何创建 SSL 证书的私钥
私钥与 CSR 代码一同生成。CSR 代码包含你的全部业务信息,如域名、邮箱、实际地址、国家、组织与州省,同时也包含公钥。CSR 代码随后被发送给证书颁发机构(CA)进行验证,验证通过后签发证书。私钥在生成 CSR 代码时产生,必须保密。最好将秘密密钥安全保存在你打算安装 SSL 证书的同一台服务器上。一旦 SSL 证书下发,你就可以安装它以实现网站的安全数据传输。
如果丢失旧私钥,能否为 SSL 证书生成新的私钥
私钥对应一把由 CA 验证过的公钥。生成 CSR 代码时,私钥也随之创建,CSR 代码包含你与 CA 共享以换取 SSL 证书的公钥。由于这两把密钥相互关联,你无法为同一张 SSL 证书创建新的私钥——既然已有经过验证的公钥,再生成新私钥便毫无意义。因此建议妥善保管私钥。如果私钥丢失或放错地方,你必须重新签发 SSL 证书,而这需要生成新的 CSR 代码与私钥。务必生成一把强壮且复杂的私钥。一旦私钥落入他人(可能是黑客)之手,你站点上的全部数据都可能遭到泄露。
私钥长什么样
私钥是一长串随机字母和数字,这段编码通常以 -----BEGIN RSA PRIVATE KEY----- 开头,以 -----END RSA PRIVATE KEY----- 结尾。很多时候你并不知道私钥是何时生成、位于何处——它在后台随 CSR 代码一同创建,并秘密存储在服务器中。收到 SSL 证书时,密钥应被自动取出以成功安装证书。但有时你需要在另一台服务器上安装 SSL 证书,而密钥却是在不同服务器上生成的,这种情况下你必须确切知道私钥的位置。
如何找回放错地方的私钥
如果你已收到 SSL 证书却不知道私钥位置,以下信息可以帮到你。若私钥丢失或放错,首先要做的是检查证书信息。在证书框中点击"常规"选项卡,你会在框底部找到密钥的详细信息。私钥已激活时,会显示类似"你拥有一把与该证书对应的私钥"的提示;若私钥丢失或未激活,则不会显示任何信息。原因可能有多个:
- SSL 证书未在生成 CSR 代码的同一台服务器上激活
- IIS(Internet Information Services)已删除挂起的请求
- 证书未正确安装,例如使用了"证书导入向导"而非 IIS
无论何种原因,找回放错私钥的方法因操作系统而异,并不存在适用于所有操作系统的通用方法。你应当遵照针对自己操作系统的指引。继续阅读本指南,按操作系统类型找到私钥。
在浏览器中创建 CSR 时查找私钥
除多域名 SSL 证书外,你可以为所有 SSL 证书在浏览器中生成私钥。若是多域名 SSL 证书,则必须在服务器上生成 CSR,因此如果你已在服务器生成 CSR,请跳过本部分。如果在浏览器中创建了 CSR 代码,可以在电脑的下载文件夹中找到私钥。当你在浏览器中创建 CSR 时,秘密密钥会自动以 zip 文件形式下载到系统的"下载"文件夹。若在那里找不到私钥,请检查浏览器设置——你可能设置了不同的下载位置,进入该文件夹即可找到私钥。私钥以 zip 文件形式出现便于定位,文件名会包含你的域名与"key"字样,例如域名 example.com 对应文件名为 example_com_key.zip。若仍无法定位,可在电脑上搜索该文件名(example_com_key.zip);若依旧无果,则需要重新激活 SSL 证书,因为浏览器生成 CSR 时私钥就存储在系统中,必须能找到。找不到就只能重新签发证书,无法通过其他方式恢复。
如何在各类服务器平台上恢复私钥
如前所述,并不存在适用于所有服务器平台的通用私钥检索方法,你需要依据操作系统采用相应技术。以下覆盖这些服务器平台:
- Linux 操作系统(Apache、Nginx、Lighttpd、Heroku)
- Tomcat(使用 keytool)
- cPanel
- Plesk
- Synology NAS DSM
- Webmin
- VestaCP
- WHM
- DirectAdmin
- Webuzo
- Windows 操作系统(IIS、Exchange、Small Business Server)
- Mac OS X
Linux 操作系统(Apache、Nginx、Lighttpd、Heroku)
在 Linux 上,私钥由 OpenSSL 创建,以带 .key 与 .pem 扩展名的文本文件形式存在。但需注意,在 Linux 系统中文本文件并非必须使用扩展名,因此私钥可能以任意名称、任意扩展名存放在任何位置,这使得在 Linux 上寻找私钥相当困难。如果你知道密钥文件的完整或部分名称,可在控制台输入以下命令开始搜索:
sudo find / -name 'example.key'
这条简单命令就能在服务端找到私钥(如果存在)。命令中的"/"表示从根目录开始搜索,从而访问所有文件,提高找回私钥的几率。example.key 是假设的密钥名称,你可以把记住的文件名加上".key"扩展名写在这里;若想查找特定扩展名的所有文件,可使用 *.key。多数情况下私钥文件名以你的域名开头,例如 example.com 对应 example_com.key 或 example_com.pem。若仍找不到,以下是终极检索方式:
grep -r --exclude-dir=log --exclude-dir=ssh --exclude=*history -I -l -e '-----BEGIN PRIVATE*' -e '-----BEGIN RSA*' -e '-----BEGIN EC*' [search_start_folder] 2> /dev/null
该命令会搜索以"-----BEGIN 头"开头的文件,若存在则返回完整路径。
Windows 操作系统(IIS、Exchange、Small Business Server)
在 Windows 上,你无法以文本格式查看或检索私钥。当你使用 MMC(Microsoft 管理控制台)或 IIS 导入 SSL 证书时,私钥会自动取出并安装——但这仅在你将证书导入到生成 CSR 代码与秘密密钥的同一台服务器时才成立。若需在另一台服务器安装,就必须取得私钥,步骤如下:
- 同时按下"Win + R"并点击确定
- 在新窗口点击"文件"选项卡
- 选择"添加/删除管理单元",点击"证书"
- 点击"添加"
- 选择"计算机账户"并点击"下一步"
- 点击"本地计算机",按"完成"再按"确定"
随后进入"证书注册请求"并点击"证书"(适用于尚未完成证书请求者);若已完成请求,则点击"个人"再点"证书"。在"所有任务"下右键点击证书并选择"导出",导出向导会给出指引。完成后你会得到一个 .pfx 文件,其中包含 SSL 证书与私钥的全部数据,可使用工具将其转换为文本文件。
Mac OS X
Mac OS X 服务器默认带"钥匙串(Keychain)"工具,无法通过图形界面检索已创建的秘密密钥。但你可以使用以下命令访问 /etc/certificates/ 目录找到私钥文件:
cd /etc/certificates/
ls
sudo nano test.key.pem
私钥文件名形如 *.key.pem。
Tomcat(使用 keytool)
若使用 Tomcat,私钥应位于带 .jks 或 .keystore 扩展名的密钥库文件中,且密钥库受密码保护。该方法仅当服务器的 SSL 连接器以 JSSE 风格(而非 APR 风格)配置时适用,建议先确认配置。要获取 PEM 格式的秘密密钥,需先将密钥库文件转换为 PKCS#12(.pfx/.p12)文件:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12 -srcalias -srcstorepass -srckeypass -deststorepass -destkeypass
生成 .pfx/.p12 文件后,可使用 OpenSSL 命令转换为 PEM 格式:
openssl pkcs12 -in keystore.p12 -nocerts -nodes -out private.key
cPanel
在 cPanel 上可通过两种方法检索私钥。a)SSL/TLS 管理器:打开 cPanel 首页点击"SSL/TLS 管理器",选择"私钥"选项卡,新窗口会显示账户下所有私钥详情,选中某把密钥点击"查看与编辑"即可看到加密与解密形式。b)文件管理器:在 cPanel 首页点击"文件管理器",在左侧找到"SSL"文件夹并点击,再选择其中的"keys"文件夹,右侧会列出全部私钥,可下载或以文本模式查看。
WHM
在 WHM 中,秘密密钥与 CSR 代码及证书一同保存,可在"SSL 存储管理器"中找到:点击首页的 SSL/TLS 选项卡,再选"SSL 存储管理器"。你会看到三列(分别对应密钥、CSR、证书),点击放大镜按钮即可在文本格式下打开密钥。
Plesk
在 Plesk 上,先点击首页"域名",再点 domain.com,最后点"SSL/TLS 证书"。左下角会显示一把密钥并注明"已提供私钥部分",表示所需私钥位于服务器上。获取方式有两种:一是点击名称向下找到私钥;二是点击屏幕右下角的绿色箭头下载一个 .pem 文件,可用记事本打开,其中同时包含 CSR 与证书及秘密密钥。
Synology NAS DSM
在 Synology DSM 上检索私钥相对简单——私钥在 CSR 创建的最后一步被创建/下载,以 .zip 文件形式保存,文件名为 server.key,可用记事本或任意文本编辑器打开。
Webmin
该面板是在命令行界面之上构建的图形界面,带有 Filemin(文件管理器)可用于查找私钥。另一种方式是在 Webmin 中打开"命令外壳"运行以下任一命令:
sudo find / -name 'normal.key'
grep -r --exclude-dir=log --exclude-dir=ssh --exclude=*history -I -l -e '-----BEGIN PRIVATE*' -e '-----BEGIN RSA*' -e '-----BEGIN EC*' [search_start_folder] 2> /dev/null
VestaCP
在该面板上生成 CSR 代码时,私钥会以文本格式保存(因为它不会存储在界面任何位置)。不过仍有机会找回——生成 CSR 时秘密密钥会临时存放在某文件夹,路径类似 /tmp/tmp.npAnkmWFcu/normal.com.key。主要问题在于 /tmp 目录下的文件会在服务器重启时被删除,私钥可能因此丢失。可用以下命令查找域名(如 example.com)对应的秘密密钥:
find /tmp -type f -iname 'example.com.key'
若找不到,同样可使用 grep 命令检索。
DirectAdmin
若使用较新版本的 DirectAdmin,可在 SSL 证书区域的"粘贴预生成的证书与密钥"部分找到私钥。粘贴证书文本前最好先检查私钥是否存在;若不可用,说明 CSR 是在其他服务器生成,或属于系统故障。若是系统问题,私钥可能位于以下目录:
/usr/local/directadmin/data/users/[user]/domains/[domain].key
Webuzo
在 Webuzo 首页找到"SSL 管理"并点击,会看到"私钥"按钮,点击即可查看该面板创建的全部私钥;要查看文本格式的秘密密钥,点击屏幕右侧的铅笔图标。相关内容可参阅 OpenSSL 命令快速参考指南。
结语
私钥在密码学中至关重要,必须妥善保管。若不慎丢失或放错,可借助本文找回。若仍无法找到,最佳做法是生成新的 CSR 代码与私钥并重新签发 SSL 证书,这次务必将私钥安全保存。