很多站主建站的第一选择是lnmp配置wordpress环境,在lnmp一键安装脚本程序当中,可以通过dns验证ssl证书并且一键部署,对于一些免费但短期的ssl证书经配置还可以自动续期。但是,如果没有安装lnmp脚本而是单独安装了Apache + MySQL/MariaDB/Percona + PHP该如何申请(创建)ssl证书并且安装呢?
SSL那些事
1、SSL简介
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。本文只谈域名型 SSL 证书(DV SSL -Domain Validation SSL)。
SSL证书(SSL Certificates)提供了安全套接层(SSL)证书的一站式服务,包括证书申请、管理及部署功能,与顶级的数字证书授权(CA)机构和代理商合作,为您的网站、移动应用提供 HTTPS 解决方案。
3、https与SSL
https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL。HTTPS实际上应用了Netscape的安全套接字层(SSL)作为HTTP应用层的子层。HTTPS比HTTP多出了ssl握手环节。
4、SSL证书获取途径
1)自己生成的ssl证书(不被浏览器信任)不推荐
2)去CA机构申请下载并上传证书到服务器 √ (免费或收费,大概率可获得「https安全」浏览器绿标)
申请工作
1、先要有自己的顶级域名(废话),找一家可靠的SSL证书颁发机构
Let’s Encrypt(推荐)
Let’s Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS。已经被Firefox、Chrome、IE等浏览器所支持。
传送门:FreeSSL.org(中文代理网站,一次申请有效期三个月,逾期免费申请更换)
腾讯云DV SSL 证书
拥有Symantec 赛门铁克、GeoTrust等国际知名证书品牌。可免费申请一年的SSL证书(赛门铁克亚太白金战略合作伙伴亚洲诚信(TrustAsia)自研证书品牌,由赛门铁克根证书签发。)
传送门:腾讯云DV SSL
2、申请(以Let’s Encrypt为例)
来到FreeSSL.org,邮箱注册。来到首页,根据自己的需求选择「多域名通配符 」型和「多域名」型,填入自己的顶级域名,点击创建免费的SSL证书。【证书类型】根据需要选择「ECC」 和「RSA」,【验证方式】选择「DNS」,【CSR(证书签名请求文件)生成】选择「浏览器生成」,点击创建。
之后,会出现如下画面,DNS验证需要我们去自己域名供应商网站中的域名解析设置,新建一个TXT record,记录(host)和记录值(value)按下图所示填写。两条记录填写完毕,点击确定并等待1min左右,在freessl.org页面点击「验证」,完毕。获得自己的有效期三个月的免费SSL证书,并且下载到本地。
下载文件共两个,一个是证书pem文件,另一个是私钥key文件,在本地保存好它们。
SSL证书Apache服务器的安装(防火墙以及80、443端口监听问题请自行解决)
1、通过ssh登录自己的vps主机,安装mod_ssl模块:
1 |
# yum -y install mod_ssl |
2、检查mod_ssl的安装结果
1 2 3 |
# rpm -qc mod_ssl # /etc/httpd/conf.d/ssl.conf #mod_ssl的配置文件存放位置 |
3、找到Apache安装目录 /etc/httpd/,在 /etc/httpd/conf中新建一个名为「ssl」的文件夹
1 2 3 |
# cd /etc/httpd/conf #进入/etc/httpd/conf目录 # mkdir ssl #新建ssl文件夹 |
4、将本地pem文件和私钥上传至vps
1 2 3 4 5 |
# 在temp.website网站上传文件,生成链接,进入,复制单个文件链接 # cd /etc/httpd/conf/ssl #打开ssl目录 # wget http(s)://xxxxxxxx #粘贴第一步的链接,下载文件 |
5、打开ssl.conf文件并配置:
1 2 3 4 5 |
# General setup for the virtual host, inherited from global configuration # DocumentRoot "/var/www/html" #取消前面的注释 # ServerName www.sample.com:443 #取消前面的注释,填写自己的域名 |
填写Server Certificate和Server Private Key,注意对应好路径和文件:
1 2 3 4 5 |
# Server Certificate: # SSLCertificateFile /etc/httpd/conf/ssl/xxxx.pem # Server Private Key: # SSLCertificateKeyFile /etc/httpd/conf/ssl/xxxx.key |
重启Apache服务:
1 |
# service httpd restart |
6、在自己的域名前加上https,成功访问即为success。
收尾(http自动跳转为https)
按以上设置好之后,我们直接输入自己的域名,发现访问的仍然是http页面。因此我们还需要配置vps以做到将http网页自动跳转为https网页。
1 |
# vi /etc/httpd/conf/httpd.conf |
打开配置文件后,找到<Directory /var/www/html>部分,然后更改AllowOverride从指令None到All :
1 2 3 4 5 6 7 8 9 |
<Directory /var/www/html> # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride All </Directory> |
重启Apache服务:
1 |
# service httpd restart |
打开.htaccess文件(如没有请新建New file)
1 |
# vi /var/www/html/.htaccess |
相关域名全部设置为https:
1 2 3 |
# RewriteEngine On # RewriteCond %{SERVER_PORT} 80 # RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L] |
站点绑定多个域名,只允许www.example.com 跳转:
1 2 3 4 5 |
# RewriteEngine On # RewriteCond %{SERVER_PORT} 80 # RewriteCond %{HTTP_HOST} ^example.com [NC,OR] # RewriteCond %{HTTP_HOST} ^www.example.com [NC] # RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L] |
<注意替换自己的域名>
Advanced usage:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
RewriteEngine on # 强制HTTPS RewriteCond %{HTTPS} !=on [OR] RewriteCond %{SERVER_PORT} 80 # 某些页面强制 RewriteCond %{REQUEST_URI} ^something_secure [OR] RewriteCond %{REQUEST_URI} ^something_else_secure RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] # 强制HTTP RewriteCond %{HTTPS} =on [OR] RewriteCond %{SERVER_PORT} 443 # 某些页面强制 RewriteCond %{REQUEST_URI} ^something_public [OR] RewriteCond %{REQUEST_URI} ^something_else_public RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] |
Enjoy it!