CentOS7 Linux系统 Nginx web服务器配置SSL证书开启https协议

CentOS7 Linux系统 Nginx web服务器配置SSL证书开启https协议

什么是SSL证书服务

SSL证书服务(Alibaba Cloud SSL Certificates Service)是由中国及中国以外地域多家数字证书颁发机构( CA,Certificate Authority)。SSL证书服务帮助您以最小的成本将服务从HTTP转换成HTTPS,实现网站或移动应用的身份验证数据加密传输

购买SSL证书,并向CA中心提交证书申请,直到证书成功签发;将已签发的证书安装到Web服务器后,则Web服务将会通过HTTPS加密协议来传输数据。

SSL证书采用SSL协议进行通信,是由权威机构颁发给网站的可信凭证,具有网站身份验证和加密传输双重功能。

SSL证书指定了在应用程序协议(例如,HTTP、Telnet、FTP)和TCP/IP之间提供数据安全性分层的机制。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。

SSL证书采用公钥体制,即利用一对互相匹配的密钥对进行数据加密和解密。每个用户自己设定一把特定的、仅为本人所知的私有密钥(私钥),并用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。

SSL证书部署到Web服务器后,您通过Web服务器访问网站时将启用HTTPS协议。您的网站将会通过HTTPS加密协议来传输数据,可帮助您的Web服务器和网站间建立可信的加密链接,从而保证网络数据传输的安全

为什么网站需要HTTPS?

  • 防劫持、防篡改、防监听:使用SSL证书实现网站的HTTPS化,可以对网站用户与网站间的交互访问全链路数据进行加密,从而实现传输数据的防劫持、防篡改、防监听。
  • 提升网站的搜索排名:使用SSL证书实现网站的HTTPS化后,网站在搜索引擎显示结果中的排名将会更高,有利于提升网站的搜索排名和站点的可信度。
  • 提升网站的访问流量:使用SSL证书实现网站的HTTPS化,可以强化网站在用户侧的身份可信程度,使网站用户能更安心地访问网站,提升网站的访问流量。

常见证书类型

不同类型证书的安全性和适用的网站类型不同,具体如下表所示。

数字证书 适用网站类型 公信等级 认证强度 安全性 支持的证书品牌
DV域名级SSL 个人网站 一般 CA机构审核个人网站真实性、不验证企业真实性 一般 GeoTrust、DigiCert(原Symantec)、vTrus(国产)、WoSign(国产)
OV企业级SSL 政府组织、企业、教育机构等 CA机构审核组织及企业真实性 GlobalSign、GeoTrust、DigiCert(原Symantec)、CFCA(国产)
EV增强级SSL 大型企业、金融机构等 最高 严格认证 最高(地址栏绿色) GeoTrust、DigiCert(原Symantec)、CFCA(国产)

主流Web服务软件

一般来说,主流的Web服务软件,通常都基于OpenSSL和Java两种基础密码库。

  • Tomcat、Weblogic、JBoss等Web服务软件,一般使用Java提供的密码库。通过Java Development Kit (JDK)工具包中的Keytool工具,生成Java Keystore(JKS)格式的证书文件。
  • Apache、Nginx等Web服务软件,一般使用OpenSSL工具提供的密码库,生成PEM、KEY、CRT等格式的证书文件。
  • IBM的Web服务产品,如Websphere、IBM Http Server(IHS)等,一般使用IBM产品自带的iKeyman工具,生成KDB格式的证书文件。
  • 微软Windows Server中的Internet Information Services(IIS)服务,使用Windows自带的证书库生成PFX格式的证书文件。

判断证书格式

可以使用以下方法简单区分带有后缀扩展名的证书文件:

  • .DER或.CER文件: 这样的证书文件是二进制格式,只含有证书信息,不包含私钥。
  • *.CRT文件: 这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与 .DER及.CER证书文件相同。
  • *.PEM文件: 这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 .PEM 文件如果只包含私钥,一般用.KEY文件代替。
  • .PFX或.P12文件: 这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。

您也可以使用记事本直接打开证书文件。如果显示的是规则的数字字母,例如:

—–BEGIN CERTIFICATE—–
MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh......
—–END CERTIFICATE—–

那么,该证书文件是文本格式的。

  • 如果存在——BEGIN CERTIFICATE——,则说明这是一个证书文件。
  • 如果存在—–BEGIN RSA PRIVATE KEY—–,则说明这是一个私钥文件。

证书格式转换

以下证书格式之间是可以互相转换的。

img

  • 将JKS格式证书转换成PFX格式

    您可以使用JDK中自带的Keytool工具,将JKS格式证书文件转换成PFX格式。例如,您可以执行以下命令将 server.jks证书文件转换成 server.pfx证书文件:

    keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx
            -srcstoretype JKS -deststoretype PKCS12
    
  • 将PFX格式证书转换为JKS格式

    您可以使用JDK中自带的Keytool工具,将PFX格式证书文件转换成JKS格式。例如,您可以执行以下命令将 server.pfx证书文件转换成 server.jks证书文件:

    keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks
            -srcstoretype PKCS12 -deststoretype JKS
    
  • 将PEM/KEY/CRT格式证书转换为PFX格式

    您可以使用 OpenSSL工具,将KEY格式密钥文件和CRT格式公钥文件转换成PFX格式证书文件。例如,将您的KEY格式密钥文件(server.key)和CRT格式公钥文件(server.crt)拷贝至OpenSSL工具安装目录,使用OpenSSL工具执行以下命令将证书转换成 server.pfx证书文件:

    openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
    
  • 将PFX转换为PEM/KEY/CRT

    您可以使用 OpenSSL工具,将PFX格式证书文件转化为KEY格式密钥文件和CRT格式公钥文件。例如,将您的PFX格式证书文件拷贝至OpenSSL安装目录,使用OpenSSL工具执行以下命令将证书转换成server.pem证书文件KEY格式密钥文件(server.key)和CRT格式公钥文件(server.crt):

    • openssl pkcs12 -in server.pfx -nodes -out server.pem
    • openssl rsa -in server.pem -out server.key
    • openssl x509 -in server.pem -out server.crt

    说明 此转换步骤是专用于通过Keytool工具生成私钥和CSR申请证书文件的,并且通过此方法您可以在获取到PEM格式证书公钥的情况下分离私钥。在您实际部署数字证书时,请使用通过此转换步骤分离出来的私钥和您申请得到的公钥证书匹配进行部署。

常见术语

HTTPS

HTTPS也就是HTTP+SSL,基于SSL协议的网站加密传输协议,是HTTP的安全版。

您的网站安装SSL证书后,将会通过HTTPS加密协议来传输数据,HTTPS加密传输协议可激活客户端浏览器到网站服务器之间的SSL加密通道(SSL协议),从而实现高强度双向加密传输,防止传输数据被泄露或篡改。

Nginx

Nginx是一款轻量级高并发的Web服务器、反向代理服务器和电子邮件(IMAP和POP3)代理服务器,在BSD-like协议下发行。它可以运行在Linux、Windows、FreeBSD、Solaris、AIX、Mac OS等操作系统上,为您提供反向代理、负载均衡、动静分离等服务。

CentOS

社区企业操作系统CentOS(Community Enterprise Operating System)是一个基于Red Hat Linux提供的可自由使用源代码的免费版企业级Linux发行版本。

证书安装

Nginx独立服务器

  1. 将本地证书文件和密钥文件上传到Nginx服务器的证书目录(示例中为/usr/local/nginx/conf/cert)。
  2. 编辑Nginx配置文件(nginx.conf),修改与证书相关的配置内容。
vim /usr/local/nginx/conf/nginx.conf
#以下属性中,以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;
    }
}
  1. 可选配置:设置HTTP请求自动跳转HTTPS。

如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点下添加以下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;
    }
}
  1. 修改完成后,按Esc键、输入:wq!并按Enter键,保存修改后的配置文件并退出编辑模式。
  2. 执行以下命令,重启Nginx服务。
cd /usr/local/nginx/sbin  #进入Nginx服务的可执行目录。
./nginx -s reload  #重新载入配置文件。

Nginx虚拟机

  1. 登录您的虚拟机。
  2. 在Web目录下创建cert目录,并将下载的证书文件和密钥文件拷贝到cert目录中。
  3. 打开虚拟主机配置文件,将以下内容复制粘贴到文件末尾。
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;
    }
}
  1. 保存vhost.conf或*.conf文件并退出。

  2. 可选:

    设置HTTP请求自动跳转HTTPS。

    如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在Web目录下打开.htaccess文件(如果没有,需新建该文件),并添加以下rewrite语句。

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替换成证书绑定的域名。
  1. 重启虚拟主机。
注意 证书安装成功后,您需要在虚拟主机上配置伪静态规则,这样您的网站才能全站都支持HTTPS,否则只有网站的主页支持HTTPS,网站的子目录将不支持HTTPS。

验证是否安装成功

证书安装完成后,您可通过访问证书的绑定域名验证该证书是否安装成功。

https://yourdomain.com   #需要将yourdomain.com替换成证书绑定的域名。

如果网页地址栏出现小锁标志,表示证书已经安装成功。

image-20210421093442464

验证失败

如果验证时出现访问异常,请参照下表进行排查。

异常现象 可能原因 处理方法
通过HTTPS无法正常访问您的网站。 安装证书的Nginx服务器的443端口未开放或被其他工具拦截。 请参照对应的服务器安全设置指南,配置开放服务器的443端口。
收到网站提示“您与网站之间的连接未完全安全”。 您的网站代码中调用的是HTTP协议。 您需要在网站代码中把HTTP协议修改为HTTPS协议。说明 不同网站代码的实现逻辑可能存在差异,请您根据具体情况进行修改。
收到网站提示“该网站未根据工信部相关法律进行备案”。 您的网站未完成备案,未在接入商处完成备案接入。您的网站内容与备案信息不符、备案信息不准确、网站存在不适宜传播的内容等。 请前往备案服务商的系统进行网站备案。
posted @ 2021-04-21 09:53  Rich七哥  阅读(1167)  评论(0编辑  收藏  举报