HTTPS 是以安全爲目標的 HTTP 通道,即 HTTP 下加入 SSL 加密層。HTTPS 不一樣於 HTTP 的端口,HTTP默認端口爲80,HTTPS默認端口爲443。php
SSL 證書是一種數字證書,它使用 Secure Socket Layer
協議在瀏覽器和 Web 服務器之間創建一條安全通道,從而實現:css
正式使用的話確定是付錢由CA機構給頒發合法證書;部分CA機構也提供免費證書。html
可申請的CA機構舉例:
一、阿里雲
二、StartSSL前端
具體申請步驟請自行查閱。nginx
內部使用能夠本身生成SSL證書(這個用戶訪問會提示證書無效或過時,存在安全隱患等等,內部人用直接信任繼續訪問便可使用),通常狀況下用不到。segmentfault
內部生成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
,名字能夠根據本身須要在生成的時候進行修改。服務器
以nginx服務器示例。咱們只須要在本身網站的配置文件nginx.conf中的server端增長如下配置;dom
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。
一、圖解https協議 - - 博客頻道 - CSDN.NET
http://blog.csdn.net/yufaw/article/details/8515889
二、https 頁面中引入 http 資源的解決方式 - 大前端 - SegmentFault
https://segmentfault.com/a/1190000004200361?utm_source=Weibo