如果您打算托管一个可公开访问的使用HTTPS的网站,那么您将需要安装一个具有商业签名的TLS证书,这样访问您网站的人就不会在浏览器中收到有关不安全连接的警告。
最简单的方法是通过Let's Encrypt来进行证书签名。虽然CertBot工具可以通过Let's Ebcrypt实现非常简单的获取和更新证书,但是此方案并不是适合所有用户的。
如果您需要域验证证书或扩展验证证书,则必须创建提交给如Thawte或Verisign这样的证书颁发机构(CA)的证书签名请求(CSR)。这也是本指南所关注的获取具有签名的TLS证书的方法。
某些CA允许您在其上注册帐户后通过其Web界面直接创建CSR。正如本指南所提及的,这无疑会比在手动地在服务器或本地主机上创建CSR更加便利。
在决定所申请的公司之前请彻底研究相关证书颁发机构,这些公司将通过HTTPS保护客户的个人信息、加密签名电子邮件或授予对内部平台的访问权限。
如果您打算在网站上使用您的SSL证书,请在实现本指南中的过程后,参考我们另一篇文章指南在NGINX上启用针对HTTPS连接的TLS。
root
用户权限并定位到要在其中创建证书信息的目录:
su - root
mkdir /root/certs/ && cd /root/certs/
openssl req -new -newkey rsa:4096 -days 365 -nodes -keyout example.com.key -out example.com.csr
系统将提示让您将您的网站或组织的标识信息添加到证书中,因为将会依据此信息来创建证书并传递给证书颁发机构进行注册签名,所以信息需要是精准的。
以下是此命令中使用的OpenSSL选项的细化说明。尽管还提供很多可选项,但这里的目标就是创建一个可以良好使用一年的证书。有关更多信息,请参阅终端中man openssl
的提醒。-newkey rsa:4096
:创建一个用于证书使用的4096位RSA密钥。虽然是最新版本OpenSSL默认设置密钥为RSA 2048
,但为了确保密钥大小,您应该在创建时候指定它。-sha256
:使用265位SHA(安全散列算法)生成证书请求。-days
:确定证书的允许验证时间长度(以天为单位)。对于商业证书,此值不应高于730
(2年)。-nodes
:创建不需要密码的证书。如果不启用此选项,则每次重新启动应用程序时,都需要在控制台中输入密码。这是输出的一个样例。你可以安全地将extra attributes
额外配置选项留空,只需按Enter键跳过选项:
root@localhost:~# openssl req -new -newkey rsa:4096 -days 365 -nodes -keyout example.com.key -out example.com.csr
Generating a 4096 bit RSA private key
..+++
......................................+++
向`example.com.key`写入新的密钥
-----
您需要输入需要被合并加入相关证书请求的信息。
您需要输入的信息被称为识别名或者简称为DN。
您可以留空许多字段,很多字段都会有默认配置
如果您输入'.', 则相关字段将会留空
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Philadelphia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linode
Organizational Unit Name (eg, section) []:Docs
Common Name (e.g. server FQDN or YOUR name) []:hostname.example.com
Email Address []:admin@example.com
请记得输入下列将会发送到证书请求中的额外参数
A challenge password []:
An optional company name []:l
大多数现代Linux发行版都附带了安装为ca-certificates
软件包一部分的通用根CA证书,其位于/etc/ssl/certs/ca-certificates.crt
文件中。
或者说,如果您的ca-certificates
依赖中未包含CA的根证书,请直接从证书颁发机构的网站下载证书。获得证书后,将文件移动到源目录并更新依赖包来手动添加证书。
cp rootCert-example.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
cp rootCert-example.crt /usr/local/share/ca-certificates/
update-ca-certificates
将证书签名请求提交给CA。不同CA的步骤可能会不同,有些CA有视频或书面说明来指导您完成整个过程。它通常包括以下步骤:
许多CA将给中间机构颁发证书,而获得该类证书必须与根证书组合在一起。
如果您从CA收到多个以.crt
结尾的文件(统称为链式SSL证书),则必须按特定顺序将它们链接到一个文件中,以确保与大多数浏览器完全兼容。以下示例使用由Comodo签名的链式SSL证书。
合并各个证书:
cat example.com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > www.mydomain.com.crt
此表可以更好更直观地了解组成链式证书地的相关命令:
证书类别: | 中间机构: | 颁发机构: |
---|---|---|
最终用户证书 | example.com | Comodo LLC |
中间证书1 | Comodo LLC | COMODORSA DomainValidation SecureServerCA |
中级证书2 | COMODORSA DomainValidation SecureServerCA | COMODORSA AddTrustCA |
根证书 | COMODORSA AddTrustCA | AddTrust ExternalCARoot |
生成的文件内容将类似于以下内容: