公鑰與私鑰,以及nginx配置https

公鑰和私鑰:
A有兩把鑰匙,一個是公鑰,一個是私鑰
公鑰是可以給別人的,所有A給了X,Y,Z三個人公鑰(三個人的公鑰是相同的)

場景一:

  1. X給A寫一封私密的信,所以用A的公鑰加密,那麼A收到信後,可以使用他自己手上的私鑰解密,那麼就可以看到信件的內容,沒有私鑰的人是看不到信件的內容的。
  2. A要給X回信,那麼就需要用到數字簽名
    • 先使用hash函數生成信件的digest
    • 再使用私鑰對這個digest加密,這就生成了數字簽名
    • 信件 + 數字簽名 一起發送給X
  3. X收到後:
    • 先對數字簽名使用公鑰解密,得到digest(證明確實是A發出來的)
    • 再自己使用hash函數算出digest,得到digest與上面的對比(證明信件的內容沒有被修改)

場景二:
Y可以偷偷將X手裏的A的公鑰換成自己的公鑰,然後Y可以使用自己的私鑰做出數字簽名發給X,但是X還以爲手上的信件是A的,所以以爲收到的信件都是A的。
問題來了:無法確定手上的公鑰真的屬於正確的人?
所以就去找證書中心CA,證書中心用他自己的私鑰,將A的公鑰公鑰擁有者個人信息等加密成數字證書所以現在X手上只會有CA的公鑰,不會有X的公鑰。

  1. A寫信的話,需要信件+數字簽名+數字證書(CA頒發的證書)
  2. X收信後,用CA公鑰解密數字證書,獲取A的公鑰,對比裏面的個人信息(確定獲取的是誰的公鑰)
  3. 然後像上面一樣用A的公鑰解密數字簽名。。。。

根據域名製作證書方法


nginx配置https

下面是nginx官方文檔的配置:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

需要指定一個數字證書和一個私鑰文件

  1. pfx: 帶有私鑰和公鑰的證書(正常的數字證書是帶有公鑰的),需要導出私鑰是需要私鑰密碼打開。對*nix服務器來說,一般CRT和KEY是分開存放在不同文件中的,但Windows的IIS則將它們存在一個PFX文件中,(因此這個文件包含了證書及私鑰)
  2. pfx可以轉成pem key crt
    openssl pkcs12 -in drtaxtest.pfx -nodes -out drtaxtest.pem
    openssl rsa -in drtaxtest.pem -out drtaxtest.key
    openssl x509 -in drtaxtest.pem -out drtaxtest.crt
    
  3. 編碼格式:有兩種,一種是PEM(Apache,Nginx偏向於這種),一種是DER。但是證書的拓展名並不一定就是PEM或者DER,還可以是後面這些
  4. crt: 兩種編碼格式都有可能(Liunx使用)
  5. key:用於存放一個公鑰或者私鑰,
  6. cer:普通的帶有公鑰沒有私鑰的證書(主要windows使用)
  7. scr: 這個並不是證書,而是向權威證書頒發機構獲得簽名證書的申請,其核心內容是一個公鑰(當然還附帶了一些別的信息),在生成這個申請的時候,同時也會生成一個私鑰。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章