赞
踩
首先得先申请一个证书
可以通过阿里云,腾讯云购买免费的ssl证书,也可以通过 来此加密来申请证书。
cd /etc/apache2/
我们要配置另 ssl 证书,要依靠另一个文件,也就是
/etc/apache2/sites-available/default-ssl.conf
首先我们需要设置一个软链接,把这个文件链接到sites-enabled这个文件夹中:
ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
然后去修改default-ssl.conf或者000-default-ssl.conf
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin 你的邮箱 DocumentRoot /var/www/你的目录 ServerName 你的域名 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined #启用ssl功能 SSLEngine on # 注意,需要添加这三行 #证书文件 SSLCertificateFile 你自定义的路径/2_xxx.xxx.xxx.crt #私钥文件 SSLCertificateKeyFile 你自定义的路径/3_xxx.xxx.xxx.key #证书链文件 SSLCertificateChainFile 你自定义的路径/1_root_bundle.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>
//开启apache2的ssl模块
sudo a2enmod ssl
//重启apache2服务
systemctl restart apache2 //或者 service apache2 restart
在网站全站HTTPS后,如果用户手动敲入网站的HTTP地址,或者从其它地方点击了网站的HTTP链接,通常依赖于服务端301/302跳转才能使用HTTPS服务。而第一次的HTTP请求就有可能被劫持,导致请求无法到达服务器,从而构成HTTPS降级劫持。这个问题目前可以通过HSTS(HTTP Strict Transport Security,RFC6797)来解决。
HSTS
简介
HSTS(HTTP Strict Transport Security)是国际互联网工程组织IETF发布的一种互联网安全策略机制。采用HSTS策略的网站将保证浏览器始终连接到该网站的HTTPS加密版本,不需要用户手动在URL地址栏中输入加密地址,以减少会话劫持风险。
HSTS
响应头格式
Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
max-age
: 单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过HTTPS协议来访问。也就是对于这个网站的HTTP地址,浏览器需要先在本地替换为HTTPS之后再发送请求。
includeSubDomains
: 可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过HTTPS协议来访问。
preload
: 可选参数,一个浏览器内置的使用HTTPS的域名列表。
举个例子, 我们在 Chrome 浏览器中访问 Facebook 的主页 , 然后打开开发者工具,可以看到服务端发送这样的相应:
这里面的 Strict-Transport-Security 头就是 HSTS 的信息了。 其实在服务端上,只需要发送这个头就可以了。具体的实现都在客户端上,也就是你的浏览器。 当浏览器检测到这样的 Header 信息后,就会做一个记录,根据 max-age 的提示,在一定时间内用户再次访问这个站点的时候就直接使用 HTTPS 协议请求,如果 HTTPS 请求失败,也不会降级到 HTTP 而是直接失败。
这样有什么好处
其实大家平时在使用浏览器的时候,一般是直接在地址栏里面输入域名,然后就访问了。 但大家应该知道,大多数浏览器在默认情况下会先用 HTTP 发起请求的。也就是说即便你的站点已经支持了 HTTPS,但如果不做任何处理的话,用户还是很难触及到。
而为什么我们平时访问很多网站的时候自动就跳转到 HTTPS 站点了呢,也是因为这些站点对这一点做了处理。 最原始的方法就是 302 跳转,服务端把所有的 HTTP 流量跳转到 HTTPS 上。 但这样做有一个明显的安全漏洞, 就是第一次访问站点的时候如果是 HTTP 就有可能被中间人劫持,很可能都没到 302 跳转的时候就被劫持了。
这也就是为什么要引入 HSTS 机制的原因了。 用户的浏览器一旦得到了 HSTS 的信息,下次再访问站点的时候客户端浏览器就会强制使用 HTTPS。 无论你在地址栏里输入什么,都会以 HTTPS 访问。 这样就避免了每次服务端跳转可能导致的潜在安全问题。
这样就解释了为什么我们使用主流浏览器输入网站域名的时候,都会自动跳转到 HTTPS 了。 因为我们访问的大多是主流的大网站,所以用户的感觉就是 HTTPS 自动发生了。但实际上并不是这样的。
HSTS 本身也有缺陷,假如用户的浏览器从未访问过这个站点,那也就不会得到 HSTS 响应头, 这个时候依然会有被劫持风险, 但相比每次都进行服务端跳转的机制,已经好了不少。
针对 HSTS 的这个缺陷,主流的浏览器也提供了一些解决方案,比如把一些大流量并且已知支持 HSTS 的站点预先内置到浏览器中,这样就更大程度的完善了 HTTPS 的安全机制。
Apache上启用HSTS
$ vim /etc/apache2/sites-available/000-default.conf <VirtualHost *:80> ServerName www.hi-linux.com ServerAlias hi-linux.com ... #将所有访问者重定向到HTTPS,解决HSTS首次访问问题。 RedirectPermanent / https://你的域名/ </VirtualHost> $ vim /etc/apache2/sites-available/default-ssl.conf # 开启HSTS需要启用headers模块 LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so <VirtualHost 0.0.0.0:443> ... # 启用HTTP严格传输安全 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" ... </VirtualHost>
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。
因为TLSv1.0存在诸多安全问题,所以我们要用TLSv1.2
$ vim /etc/apache2/sites-available/default-ssl.conf
</VirtualHost>
...
SSLProtocol TLSv1.2
...
</VirtualHost>
PFS(perfect forward secrecy)正向保密 ,在密码学中也可以被称为FS(forward secrecy),是安全通信协议的特性,要求一个密钥只能访问由它所保护的数据,用来产生密钥的元素一次一换,不能再产生其他的密钥,一个密钥被破解,并不影响其他密钥的安全性。
$ vim /etc/apache2/sites-available/default-ssl.conf
</VirtualHost>
...
SSLHonorCipherOrder on
...
</VirtualHost>
HTTP/2 的协议名称,口语叫法HTTP2和http/1.1 是一个概念,通过ALPN协商。
HTTP/2 中只能使用 TLSv1.2+协议
sudo a2enmod http2
$ vim /etc/apache2/sites-available/default-ssl.conf
</VirtualHost>
...
Protocols h2 http/1.1
...
</VirtualHost>
如果使用 Apache2+PHP 架构的应用程序,由于 mpm_prefork 模块不支持 mod_http2,所以我们需要切换 mpm_prefork、mod_php 到 mpm_event 和 php-fpm 来解决这个问题
# Install php-fpm and enable
sudo apt install php-fpm
sudo systemctl enable php7.2-fpm
# To enable PHP 7.2 FPM in Apache2
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.2-fpm
# First to disable PHP 7.2/ mpm_prefork to avoid conflicts,then enable.
sudo a2dismod php7.2 mpm_prefork
sudo a2enmod mpm_event
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。