本文将全面介绍如何在Nginx或Tengine服务器配置SSL证书,具体包括下载和上传证书文件,在Nginx上配置证书文件、证书链和证书密钥等参数,以及安装证书后结果的验证。成功配置SSL证书后,您将能够通过HTTPS加密通道安全访问Nginx服务器。
本文以CentOS 8.0 64位操作系统、Nginx 1.14.2为例介绍。不同版本的操作系统或Web服务器,部署操作可能有所差异,如有问题,请联系商务经理进行咨询。
如果您使用的是阿里云云服务器ECS(Elastic Compute Service),必须在ECS管理控制台的安全组页面,放行443端口,否则网站访问可能出现异常。关于如何配置安全组,请参见添加安全组规则。
本文中出现证书文件名称的地方,统一使用cert-file-name进行描述。例如,本文中用到的证书文件为cert-file-name.pem,证书私钥文件为cert-file-name.key。在实际操作过程中,您必须使用正确的证书文件名称替换示例代码中的cert-file-name。
前提条件
步骤一:下载SSL证书
登录数字证书管理服务控制台。
在左侧导航栏,选择。
在SSL证书管理页面,定位到目标证书,在操作列,单击下载。
在服务器类型为Nginx的操作列,单击下载。
解压缩已下载的SSL证书压缩包。
根据您在提交证书申请时选择的CSR生成方式,解压缩获得的文件不同,具体如下表所示。
CSR生成方式
证书压缩包包含的文件
系统生成
证书文件(PEM格式):Nginx支持安装PEM格式的文件,PEM格式的证书文件是采用Base64编码的文本文件,且包含完整证书链。解压后,该文件以
证书ID_证书绑定域名
命名。私钥文件(KEY格式):默认以证书绑定域名命名。
手动填写
如果您填写的是通过数字证书管理服务控制台创建的CSR,下载后包含的证书文件与系统生成的一致。
如果您填写的不是通过数字证书管理服务控制台创建的CSR,下载后只包括证书文件(PEM格式),不包含证书密码或私钥文件。您可以通过证书工具,将证书文件和您持有的证书密码或私钥文件转换成所需格式。转换证书格式的具体操作,请参见证书格式转换。
步骤二:在Nginx服务器安装证书
执行以下命令,在Nginx的conf目录下创建一个用于存放证书的目录。
cd /usr/local/nginx/conf #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。 mkdir cert #创建证书目录,命名为cert。
将证书文件和私钥文件上传到Nginx服务器的证书目录(/usr/local/nginx/conf/cert)。
说明您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTy、Xshell或WinSCP等。如果您使用的阿里云云服务器 ECS,上传文件具体操作,请参见上传或下载文件(Windows)或上传文件到Linux云服务器。
编辑Nginx配置文件nginx.conf,修改与证书相关的配置。
执行以下命令,打开配置文件。
vim /usr/local/nginx/conf/nginx.conf
重要nginx.conf默认保存在/usr/local/nginx/conf目录下。如果您修改过nginx.conf的位置,可以执行
nginx -t
,查看nginx的配置文件路径,并将/usr/local/nginx/conf/nginx.conf
进行替换。在nginx.conf中定位到server属性配置。
说明如果确定nginx.conf或include指令所引用的文件不存在上图server块,请您自行手动进行添加。
删除行首注释符号#,并参考如下示例进行修改。
server { #HTTPS的默认访问端口443。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 listen 443 ssl; #填写证书绑定的域名 server_name <yourdomain>; #填写证书文件绝对路径 ssl_certificate cert/<cert-file-name>.pem; #填写证书私钥文件绝对路径 ssl_certificate_key cert/<cert-file-name>.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置) #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示优先使用服务端加密套件。默认开启 ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
可选:设置HTTP请求自动跳转HTTPS。
如果您希望所有的HTTP访问自动跳转到HTTPS页面,可通过rewrite指令重定向到HTTPS。
重要以下代码片段需要放置在nginx.conf文件中
server {}
代码段后面,即设置HTTP请求自动跳转HTTPS后,nginx.conf文件中会存在两个server {}
代码段。server { listen 80; #填写证书绑定的域名 server_name <yourdomain>; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 rewrite ^(.*)$ https://$host$1; location / { index index.html index.htm; } }
配置效果如下图所示:
执行以下命令,重启Nginx服务。
cd /usr/local/nginx/sbin #进入Nginx服务的可执行目录。 ./nginx -s reload #重新载入配置文件。
说明报错
the "ssl" parameter requires ngx_http_ssl_module
:您需要重新编译Nginx并在编译安装的时候加上--with-http_ssl_module
配置。报错
"/cert/3970497_demo.aliyundoc.com.pem":BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/cert/3970497_demo.aliyundoc.com.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
:您需要去掉证书相对路径最前面的/
。例如,您需要去掉/cert/cert-file-name.pem
最前面的/
,使用正确的相对路径cert/cert-file-name.pem
。
步骤三:验证SSL证书是否配置成功
证书安装完成后,您可通过访问证书的绑定域名验证该证书是否安装成功。
https://yourdomain #需要将yourdomain替换成证书绑定的域名。
如果网页地址栏出现小锁标志,表示证书已经安装成功。