網站使用https協議

瞭解https

HTTPS 是以安全爲目標的 HTTP 通道,即 HTTP 下加入 SSL 加密層。HTTPS 不一樣於 HTTP 的端口,HTTP默認端口爲80,HTTPS默認端口爲443。php

SSL 證書是一種數字證書,它使用 Secure Socket Layer 協議在瀏覽器和 Web 服務器之間創建一條安全通道,從而實現:css

  1. 數據信息在客戶端和服務器之間的加密傳輸,保證雙方傳遞信息的安全性,不可被第三方竊聽;
  2. 用戶能夠經過服務器證書驗證他所訪問的網站是否真實可靠。

獲取SSL證書

正式使用的話確定是付錢由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,名字能夠根據本身須要在生成的時候進行修改。服務器

服務器啓用https

以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

相關文章
相關標籤/搜索