首页 > 代码库 > 关于数字证书和数字签名的一些认识
关于数字证书和数字签名的一些认识
加密,本质上就是将一串明文,通过某种方式,转变成一串密文。
而加密中又有对称加密和非对称加密之分,其中非对称加密则是认识数字签名和数字证书的基础。
简单来说,非对称加密方式的原理是生成一对密钥对,包含公钥和私钥,在展现上可以理解成就是一串字符串,我们可以利用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了。
小明如果去申请一个数字证书,那么证书里面会包含小明的自然信息,包括姓名呀,机构等等之类的,还有小明想要提供给别人验证的公钥,而最重要的是证书中心对这份证书的签名,这样我们才对验证这份证书的签名。
到这里,又出现一个矛盾了,我们又要去找谁来验证这份证书上的签名是不是证书中心的呀,解决方案是又再找一个第三方机构来对这个机构来颁发证书。。。。,于是就构成了证书链。
但是最后总会出现一个机构,我们没有办法来验证其真实有效性,我们只能去选择相信它,于是它就变成了根证书。
根证书就是那些不需要,也没办法去进行真伪验证的证书。
这个时候小红手上就有了小明的数字证书,它就能够对接收到的所谓小明的信息进行验证,如果验证通过了,那么就能证明是小明发送给它的,接下去,一起愉快的玩耍了。
关于数字证书和数字签名的一些认识