网站使用https协议以及在nginx的配置
2017-12-01 17:55
761 查看
了解https
HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层。HTTPS 不同于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443。SSL 证书是一种数字证书,它使用
Secure Socket Layer协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:
数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听;
用户可以通过服务器证书验证他所访问的网站是否真实可靠。
获取SSL证书
正式使用的话肯定是付钱由CA机构给颁发合法证书;部分CA机构也提供免费证书。可申请的CA机构举例:
1、阿里云
2、StartSSL
具体申请步骤请自行查阅。
内部使用可以自己生成SSL证书(这个用户访问会提示证书无效或过期,存在安全隐患等等,内部人用直接信任继续访问即可使用),一般情况下用不到。
内部生成SSL证书步骤:
# 生成一个RSA密钥 $ openssl genrsa -des3 -out ssltest.key 1024 # 拷贝一个不需要输入密码的密钥文件 $ openssl rsa -in ssltest.key -out ssltest_nopass.key # 生成一个证书请求 $ openssl req -new -key ssltest.key -out ssltest.csr # 自己签发证书 $ openssl x509 -req -days 365 -in ssltest.csr -signkey ssltest.key -out ssltest.crt
第3步是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域名后缀的。这样就有一个
csr文件了,提交给
ssl 提供商的时候就是这个
csr文件。
当然我这里并没有向证书提供商申请,而是在第4步自己签发了证书。到这里证书就生成成功到目标目录下,名字为
ssltest.crt,还有
ssltest_nopass.key,名字可以根据自己需要在生成的时候进行修改。
服务器启用https
以nginx服务器示例。我们只需要在自己网站的配置文件nginx.conf中的server端增加以下配置;listen 443 ssl; # ssl on; ssl_certificate /etc/nginx/ssltest.crt; ssl_certificate_key /etc/nginx/ssltest_nopass.key;
完整示例:
server { listen 443 ssl; listen 80; server_name 52fhy.com www.52fhy.com; index index.php index.html index.htm; root /www/52fhy.com/; #ssl on; ssl_certificate_key /usr/local/nginx/conf/52fhy.com.key; ssl_certificate /usr/local/nginx/conf/1_52fhy.com_bundle.crt; if ($scheme = http) { # rewrite ^(.*)$ https://$host$1 permanent; } location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } access_log /usr/local/nginx/log/access/52fhy.com.log; }
注意:这个
ssl on我本来是加上的,但是发现这样http就不能访问了,去掉后且
listen 443 ssl能同时支持http和https。
listen 443 ssl表示仅443端口使用ssl。
重启之后网站就可以用https访问啦,同时还支持http访问。
常见问题
网页引入的站外资源加载不了
例如页面引入了百度地图的资源,打开控制台发现使用https后加载不了,直接block了。原因是览器默认是不允许在 https 里面引用 http 资源的。
解决办法是将
http://改成相对协议
//。具体使用方法为:
<img src="//domain.com/img/logo.png">
简而言之,就是将URL的协议(http、https)去掉,只保留
//及后面的内容。这样,在使用https的网站中,浏览器会通过
https请求URL,否则就通过
http发送请求。
当然,如果站外链接的资源不支持https还是加载不了的。这时候可以采用其它方法,如使用 iframe,或者使用nginx方向代理将https转向http。
以下是使用腾讯用的证书和私钥在nginx.conf中的配置
server { listen 443; server_name xxx.com.cn; ssl on; ssl_certificate /usr/share/nginx/conf/1_xxx.com.cn_bundle.crt; ssl_certificate_key /usr/share/nginx/conf/2_xxx.com.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; include /etc/nginx/default.d/*.conf; location /r/ { rewrite ^/r/(.*) /$1 break; proxy_pass http://localhost:8080; } location / { root /data/ifmall/static/; index index.html index.htm; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
相关文章推荐
- tomcat配置https以及nginx使用ssl模块配置HTTPS
- 网站升级HTTPS,免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置方法
- 在Nginx上使用https协议增强网站的安全性
- Nginx https的安装配置以及证书的使用
- 服务器配置nginx和tomcat都使用https协议
- 在Linux上配置发布网站以及使用nginx搭建集群
- nginx中使用https时,证书的生成方式及配置
- 配置Tomcat使用https协议(配置SSL协议)
- nginx使用ssl模块配置HTTPS支持
- 在IIS中使用SSL配置HTTPS网站
- nginx使用ssl模块配置HTTPS支持
- 网站安全配置(Nginx)防止网站被攻击(包括使用了CDN加速之后的配置方法
- Nginx配置SSL证书部署HTTPS网站
- Nginx配置SSL证书部署HTTPS网站
- 配置Tomcat使用https协议(配置SSL协议)
- apache中使用mod_gnutls模块实现多个SSL站点配置(多个HTTPS协议的虚拟主机)
- Tomcat配置https协议、以及http协议自动REDIRECT到HTTPS
- 修改端口Tomcat配置https协议、以及http协议自动REDIRECT到HTTPS-java教程
- Nginx配置SSL证书实现访问HTTPS网站
- 在IIS中使用SSL配置HTTPS网站