提供:ZStack云计算
本文将介绍如何从一个可信的商业CA机构(Certificate Authority)获取SSL证书并将其安装到你的服务器上。有了SSL证书,Web服务器可以加密与之通讯的信息,并让其访问者可以验证该服务器的身份。SSL证书可以自己签发,但购买一个CA认证的证书有很大的好处,就是你的访问者不会看到诸如“攻击者可能会窃取您的信息”之类的吓人警告。
本教程使用的CA机构有如下两个:
你也可以从其他CA机构获取SSL证书。获取证书后,本文将介绍如何将该证书安装到Nginx和Apache HTTP Web服务器上。
本章节所述的操作适用于大多数CA机构。
商业CA机构提供的SSL证书是需要购买的。此外也有提供免费证书的CA机构,可能最好的一个就是Let’s Encrypt,该机构认证的SSL/TLS证书在大部分Web浏览器中都被认为是可信的。
SSL证书必须与域名配合使用。如果你还没注册过域名,则可以找一个域名供应商(如Namecheap、GoDaddy等)购买一个。
你的域名的WHOIS记录上应该有你的邮箱,或者,你的邮箱应该出现在该域名“admin type”邮箱的列表中。CA在签发SSL证书时会给上述邮箱发送认证邮件,需要在该邮件里操作才能完成认证过程。不过,也有一些CA提供邮件之外的备选认证方式,比如基于DNS或HTTP的方式,此类方式就不在本文中讨论了。
如果你想要获取的是OV(机构验证型)或EV(拓展验证型)类SSL证书,那么你还需要向CA提供你的组织相关的法律文件。
你的SSL证书需要安装在一台Web服务器上才有效果。该服务器通过上面提到的那个域名访问。Web服务器一般会是一台Apache HTTP,或者Nginx,或者HAProxy,或者是Varnish服务器。有关Web服务器的安装配置可以参考如下文章:
如果你还不确定自己要使用哪家CA,那么大体来说的选择标准就是:对于你所需要的功能,它提供的价格是你愿意接受的。下面列出了一些功能供参考。
最重要的一点是,你选择的CA应该是各大浏览器和操作系统的根证书计划当中的成员之一,即,该CA是“可信”的,大部分浏览器和操作系统将该CA颁发的证书视为可信。如果浏览器和操作系统不信任某个CA,那么该CA颁发的证书与自签发的证书一样,访问者在访问该证书加密的网站时都会看到安全警告。
大部分商业的CA机构都是根证书计划中的成员,并且他们自己也号称与99%的浏览器兼容。不过保险起见,最好还是在购买之前自己检查一下。比如,这里是苹果iOS 8的信任列表。
你需要什么类型的证书?你选择的CA提供的证书需要满足你的需求。各个CA提供的证书种类繁多,各种名称和定价标准容易把人搞晕。下面简单介绍一下不同类型的证书:
example.com
,而www.example.com
等子域名则不包含。*.example.com
的证书可以用于www.example.com
以及store.example.com
等任何子域名。example.com
、www.example.com
以及example.net
生效。除了上述类型之外,CA还提供不同的认证等级:
本文只介绍单域型和通配型证书的获取方式。不过,其他类型证书的申请过程基本是差不多的。
有些CA还提供一些“额外”的功能,其中一些功能也许能帮你省钱。比如,有些CA提供了免费续租功能,有些CA则以单域型的价格提供了可同时作用于www.example.com
和example.com
的多域型证书。
上述准备工作完成后,可以生成一个CSR(certificate signing request,证书签名请求)以及一个私钥了。
对于Apache HTTP和Nginx用户,可以使用openssl
在你的Web服务器上生成CSR和私钥。以下步骤将在你的个人主目录下保存这两个文件,你自己操作的时候可以保存在其他目录下。
cd ~
生成名为example.com.key
的私钥和名为example.com.csr
的CSR:
openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
然后,OpenSSL会要求你填写一些信息,如国家、省市、企业名称等。一般来说,只有Common Name项是最重要的,请确保这里填写的是你网站将要使用的域名(如example.com
、www.example.com
,对于通配型需要填写*.example.com
)。如果你申请的证书是OV或EV型的,那么所有项目都需要照实认真填写。
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]
这样就生成了两个文件。.key
文件是私钥,务必安全保存。.csr
文件将要发送给CA作为SSL证书的申请材料。
CSR的提交是通过复制粘贴完成的,使用cat
命令查看CSR的内容以进行复制:
cat example.com.csr
接下来就可以去CA的网站上购买SSL证书了。
Namecheap提供了从不同CA购买SSL证书的渠道,本文选用的是RapidSSL,你也可以选择其他家CA。
注:RapidSSL的单域型证书如果是为www
子域名购买的,那么他们家会附送该基础域名的SAN证书。比如,针对www.example.com
申请单域型证书,得到的证书对www.example.com
和example.com
都生效。
进入Namecheap的SSL证书页面:https://www.namecheap.com/security/ssl-certificates.aspx
这里可以选择CA机构(Brand),证书的类型以及验证等级(Domains Secured)。
我们直接在“Domain Validation”里面点击“Compare Products”,找到“RapidSSL”,再点击“Add to Cart”加入购物车。输入你的Namecheap登陆信息,完成支付。
支付完毕后,从“HiUsername”链接进入“Manage SSL Certificates”页面:
该页面下列出了你在Namecheap上购买的所有SSL证书。找到刚才购买的那个证书,点击“Activate Now”以激活:
选择Web服务器的种类,如“Apache + MOD SSL”、“nginx”或“Tomcat”。这将决定证书文件的格式。
将你刚才复制的CSR内容粘贴到文本框里,点击“Next”按钮。
你现在应该进入到了“Select Approver”这一步骤,你可以选择要给你的域名的WHOIS记录中的邮箱还是域名的管理员邮箱发送一封确认邮件。
提供“Administrative Contact Information”(管理员联系方式),再点击“Submit order”以完成提交。
到你的邮箱里检查CA发来的邮件,确认请求证书。
确认之后,证书会通过邮件发送给你刚才留下的管理员邮箱,在该邮件末尾处可以找到,一共两个证书,一个是正式的,一个是中级证书(intermediate certificate)。
把两个证书复制到刚才生成私钥和CSR的目录下。把正式证书命名为你的域名加.crt
后缀,如example.com.crt
;中级证书命名为intermediate.crt
。
如此就可以把证书安装的Web服务器上了。
GoDaddy是一个很流行的CA机构,它可以签发所有类型的证书。本文将以单域型证书的申请作为示范。
点击此处进入GoDaddy的SSL证书页面:https://www.godaddy.com/ssl/ssl-certificates.aspx
点击“Get Started”按钮。
从下拉菜单中选择你需要的SSL证书类型:单域型,多域型(UCC),或通配型。
然后,选择认证等级:域名级,机构验证型,或拓展验证型。
然后,选择有效期。
选择完毕后,点击“Add to Cart”按钮加入购物车。
检查一下订单信息,如无误可点击“Proceed to Checkout”按钮,完成支付。
完成支付后,点击“SSL Certificates”按钮(或者,也可以从右上角的 My Account > Manage SSL Certificates进入 )。
找到刚才购买的证书,点击“Set Up”按钮。如果你是首次使用GoDaddy购买SSL证书,网站会提示你做一些设置以将刚才购买的证书与你的账号绑定。
设置完毕后,现在应该能够在列表中看到刚才新购买的证书。点击旁边的“Launch”按钮。
将之前复制的CSR内容粘贴到文本框中。默认算法是SHA-2。
勾选“I agree”,然后点击“Request Certificate”按钮。
GoDaddy将把验证邮件发送到你所申请域名的WHOIS记录上的邮箱里。到那个邮箱里找到验证邮件,根据邮件内容的提示完成验证步骤。
域名验证完毕后,你的GoDaddy注册邮箱里会收到一封邮件,里面有SSL证书的下载地址(或者,你也可以在GoDaddy控制面板中点击证书旁边的“Launch”按钮)。
点击“Download”按钮开始下载。
选择服务器软件的种类。对于Apache HTTP和Nginx,选择“Apache”,然后点击“Download Zip File”以下载Zip文件。
将下载的ZIP文件解压缩,其中应该包含了两个.crt
文件:一个是正式的证书(现在的文件名是随机生成的),一个是中级证书(文件名是gd_bundle-g2-1.crt
)。将两个文件复制到Web服务器上,并将正式证书重命名为你的域名加.crt
扩展名(如example.com.crt
),将临时证书命名为intermediate.crt
。
现在可以在Web服务器上安装证书了。
在Web服务器上安装证书,需要在配置文件中添加几行SSL相关的内容。本文将介绍Apache HTTP和Nginx的配置。
安装步骤中的命名规范如下:
/home/sammy
example.com.key
example.com.crt
intermediate.crt
如果你的服务器上有防火墙,确保443端口是开启的。
注:在生产环境下,上述文件所存放的位置——尤其是私钥——仅对Web服务器主进程的运行用户(通常是root)开放。私钥要存放在安全的地方。
对于Nginx,你需要把正式证书和中级证书放在一起创建一个“证书链”文件。
进入证书文件所在的目录(本文使用的是用户主目录):
cd ~
使用如下命令创建证书链文件example.com.chained.crt
:
cat example.com.crt intermediate.crt > example.com.chained.crt
进入Nginx配置目录,默认位置在/etc/nginx/sites-enabled
:
cd /etc/nginx/sites-enabled
打开该服务器所使用的块文件(本文使用default
):
sudo vi default
找到listen
条目,将其编辑为如下内容:
listen 443 ssl;
然后,找到server_name
条目,确保填写正确的域名,并在其下添加两个条目ssl_certificate
和ssl_certificate_key
:
server_name example.com;
ssl_certificate /home/sammy/example.com.chained.crt;
ssl_certificate_key /home/sammy/example.com.key;
再添加如下条目,以使用最安全的SSL协议:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
如果要把HTTP访问重定向到HTTPS,可以在文件开头处添加如下内容:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://example.com/$1 permanent;
}
检查填写的域名、文件路径等无误后,保存退出。
重启Nginx以启用TLS/SSL使HTTPS生效:
sudo service nginx restart
现在到浏览器访问网站进行测试(如https://example.com
)。
Apache的虚拟主机配置文件默认在/etc/apache2/sites-available/000-default.conf
。进行编辑之前我们先做个备份:
cd /etc/apache2/sites-available
cp 000-default.conf 000-default.conf.orig
然后用编辑器打开文件:
sudo vi 000-default.conf
找到
,将端口改成443:
找到ServerName
条目,填写你的域名(如果该条目不存在则需添加):
ServerName example.com
然后,将如下内容复制粘贴到文件中(记得将文件路径替换成你自己的):
SSLEngine on
SSLCertificateFile /home/sammy/example.com.crt
SSLCertificateKeyFile /home/sammy/example.com.key
Apache 2.4.8及以上的版本,添加如下条目以指定中级证书位置:
SSLCACertificateFile /home/sammy/intermediate.crt
老版本Apache则使用下面这行内容:
SSLCertificateChainFile /home/sammy/intermediate.crt
现在,Apache服务器仅监听443端口,而发送给HTTP(80端口)的请求会被丢弃。我们需要在文件开头处添加如下内容以对HTTP请求进行转发:
ServerName example.com
Redirect permanent / https://example.com/
保存退出。
输入如下命令以启用Apache SSL模块:
sudo a2enmod ssl
重启Apache以使更改生效:
sudo service apache2 restart
在浏览器里访问你的网站测试一下(如https://example.com
)。记得也访问一下http://example.com
以确保转发是正常工作的。
至此,你应该知道如何给你的Web服务器安装一个可信的SSL证书了。好好选一个你喜欢的CA吧!
本文来源自DigitalOcean Community。英文原文:How To Install an SSL Certificate from a Commercial Certificate Authority by Mitchell Anicas
翻译:lazycai