1.安装openssl 相关基础软件 - 如已安装可跳过,配置nginx时报以下错误信息,是因为服务器安装openssl基础软件
/configure
时提示以下错误:
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl= option.
解决方法:
执行以下命令:
yum -y install openssl openssl-devel
执行成功之后再执行
./configure
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1: using OpenSSL library
+ using system zlib library
+ jemalloc library is disabled
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx dso module path: "/usr/local/nginx/modules/"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
看到最后这样的输出,就是配置成功了。
2.SSL证书安装指南
通过SSL证书服务购买并签发证书后,您可以通过SSL证书控制台将已签发的证书下载到本地,并根据需要将证书安装到要使用证书的环境。
已通过SSL证书服务购买并签发下载证书。
通过SSL证书控制台下载证书到本地后,您还需要将已下载的证书上传到Web服务器并修改服务器的相关配置,才能使SSL证书生效。
不同Web服务器安装SSL证书的具体操作不同。以下内容介绍了在主流Web服务器上安装SSL证书的方法。
Web服务器类型 | 证书安装方法 |
---|---|
Nginx、Tengine | 在Nginx(或Tengine)服务器上安装证书 |
Apache Tomcat 7(及以下版本) |
|
Apache Tomcat 8(及以上版本) | CentOS系统Tomcat 8.5或9部署SSL证书 |
Apache(httpd) | 在Apache服务器上安装SSL证书 |
Apache 2 | Ubuntu系统Apache 2部署SSL证书 |
IIS | 在IIS服务器上安装SSL证书 |
Jetty | 在Jetty服务器上安装SSL证书 |
JBoss | 在JBoss服务器上安装SSL证书 |
GlassFish | 在GlassFish服务器上安装SSL证书 |
3.安装Nginx 配置SSL插件
通过SSL证书服务购买和签发证书后,您可以将已签发的证书下载并安装到Nginx(或Tengine)服务器上。本文介绍了下载SSL证书并在Nginx(或Tengine)服务器上安装证书的具体操作。
本文以CentOS 8操作系统、Nginx 1.14.1服务器系统为例进行说明。由于服务器系统版本不同,您在操作过程中使用的命令可能会略有区别。
本文中出现证书文件名称的地方,统一使用cert-file-name为例进行描述。例如,本文中用到的证书文件为cert-file-name.pem、证书密钥文件为cert-file-name.key。
注意 您在实际操作过程中,需要根据示例代码中的提示,将cert-file-name替换成您的证书文件的名称。关于如何获取证书文件的名称,请参见步骤1。
该操作将会筛选出所有已经通过CA机构签发的证书。
该操作会将Nginx服务器证书压缩包下载到本地,并保存在浏览器的默认下载位置。
例如,您可以使用远程登录工具(例如,PuTTY、Xshell)登录服务器。
cd /usr/local/nginx/conf #进入Nginx默认安装目录。如果您修改过默认安装目录,请根据实际配置进行调整。 mkdir cert #创建证书目录,命名为cert。
注意 如果您在申请证书时将CSR生成方式设置为手动填写,请将您手动创建的证书密钥文件上传到/usr/local/nginx/conf/cert目录。
/usr/local/nginx/conf/nginx.conf
替换成修改后的位置。放大查看复制代码 vim /usr/local/nginx/conf/nginx.conf
i
键进入编辑模式。http{}
),并在HTTP协议代码里面添加以下server配置(如果server配置已存在,按照以下注释内容修改相应配置即可)。使用示例代码前,请注意替换以下内容:
yourdomain.com
:替换成证书绑定的域名。 如果您购买的是单域名证书,需要修改为单域名(例如www.aliyun.com
);如果您购买的是通配符域名证书,则需要修改为通配符域名(例如*.aliyun.com
)。
cert-file-name.pem
:替换成您在步骤3上传的证书文件的名称。cert-file-name.key
:替换成您在步骤3上传的证书密钥文件的名称。#以下属性中,以ssl开头的属性表示与证书配置有关。 server { listen 443 ssl; #配置HTTPS的默认访问端口为443。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。 server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。 root html; index index.html index.htm; ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。 ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的加密套件的类型。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。 ssl_prefer_server_ciphers on; location / { root html; #站点目录。 index index.html index.htm; } }
rewrite
语句。 使用示例代码前,请注意将yourdomain.com
替换成证书绑定的域名。
server { listen 80; server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。 rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 location / { index index.html index.htm; } }
Esc
键、输入:wq!
并按Enter
键,保存修改后的配置文件并退出编辑模式。cd /usr/local/nginx/sbin #进入Nginx服务的可执行目录。 ./nginx -s reload #重新载入配置文件。如果重启Nginx服务时收到报错,您可以使用以下方法进行排查:
the "ssl" parameter requires ngx_http_ssl_module
报错:您需要重新编译Nginx并在编译安装的时候加上--with-http_ssl_module
配置。"/cert/3970497_pic.certificatestests.com.pem":BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/cert/3970497_pic.certificatestests.com.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
报错:您需要去掉证书相对路径最前面的/
。例如,您需要去掉/cert/cert-file-name.pem
最前面的/
,使用正确的相对路径cert/cert-file-name.pem
。具体操作,请参见步骤3:验证是否安装成功
。
说明 不同服务器系统的虚拟主机配置文件不同,例如,Nginx服务器默认是*.conf、Apache服务器默认是vhosts.conf等。关于虚拟主机配置文件的具体路径,请参照服务器使用说明中关于开启虚拟主机方法的介绍。
放大查看复制代码server { listen 80; server_name localhost; location / { index index.html index.htm; } } server { listen 443 ssl; server_name localhost; root html; index index.html index.htm; ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。 ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换已上传的证书密钥文件的名称。 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { index index.html index.htm; } }
RewriteEngine On RewriteCond %{HTTP:From-Https} !^on$ [NC] RewriteCond %{HTTP_HOST} ^(www.)?yourdomain.com$ [NC] #需要将yourdomain.com替换成证书绑定的域名。 RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L] #需要将yourdomain.com替换成证书绑定的域名。
注意 证书安装成功后,您需要在虚拟主机上配置伪静态规则,这样您的网站才能全站都支持HTTPS,否则只有网站的主页支持HTTPS,网站的子目录将不支持HTTPS。
具体操作,请参见步骤3。
证书安装完成后,您可通过访问证书的绑定域名验证该证书是否安装成功。放大查看复制代码
https://yourdomain.com #需要将yourdomain.com替换成证书绑定的域名。
如果网页地址栏出现小锁标志,表示证书已经安装成功。
不同类型证书安装成功后的效果不同,具体如下:
如果验证时出现访问异常,请参照下表进行排查。放大查看
异常现象 | 可能原因 | 处理方法 |
---|---|---|
通过HTTPS无法正常访问您的网站。 | 安装证书的Nginx服务器的443端口未开放或被其他工具拦截。 | 请参照对应的服务器安全设置指南,配置开放服务器的443端口。 |
收到网站提示“您与网站之间的连接未完全安全”。 | 您的网站代码中调用的是HTTP协议。 | 您需要在网站代码中把HTTP协议修改为HTTPS协议。 说明 不同网站代码的实现逻辑可能存在差异,请您根据具体情况进行修改。 |
收到网站提示“该网站未根据工信部相关法律进行备案”。 |
|
请前往备案服务商的系统进行网站备案。 |