當下的互聯網應用如果是外網訪問,一般都是https方式訪問,需申請https證書
目錄
- Why https ?
- What is https?
- How to create https ?
Why https ?
http 明文傳輸不安全,因此需要進行加密處理,加密后端http就是https
What is https?
https 涉及很多概念,對稱非對稱加密 、CA、 數字簽名、 證書 等等,
有興趣查看 這里漫畫解說https
這里簡要總結:
A (客戶端瀏覽器) ------通過 https://www.xxx.com 訪問------> B(服務端網站)
-
AB中途傳輸的資訊都經過對稱加解密(DES AES等)
-
關鍵問題1: A如何將對稱加密的密鑰發給B ?
答案是A通過 B對外發布的非對稱加密公鑰 進行加密后發給B -
關鍵問題2:A如何獲得B的非對稱加密公鑰
答案是B發給A,但不是直接發給A公鑰,而是發給A的一個證書,證書里面包含了B的域名和一些認證簽名資訊和B的非對稱加密公鑰
-
關鍵問題3:B的證書哪里來的?
答案是從CA(權威證書頒布機構)申請的,CA頒發給B的證書中包含了如下資訊:
B的域名
頒發機構
證書有效期
經過CA私鑰加密后的B的公鑰
經過CA私鑰加密后的數字簽名
(所謂數字簽名就是按照一定規則算出的一個字串,
例如 MD5 [域名+有效期+B的公鑰...])
-
A獲得B發過來的證書,通過瀏覽器中預存的各大CA頒發機構找到 對應的公鑰進行解密證書內容,
(各大瀏覽器和作業系統已經維護了所有權威證書機構的名稱和公鑰)在獲得B對外發布的公鑰同時按照同樣的簽名規則,自己也生成一個證書簽名,如果兩個簽名一致,說明證書是有效的,
-
然后 通過B的私鑰加密隨機生成的對稱加密的密鑰給B即可 愉快的進行加密通訊了,
以上步驟中,黑客想要中間截胡偽造B的證書給A是幾乎不可能的,因為無法獲得CA的私鑰
如果A非要使用非權威機構CA頒發的證書,那就沒辦法保證安全了,瀏覽器一般標紅或阻止訪問沒有經過權威機構CA頒發的證書的網站,
How to create https ?
要想http 訪問方式變成 https 網上流程說明很多,總結一下主流步驟:
- 準備好經過認證后的域名
- 去權威網站(如 Let’s Encrypt 或各云平臺)申請域名對應的https證書
- 配置你的應用服務器(如nginx)將獲得的https證書檔案集成到應用中
- 配置監聽443埠,重啟應用服務器,重繪瀏覽器
這里說明一下,之前說的什么生成CSR檔案然后去CA怎么怎么搞的都老土了!
CSR 就是一對公鑰私鑰,到CA申請證書一般很多賣https證書的網站都一套連搞定了!
例如在nginx中配置相關資訊,類似于下面【server】區域的配置:
# HTTPS server
#
server {
listen 443 ssl http2;
server_name www.xxxxx.com;
ssl_certificate /apps/nginx/fullchain.crt;
ssl_certificate_key /apps/nginx/private.pem;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
root /apps/nginx/html;
index index.html index.htm;
}
其中的 :
...
ssl_certificate /apps/nginx/fullchain.crt;
ssl_certificate_key /apps/nginx/private.pem;
...
里面有 fullchain.crt; private.pem; 這兩個檔案,這到底是什么? 還有一般云平臺 提示私鑰格式不正確,請提供RSA格式的證書錯誤是怎么回事?

這里先列出 一般免費https證書 網站 申請通過后,下載下來的壓縮包中的檔案種類說明:
| 檔案 | 說明 |
|---|---|
| private.pem | 私鑰,可更改后綴為key |
| fullchain.crt | 包含了公鑰的CA證書,可更改后綴為pem |
| certificate.pfx | IIS和Tomcat使用,秘鑰在detail.txt中 |
| certificate.crt | 域名證書,一般不用 |
SSL/TLS 小知識點:
SSL/TLS 是一種安全加密協議, TLS是SSL的標準化、升級版本(SSL存在一些缺陷)
SSL目前有三個版本,SSL1.0、SSL2.0、SSL3.0,因其存在嚴重的安全問題,大多數公司目前均已不在使用了,
TLS目前也有三個版本,TLS1.0、TLS1.1、TLS1.2,TLS目前只是草案,并未面世,目前常用的為TLS1.2,server配置通常三個版本均支持
報 “xxxRSA格式的檔案xxx”錯誤時沒有弄明白 RSA 幾種加密形式
其實就是 RSA私鑰格式PKCS1和PKCS8之間的相互轉換
參看 https://www.jianshu.com/p/08e41304edab
一般 PKCS1格式檔案內容如下:
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC5BW6T9GVaaG/epGDjPpY3wN0DrBt+NojvxkEgpUdOAxgAepqe
GbSqtXAd+MOOBbHxIOEwrFC9stkypQgxrB49tXDI+4Jj8MuKI15HEmI8k7+tRDOl
J5TFSL2J9KA3GuQbyVAhlpxl+YnV7yjxP9l1dkbApg1ixSd5KOPbaQ00WQIDAQAB
AoGAYiqzpOTC8dj/og1tKqUGZsZ5fX1PiQO+XBnAbGXFE2sozPhAGSpiZUCnH//h
IfV7mAht8rk6java+bf+RPyhfg0zW7oXy0pm8DwoW7+0fOzQ4sEYeoqza/VrkYwR
5BxBa+KyT1HCi4uXogyDlQT1p0ZT0iaqZBfTApdyVkmcQEECQQDhfPl+ILl0bh0H
8ORoMmmxAZMn293+de441OlAjL3CsF4yhUUdavAYWM0RAV5MJtKUTR4ZpRXkB/pq
kgyTxpr9AkEA0g6pQRpcGxulr2758ZlOLdL8B1n1ubre464IKQ0zNfERKhR/j7U8
LGF+3mhZuoSEdklwLCJ8ZMvIhkV0v8JjjQJBANtqXOyas1vUenNruRabV7ViLuuu
S0p9Px4WMBMb4Ns9+6t1e1ew44kNgB54EmZPsMGWeR/DQJXwHYDuNUbnD5ECQA7S
Gf8N7RG8kaQfIGN7fZieGkoqfrvsA23tCYZb+BEGQT/G0nlBQE2hU2I92pbeYro1
1ERI6p3yAuP2YpZlEMECQGNzhqshYfDiWwU4Q3aZWkRrv74uIXk1HQoFH1BthzQJ
TbzKH/LEqZN8WVau3bf41yAx2YoaOsIJJtOUTYcfh14=
-----END RSA PRIVATE KEY-----
一般 PKCS8格式檔案內容如下:
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALkFbpP0ZVpob96k
YOM+ljfA3QOsG342iO/GQSClR04DGAB6mp4ZtKq1cB34w44FsfEg4TCsUL2y2TKl
CDGsHj21cMj7gmPwy4ojXkcSYjyTv61EM6UnlMVIvYn0oDca5BvJUCGWnGX5idXv
KPE/2XV2RsCmDWLFJ3ko49tpDTRZAgMBAAECgYBiKrOk5MLx2P+iDW0qpQZmxnl9
fU+JA75cGcBsZcUTayjM+EAZKmJlQKcf/+Eh9XuYCG3yuTqNq9r5t/5E/KF+DTNb
uhfLSmbwPChbv7R87NDiwRh6irNr9WuRjBHkHEFr4rJPUcKLi5eiDIOVBPWnRlPS
JqpkF9MCl3JWSZxAQQJBAOF8+X4guXRuHQfw5GgyabEBkyfb3f517jjU6UCMvcKw
XjKFRR1q8BhYzREBXkwm0pRNHhmlFeQH+mqSDJPGmv0CQQDSDqlBGlwbG6Wvbvnx
mU4t0vwHWfW5ut7jrggpDTM18REqFH+PtTwsYX7eaFm6hIR2SXAsInxky8iGRXS/
wmONAkEA22pc7JqzW9R6c2u5FptXtWIu665LSn0/HhYwExvg2z37q3V7V7DjiQ2A
HngSZk+wwZZ5H8NAlfAdgO41RucPkQJADtIZ/w3tEbyRpB8gY3t9mJ4aSip+u+wD
be0Jhlv4EQZBP8bSeUFATaFTYj3alt5iujXUREjqnfIC4/ZilmUQwQJAY3OGqyFh
8OJbBThDdplaRGu/vi4heTUdCgUfUG2HNAlNvMof8sSpk3xZVq7dt/jXIDHZiho6
wgkm05RNhx+HXg==
-----END PRIVATE KEY-----
PKCS1/8 小知識點:
借用網上的評論:
通俗點講吧,PKCS1是標準RSA秘鑰對標準規范,但是都是裸奔的;
PKCS8是對加密后的秘鑰進行了描述,就是說P8格式的秘鑰不是裸奔了
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290218.html
標籤:其他
上一篇:【C/C++面試必備】struct和class的區別
下一篇:Nginx----基礎篇
