公钥与私钥,以及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: 这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章