全站实现https化
qingheluo2019-02-21清河洛469
一、申请SSL证书,证书有免费和收费区分,收费的支持泛解析,一般个人站长免费的就足够了,以腾讯云为例,网址https://buy.cloud.tencent.com/ssl申请域名证书,填写信息并等待验证之后就可以下载免费证书了。二、把下载的域名证书解压并上传到服务器。三、配置服务器,不同的web服务器配置方法有所差别apache服务器:首先添加监听443端口的网站配置:Listen 443
DocumentRoot "/wwwroot/www"
ServerName www.domain.com
ServerAlias domain.com
SSLEn...
一、申请SSL证书,证书有免费和收费区分,收费的支持泛解析,一般个人站长免费的就足够了,以腾讯云为例,网址https://buy.cloud.tencent.com/ssl申请域名证书,填写信息并等待验证之后就可以下载免费证书了。
二、把下载的域名证书解压并上传到服务器。
三、配置服务器,不同的web服务器配置方法有所差别
apache服务器:
首先添加监听443端口的网站配置:
Listen 443DocumentRoot "/wwwroot/www" ServerName www.domain.com ServerAlias domain.com SSLEngine on SSLProtocol TLSv1 TLSv1.1 TLSv1.2 #只允许使用TLS #SSLProtocol all -SSLv2 -SSLv3 允许除SSLv2和SSLv3之外的所有 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 #加密套件 SSLCertificateFile "/crt文件路径/2_domain.crt" SSLCertificateKeyFile "/key文件路径/3_domain.key" SSLCertificateChainFile "/crt文件路径/1_root_bundle.crt" Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted
PS:SSLv2是不安全的,我们需要禁用它。SSLv3会受到卷毛狗漏洞(POODLE)的攻击,TLS 1.0在遭受到降级攻击时,会允许攻击者强制连接使用SSLv3,所以也需要禁用SSLv3。Google提出了一个名为TLSFALLBACKSCSV 的SSL/TLS扩展,它用于防止强制 SSL 降级,自OpenSSL 0.9.8版本之后会自动启用。
PS:加密套件的顺序是非常重要的,因为其决定了优先选择哪个算法。如果OpenSSL 版本比较旧,不可用的加密算法会自动丢弃,已经被强制丢弃的加密算法:
aNULL 包含了非验证的 Diffie-Hellman 密钥交换,这会受到中间人(MITM)攻击 eNULL 包含了无加密的算法(明文) EXPORT 是老旧的弱加密算法,是被美国法律标示为可出口的 RC4 包含的加密算法使用了已弃用的 ARCFOUR 算法 DES 包含的加密算法使用了弃用的数据加密标准(DES) SSLv2 包含了定义在旧版本 SSL 标准中的所有算法,现已弃用 MD5 包含了使用已弃用的 MD5 作为哈希算法的所有算法
然后在.htaccess文件中添加全站301跳转:
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L] #RewriteCond %{SERVER_PORT} !^443$ #RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} ^domain.com [NC] RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]
最后重启apache服务即可。
nginx服务器:
在网站配置文件中添加监听443端口的网站:
listen 443 ssl; #ssl on; 上句中listen 443后面添加了ssl已经代表ssl开启,这也是官方推荐写法 ssl_certificate /路径/xxxxxxxx.pem; ssl_certificate_key /路径/xxxxxxxx.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; ssl_session_timeout 5m; ssl_session_cache shared:SSL:10m; if ($server_port = 80){ return 301 https://$server_name$request_uri; } if ($scheme = http) { return 301 https://$server_name$request_uri; } error_page 497 https://$server_name$request_uri;
最后重启nginx服务器。
PS:更安全的SSL服务器配置请点击查看Mozilla SSL配置生成器
PS:javascript也可以实现全站http跳转到https
方法一: var targetProtocol = "https:"; if (window.location.protocol != targetProtocol){ window.location.href = targetProtocol + window.location.href.substring(window.location.protocol.length); } 方法二: var url = window.location.href; if (url.indexOf("https") < 0) { url = url.replace("http:", "https:"); window.location.replace(url); }