記一次從HTTP升級HTTPS徹底指南

前言

目前大多數網站都是在用的HTTPS,爲何要用HTTPS你們必定是都知道的,從HTTP升級到HTTPS,也是爲網站的安全性來考慮的。HTTPS是在HTTP的基礎上加上了SSL安全認證,是正所謂HTTPS=HTTP + SSL。爲了方面本身寫文章,相信大多數同窗都有搭建本身的我的博客(本身純手寫或者使用靜態模板),大多數應該是服務在本身的Nginx服務上或者使用Github託管,使用Nginx作代理的起初是經過HTTP來訪問的,因此須要本身手動去配置成HTTPS的。html

至於爲何推進我去作這件事情?緣由有三點nginx

  1. 當下HTTPS很流行
  2. 本身搭建的網站固然要爲網站的安全性考慮
  3. 在面試過程當中面試官問到了我HTTPS相關知識,而且是怎麼從HTTP升級到HTTPS的

Start

如何來得到證書

搭建HTTPS須要用到SSL證書,這個證書是由CA認證機構來頒發的,通常都是須要RMB的,固然也有一些免費的。FreeSSL就是一個提供免費HTTPS證書申請的網站,筆者就是從這上面申請的。面試

首先進入這個網站的首頁瀏覽器

能夠看到有一個搜索框和一個(建立免費的SSL證書字樣)按鈕。在搜索框中輸入你的域名,點擊按鈕進入證書建立頁面。

在這裏選擇證書類型,筆者選擇的就是圖片上的。在驗證類型上面,由於是第一次踩坑,第一次選擇了DNS,後續的認證沒有經過,經過Google和看大佬們的踩坑日記以後,發現文件驗證更過過一些,因此就嘗試去選擇文件驗證。

CSR生成由於官網推薦,因此就選擇了離線生成。安全

輸入郵箱以後點擊建立,點擊以後會提示打開KeyManager,這個是用來管理證書的,若是本身電腦上沒有能夠去點進去官網下載。服務器

若是已經安裝好了,點擊 再次嘗試啓動KeyManager,就會啓動這個應用,開啓啓動由於這是一個管理私密信息的平臺,因此讓你輸入密碼,進去以後就會提示 CSR生成成功,請返回瀏覽器繼續操做。回到瀏覽器以後點擊繼續就會看到這樣一個東西。

這是用來驗證你的網站是不是可訪問的。按照步驟驗證便可

  1. 先點擊右下角的下載文件
  2. 將文件保存在你的網站根目錄的*.well-known/pki-validation*目錄下,能夠按照文件路徑來配置。
  3. 存在好以後本身在瀏覽器中訪問一下是不是可訪問的,能夠訪問就配置完成了。
  4. 點擊驗證。

驗證經過以後就會看到證書信息,你看到的應該和這個不太同樣(應該是有個經過KeyManager管理的按鈕) session

點擊使用KeyManager管理,就可使用那個管理平臺來管理你的證書了。測試

進入KeyManager證書管理就會看到你的證書。網站

點擊導出證書,選擇相應的服務器,筆者是使用的Nginx服務器,選擇Nginx就能夠,點擊導出就能夠得到SSL證書。

如何來配置Nginx HTTPS

第一步得到證書已經完成,下面就須要進行配置了。服務器配置主要分爲如下幾步:ui

  1. 將證書傳送到你的服務器上
  2. 修改nginx.conf文件配置
  3. 雲服務器443端口開發
  4. http重定向到https
  5. 測試訪問完成

一、將證書傳送到你的服務器上

筆者是使用的騰訊雲的服務器(阿里雲也能夠,都是學生價,便宜),建議將證書放在便於管理的地方,建議放在/etc/ssl下,看名字也知道是用來存在ssl證書的。

將證書傳入到服務器上可使用Linux的scp命令

#若是是文件
scp 你的ssl證書文件  root@你的服務器ip:/etc/ssl
# 若是是文件夾
scp -r 你的ssl證書文件夾 root@你的服務器ip:/etc/ssl
複製代碼

若是傳的是文件,進入服務器上進行解壓,解壓完成以後,就會獲得兩個文件:一個是crt後綴的,一個是key後綴的。

二、修改nginx.conf文件配置

將證書放在服務器上以後須要去修改nginx.conf配置。由於以前是使用的80端口,可是HTTPS使用的443端口,因此要修改一下。

通常Nginx上都有443端口的配置,可是註釋的,只要打開註釋修改一點信息便可。

下面是個人443端口的配置。

server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  kim.cckim.cn;
    root         /usr/share/nginx/html;

    ssl_certificate "/etc/ssl/xxxxx/xxxxx.crt";
    ssl_certificate_key "/etc/ssl/xxxxx/xxxxx.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
            root    /usr/share/nginx/html/public;
            index   index.html;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }
}
複製代碼

將全部的註釋打開,下面說一下須要修改的地方

  1. server_name:若是要443端口和80端口並存的話,建議寫上server_name,當命中這個域名的時候就會來找這個server配置。
  2. ssl_certificate:將ssl證書裏面的crt後綴的文件的絕對路徑寫在這裏。
  3. ssl_certificate_key:將ssl認證裏面的key後綴的文件的絕對路徑寫在這裏。
  4. 配置你的網站的location代理。

nginx.conf上443端口的配置就基本完成了

三、 雲服務器443端口開發

若是你的雲服務器上沒有開發443端口的話須要去服務器平臺的安全組中開發443端口。

操做完成以後就先訪問一下,可能你會發如今瀏覽器中輸入kim.cckim.cn(輸入你的域名)是是沒法訪問的,可是輸入https://kim.cckim.cn(仍是輸入你的域名)就能夠訪問。

是由於域名到nginx默認走的是http,還須要對http作一下重定向到https上。

四、http重定向到https

重定向只須要在nginx.conf文件中配置一下便可。

server {
    listen       80;
    server_name  kim.cckim.cn;
    return 301 https://$host$request_uri;
}
複製代碼

這裏server_name寫你本身的域名便可。再次直接使用域名訪問的話就能夠了。

End

筆者應該是配置HTTPS比較靠後的一批了,相信已經有不少同窗完成。此次把本身的配置過程記錄向來,但願能夠給沒有配置過HTTPS的同窗一些幫助。

相關文章
相關標籤/搜索