首页 > 代码库 > 关于数字证书和数字签名的一些认识

关于数字证书和数字签名的一些认识

加密,本质上就是将一串明文,通过某种方式,转变成一串密文。

而加密中又有对称加密和非对称加密之分,其中非对称加密则是认识数字签名和数字证书的基础。

简单来说,非对称加密方式的原理是生成一对密钥对,包含公钥和私钥,在展现上可以理解成就是一串字符串,我们可以利用ssh keygen来生成这样的一对密钥,如下:


其生成对应的文件如下:


首先,看看私钥文件的内容,如下:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAtNJHVPDKM9r/ZaqT+2Df0FhQzUUZqIngrMG1mco4IhHIffpw
83rIzNQZVHD/H78bvgDhSGaTeZhB49CNVUrvILkl479RjmtsrTJHE1xUilNTDedv
M8ASkmkPdxuNYyKIO3aNM5Jo+uEF2G//V1eCJBqm9flvb9v2djAmeFMJRSB7/rQl
VbGqMkjdE+j5oTSu/IAB37y/72fPGt0eEvdksA2ByyYbv9KcU8AbSHrhSgSJbOyF
RLUJejTZnj5uSfjrcdxFVysaqaduPxwRBGqGpSPTtks99Rqp/QZH34dm/BwTeqiX
c1tva0c9z6Ap0P56d7xekyY8XWvWgQGeKd+VJQIBIwKCAQEAhlMQavwD7AHFCbHq
RbWtk3TOT1fnLL4x32tTtBKQGU8J9y8SE/TPrhnm7kVPznC1hdTEnC7xNcGQCFHI
E3l+cBSCi+01RTnbs9w0zI27JO1w5cHdlChIT4E+sEBaZuZz1GayCQ2tEiOAr2kk
FP8teefpvgnAfvssHUhXF44kJLfL8mq3bEkCQUk7XcYlnafgdsfNbYTb9IlHWDOq
TJtc/wQnqTeCFD+VuYWga6KGYjBFp4udZS0RBW8+Z5QdgPlITKlpvKhq86NdWFpl
UwbTgnPB1k8s2UezeVEkEADMLtdF8v4Fv0rM40ELbnlbw2UJxc9dw8BoEjrdQuG2
zRDTcwKBgQDbFTqoRs74ANCA+NRKu3V59Bl9rjJCObFtY11vGUo1P5HzheCAG8HL
xLHSHj1LzZDBPTo1C78ruyMn8YwUTxcn6GbFdPRMWJ1yFWnwkKl85Arj+Cwa9ol9
CZrY6WOCqwnsPDPcN9QkaMWeWTADt5c2KWMzQPao5rU9SuFLCZWMHwKBgQDTSode
wgpC2ZXHRDstfdNffDIqu6ZpTv2VXk3Tko1F8c6T9Swdw+KastpnXkVDC/e5MJ3B
RHRG1Uq2SKYK4PSnIkKsn1QW9V9NRnOEXJpPfcvg9j5mnv9slQgNL13lJbVJFOOz
fvFelYKtnMzIHDfeiP0ZaDZp1FOqb8kYH+52OwKBgFFfqBKd9RpJcgQEpp9qMvLI
YT1PVH7/fGp1XTfk0muMo+y8sni52kRfADgZ3EC6ETHU6bvua5PmbCTHboszUb5d
ooPa+6dUHTkAo7EfyeyPNz67Q5T8fDXBvSv+6nJcySvb2L+Cc137B5KWJ8bdynMz
8aVSpMJkUfIxwWUDj1FNAoGBAMc3pDTFlKVuEOBziEDVuKp8adCFCp3OIksBJM7M
AYsXMHzf2SNg65ksSkQ0T+7CJBUB89N7DovtrNfA1xGSRcInnfM3I2YajQ5YXkmZ
I8dKuOoMvn4DoF8QLCmwUTcjjatONcZ/ANWFpxi4aU72CMqBKSaVdSH0FF7ebSVf
73bJAoGBAIr8sYR/6zJex/oFoY5R/s2KfLZXglc7k5k9lsWNpWbCTP1A7UjlOEqw
wtK11oH4W5FDScTn//uGv6kehMgnHMIjZbacHhcJ0JF6Av2Utxl49CqYzSRerC0i
xOAEeVAAqSsO+zuprFb20wKCEqN290uz7SheRFZ81TYWoIJfYeeH
-----END RSA PRIVATE KEY-----

以.pub后缀的文件,我们就可以把其当估公钥,其内容如下:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtNJHVPDKM9r/ZaqT+2Df0FhQzUUZqIngrMG1mco4IhHIffpw83rIzNQZVHD/H78bvgDhSGaTeZhB49CNVUrvILkl479RjmtsrTJHE1xUilNTDedvM8ASkmkPdxuNYyKIO3aNM5Jo+uEF2G//V1eCJBqm9flvb9v2djAmeFMJRSB7/rQlVbGqMkjdE+j5oTSu/IAB37y/72fPGt0eEvdksA2ByyYbv9KcU8AbSHrhSgSJbOyFRLUJejTZnj5uSfjrcdxFVysaqaduPxwRBGqGpSPTtks99Rqp/QZH34dm/BwTeqiXc1tva0c9z6Ap0P56d7xekyY8XWvWgQGeKd+VJQ== sheepjtgjfc@163.com

以上这样由ssh keygen生产的公私钥,一般是用在由ssh机制登陆远程服务器中用的,比如Git的远程服务器上一般就会有一个SSH 公钥库来维持我们的公钥,利用这种非对称加密的机制来验证我们的身份了。

而验证身份其实就是验证签名,就相当于我们在某张纸上签了个名,别人要来证明这是我们签的一样。

现实中我们在纸上签名,那么在互联网通信过程中呢,那就是数字签名了。

数字签名

数字签名,其实就是拿我们的私钥对想要签名的内容进行加密的过程。

为什么数字签名能够在互联网中发挥作用呢?这是基于其两个特性。

1)防篡改

比如小明现在用自己的私钥将内容加密之后(签名),然后传给小红,小红可以用小明的公钥进行解密,从而看到内容。

而在这个过程中,虽然其他人也有可能拿到小明的公钥去解密数据,然后看到数据的内容,但是其没有办法将数据修改之后,再重新加密,然后送给小红,因为没有小明的私钥。

所以小明签名过的内容传给小红,就一定还是那些内容,没法篡改。

2)防抵赖

第二个问题就是,你一旦签了名,你就不能耍赖,不认账,为什么?

因为只要能用你的公钥来解来这数据,就说明这数据一定是用你的私钥来加密的,而私钥理论上来说,只有你一个人有,那么就一定是你用私钥来加密的,那么就是你签的名。

数字证书

从上面的情况来看,数字签名很靠谱,但是细心的人就会发现,小明的公钥去哪里拿?

让小明直接将公钥发给小红?那小红又怎么知道这是不是真的小明啊?面对面?直接用U盘?=_=!!!

那么只有找一个我们两方都信任的第三方机构来为我们作公证了,这个机构就是证书中心,也就是俗称的CA了。

小明如果去申请一个数字证书,那么证书里面会包含小明的自然信息,包括姓名呀,机构等等之类的,还有小明想要提供给别人验证的公钥,而最重要的是证书中心对这份证书的签名,这样我们才对验证这份证书的签名。

到这里,又出现一个矛盾了,我们又要去找谁来验证这份证书上的签名是不是证书中心的呀,解决方案是又再找一个第三方机构来对这个机构来颁发证书。。。。,于是就构成了证书链。

但是最后总会出现一个机构,我们没有办法来验证其真实有效性,我们只能去选择相信它,于是它就变成了根证书。

根证书就是那些不需要,也没办法去进行真伪验证的证书。

这个时候小红手上就有了小明的数字证书,它就能够对接收到的所谓小明的信息进行验证,如果验证通过了,那么就能证明是小明发送给它的,接下去,一起愉快的玩耍了。


关于数字证书和数字签名的一些认识