HTTPS配置全記錄
前幾天幫腎上[email protected](CSDN唯一一個使用者名稱裡有特殊字元的使用者)部署一個HTTPS,雖然去年寫過用Let’s Encrypt證書部署HTTPS的文章,但是這次略有不同,所以作個記錄吧,順便也把常見的做法都說一說。
環境
常見的部署環境和條件有以下幾種情況組合:
- Apache+自簽名證書
- Apache+免費或商業證書
- Nginx+自簽名證書
- Nginx+免費或商業證書
免費證書和商業證書本質上是一樣的,都是可以被系統承認的證書,只是申請方式不同而已。
證書
證書結構
配置一個HTTPS服務所需要的證書包括幾個部分:
- Server Key(伺服器私鑰)
- CSR(Certificate Signing Request)
- CRT(X509 Certificate)
建立證書的基本流程是這樣:
- 生成自己的服務端私鑰
- 輸入基本資訊並用私鑰簽名生成CSR
- 提交CSR給證書機構CA(免費或商業證書)簽名生成CRT,或自己做CA簽名生成CRT(自簽名證書)
其中前兩個步驟都是一樣的,在這裡統一說明一下。
生成伺服器私鑰:
openssl genrsa -out server.key 4096
輸出的server.key檔案就是伺服器私鑰,4096是金鑰長度,要求不高的話用2048也可。
生成CSR:
openssl req -new -sha256 -key server.key -out yoursite.csr
因為sha1已經不安全,所以這裡用了sha256,可能太舊的客戶端(比如win98?)會不支援。
yoursite.csr就是生成的CSR,yoursite建議用你的網站名標識會比較方便識別。
然後按提示輸入:
- 國家
- 省
- 市
- 公司
- 部門
- 通用名(即網站域名,這個必須準確,有些商業證書支援在這裡用帶www的域名後簽發出同時支援不帶www的域名)
- 密碼(可選,設定的話以後重啟webserver都需要輸入密碼)
自簽名證書做法
生成CRT:
openssl x509 -req -days 3650 -in yoursite.csr -signkey server.key -out yoursite.crt
其中籤名用的KEY就是自己的服務端私鑰,所以這是一個自簽名證書。
有效期為3650天(即十年)。
免費證書生成
商業證書生成
首先找一個商業證書機構(CA)或其代理商下一個證書訂單。
其次是選擇證書型別。
證書型別
商業證書有很多型別,也有很多的CA可以選擇,不同的CA,不同的型別價格也不一樣。
常見的CA有:
- VeriSign(Symantec)
- GeoTrust(RapidSSL)
- Comodo
- ……
以上以價格從高到低排序。除此之外當然還有很多,具體可以開啟你的系統證書列表看看。
需要特別說一句的就是:臭名昭著的CNNIC和沃通(WoSign,包括免費的StartSSL),已經被證明不安全,建議將它們從系統中刪除,並且不要去申請使用它們的證書。
常見的證書型別有三種:
- DV(域名驗證)
- OV(組織驗證)
- EV(擴充套件驗證)
驗證級別從低到高排序,價格也是如此。
DV證書只驗證域名,在最終訪問者那邊檢視證書時將不會包含CSR中的組織資訊,只有域名資訊,也就是說你就算是在CSR裡輸入你是GOOGLE,到了客戶端那裡也是看不到的。
OV證書除了驗證域名還需要驗證組織,即你需要提供證據證明你在CSR裡輸入的公司或組織的確是你, 這樣才能在客戶端證書裡檢視到你的組織資訊。
EV證書就要求更高了,通常是金融機構之類的用。
除此之外,證書還有一種區別:
- 單域名證書
- 多域名證書
- 泛域名證書
一樣是價格從高到低排序。
單域名證書就是隻能用於一個域名的證書,某些商業證書可以提供兩個域名:帶WWW的和不帶WWW的。
多域名證書就是一個證書可以用於多個域名,預設支援三個域名,當然增加域名需要加錢,但比單獨買單域名證書要便宜。適用於一個公司有多個域名,而且多個域名部署在一個伺服器上,使用一個證書會比較省事,也比較便宜。
泛域名證書就是一個證書可以用於一個域名下的任意多個子域名。
申請流程
一般申請流程(僅指DV型別)如下:
- 選擇CA或代理商
- 選擇證書型別
- 選擇有效期(以年為單位,一般時間越長單價越便宜)
- 下單付款
- 成交後按服務商的郵件或文件開始驗證域名(以下為一種流程,不同服務商可能不太一樣)
- 上傳CSR(或用服務商提供的工具生成,但不推薦)
- 選擇驗證方式(EMAIL,檔案,DNS等)
- 按相應方式操作
- 等待驗證
- 取得證書(郵件或從服務商處自行下載)
其中各驗證方式大致如下:
- Email:證書機構向域名註冊郵箱或域名的webmaster等郵箱(可選)傳送驗證郵件
- 檔案:在域名的指定路徑下放驗證檔案供證書機構訪問
- DNS:建立指定的DNS TXT記錄供證書機構驗證
通過驗證後即可獲得證書。
證書內容一般包括:域名的CRT,證書機構的CRT鏈(可能有多個),根證書CRT(CA的證書),如果用服務商的工具生成CSR,還應該會有CSR和KEY。
部署
分別以最常用的Apache和Nginx為例,其它WebServer請參考相關文件。
Apache
這裡只介紹Apache2(以2.4為例)。
HTTPS的基本配置可以直接套用預設配置,只是要改一下證書檔案的部分:
SSLEngine on
SSLCertificateFile /path_to_ssl/yoursite.crt
SSLCertificateKeyFile /path_to_ssl/yoursite.key
SSLCertificateChainFile /path_to_ssl/server-ca.crt
其中yoursite.crt和yoursite.key就是前面說過的私鑰和域名證書。
重點說一下server-ca.crt,這個就是前面談到商業證書時提到的中間證書鏈(包括CA根證書)。對於Let’s Encrypt這樣的免費證書,這個就是Let’s Encrypt的證書(見舊文),對於自簽名證書,這一項可以去掉。
中間證書鏈的生成方法如下:
cat provider.crt provider-parent.crt root.crt > server-ca.crt
很簡單,就是把那一堆證書串起來生成一個證書檔案即可,不過需要注意順序,從最低階的證書(你的域名證書的上一級)開始到最高階的CA根證書。
Apache從2.2.12開始支援SNI,可以為多個域名的虛擬主機使用各自獨立的證書,用法與HTTP虛擬主機類似,只需要在每個虛擬主機配置里加上相應的證書配置即可。
需要注意的是:WinXP,JAVA6,Android 2.3等不支援SNI。
最後,如我在去年的舊文裡所說,SSLv2/v3之類的協議和某些SSL加密演算法已經不再安全,所以在沒有特定的相容性需要的情況下,需要配置禁用這些不安全的選項。
在全域性配置(注意,不是單個虛擬主機配置裡)里加上:
SSLProtocol TLSv1 +TLSv1.1 +TLSv1.2
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES128-SHA:!DHE-DSS-AES128-SHA256:!DHE-RSA-AES256-SHA256:!DHE-DSS-AES256-SHA:!DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
以上協議和加密演算法都是目前還安全的,並且提供了最大可能的相容性。未來如果出現新的安全問題,請自行調整。
Nginx
基本上在舊文裡都說過了,這裡再總結一下。
相比Apache的配置,Nginx沒有單獨的中間證書鏈專案,所以是把中間證書鏈和域名證書串在一起作為完整的域名證書來用:
cat yoursite.crt server-ca.crt > new_yoursite.crt
配置HTTPS:
ssl on;
ssl_certificate "/path_to_ssl/new_yoursite.crt";
ssl_certificate_key "/path_to_ssl/yoursite.key";
SNI配置見舊文,從略。
全域性安全配置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
配置完成後重啟服務即可生效。
不論是用Apache還是Nginx,都建議配置完HTTPS以後到SSL Labs驗證一下安全性。
相關推薦
HTTPS配置全記錄
前幾天幫腎上[email protected](CSDN唯一一個使用者名稱裡有特殊字元的使用者)部署一個HTTPS,雖然去年寫過用Let’s Encrypt證書部署HTTPS的文章,但是這次略有不同,所以作個記錄吧,順便也把常見的做法都說一說。
git碼雲的一次配置全記錄
首先這個碼雲,顧名思義,程式碼在雲端,可以說git是一個程式設計師的標配工具,具體有啥用先看教程吧 首先我們先安裝git,這裡我用centos7做一個演示,第一步安裝git yum install -y git 第二步去碼雲註冊一個賬號,然後新建一個專案,專案命名隨意 然後返回
【Caffe2】Windows7下caffe2編譯配置全記錄(GPU版)
caffe2跟老版caffe相比變化較大,更容易上手和使用。但caffe2的windows版配置比linux下要麻煩一些、且更容易出錯,把全過程記錄下,以供參考。 1. 準備工作 (1)安裝CUDA、cuDNN (
Oracle GoldenGate 安裝配置全記錄
1 安裝OGG 1.1 上傳OGG壓縮包 解壓壓縮包 1.2 配置環境變數 .bash_profile中新增如下內容 export LD_LIBRARY_PATH=$ORACLE_HOME/lib 1.3 建立OGG工作目錄 GGSCI (rac01) 3> cr
在CentOS7上配置MariaDB-Galera-Cluster過程全記錄
base table inf replicat connect 全局 lec sig 5.5 在CentOS7上配置MariaDB-Galera-Cluster過程全記錄 MySQL or MariaDB Replication之Galera Cluster Galera
安裝Valet記錄,配置全局環境變量。
是否 blog 內容 raw code elf fff dev pin 1.安裝 Homebrew 軟件包管理工具,如果已經安裝,可以跳過此步驟 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.
kubernetes traefik配置https實踐操作記錄
實驗環境 rate 解決 操作 總結 cert spec setting -a 1.參考文檔 http://traefik.cn/ 2.訪問方式簡易說明 參考文檔https://tonybai.com/2018/06/25/the-kubernetes-ingress-pr
Nginx的https配置記錄以及http強制跳轉到https的方法梳理
一、Nginx安裝(略)安裝的時候需要注意加上 --with-http_ssl_module,因為http_ssl_module不屬於Nginx的基本模組。Nginx安裝方法: 1 2 # ./configure --user=www --grou
HTTPS從認識到線上實戰全記錄
目錄 前言 首發於我的個人部落格和我的部落格園,轉載請註明出處,謝謝。 關於HTTPS,基本上你想知道的都在這裡了(當然僅限入門)。本文原標題《HTTPS原理與實踐》,下圖是本文配套PPT的目錄截圖: 原理篇 認識HTTPS 先說一下,本文可能有些地方由於描述不到位或者我本人理解錯誤而出現不準確內容,有錯
Tomcat容器https配置之單向認證
-a nis get new sls cep local min session 測試環境 Windows 7 IE 11 Intellij IDEA 2017 JDK 1.8.0_25 Tomcat 6.0.36 httpcore 4.4.6 httpclient 4.5
nginx 反向代理http和https配置
nginx 反向代理http httpsnginx可以反向代理http,同樣也可以代理https,只是需要ssl證書。這裏推薦一個好用的證書:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E 步驟非常詳細。安裝nginx 參照:http:/
分頁的前後交互配置+全選隱藏功能,該條信息的前後交互(全選與該條信息的綁定)。
rst 描述 log ted text class chang 管理員 next 其中兩個知識點需要註意: 1.分頁的前後交互配置。 2.全選隱藏功能,該條信息的前後交互(全選與該條信息的綁定)。 a)分頁的交互: $(function(){
mysql如何配置sql記錄
lean edit target 似的 51cto put cto www 不同 原文鏈接:http://www.qqdeveloper.com/detail/11/1.html 為什麽要記錄sql記錄 主要目的是為了檢測我們的網站安全問題,有效的避免一些sql註入或者是x
apache https配置
index key oot prot app onf amp https oca upupw配置https耽擱了一天時間,終於配置好了。現在簡單整理一下過程: 1.安裝upupw環境,百度教程 2.下載https安全證書,我這裏從阿裏雲上下載的,解壓壓縮包,把apache文
Silverlight+WCF項目Https配置
light 目的 buffer messages logs imp 驗證 lin 網站 情況是這樣的,部門有個Sliverlight項目,現在為安全考慮網站都要使用https,https證書等配置是在另一臺Unix服務器做的,用戶訪問時會通過它中轉到其ABC三個window
Linux配置全局jdk以及Tomcat服務器簡單測試
遠程 png 試用 源文件 接下來 soft 跟著 客戶 profile Linux配置全局jdk 1.確保相應文件夾下有apache-tomcat和jdk的壓縮文件 註意:jdk文件必須為適應Linux版本的文件 (如果已經有了相應文件,可以跳過以下第2
PCS 配置Oauth記錄
httpurl shm red nan adl leo index bsp trace 1.先生成一個客戶端的私鑰 keytool -genkeypair -keystore mykeystore.jks -alias myPcsClient -storepass wel
配置環境[記錄]
conf dep onf 重要 腳手架 depend lin 二維 依賴 Node記錄 網址:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014
誰動了我的特征?——sklearn特征轉換行為全記錄
blog selection clas 意義 print encoder 分享 steps 轉換函數 目錄 1 為什麽要記錄特征轉換行為?2 有哪些特征轉換的方式?3 特征轉換的組合4 sklearn源碼分析 4.1 一對一映射 4.2 一對多映射 4.3 多對多映
Nginx 學習筆記(一)個人網站的Https配置
ast 請求重定向 nginx nta pda opera 配置虛擬主機 location cat 一、系統環境 1、系統:Ubuntu 16.04.2 LTS 2、WEB服務器:Openresty11.2.5 二、開始配置 1、獲取certbot客戶端 wget htt