现实生活中,为了证明某个个体具有某种资格,某些机构就会给该个体颁发一个证书。其他人看到该证书,就相信该个体具有了某种资格。 也就是说,证书能证明某种事情。
下面是现实生活中的证书的样子:
数字证书与现实生活中的证书的理念完全一样。
数字证书有2
个作用:
在数字证书中,"盖章"被称为"签名"。理论上,谁都可以给证书进行签名,包括自己给自己签名,就好比,我自己给自己颁发了一个"三好学生"的证书, 上面的盖张是自己的名字。这个就是自签名证书。这也是数字证书,只是没有人承认它。大家都只承认CA
(Certificate Authority
,证书授权中心)签名的证书。
自签名证书不是一无是处,因为数字证书有两个作用:一:验证合法性;二:验证完整性。显然,自签名证书无法用来验证合法性,但是可以用来验证完整性。
在Android开发中,对APK签名,使用的基本上都是自签名证书。 因为在安装APK的时候,Android系统只验证这个APK的完整性,不会验证它是否是合法的(是不是从某个CA
颁发的证书)。
在iOS开发中,对IPA签名就不能使用自签名证书,必须要向苹果公司申请证书, 因为开发者在将IPA上传到iTunesConnect进行审核的时候, 审核不仅会验证IPA的完整性,还会验证IPA的合法性。
现实生活中的证书上都会有某个权威机构的盖章。我们相信这个证书,主要是因为我们相信这个权威机构。
在数字证书中,我们要想获得这个权威机构"盖章的"证书,就必须要向CA
(Certificate Authority
,证书授权中心)去申请。
你要向某个CA
申请被他们签名的证书,首先你必须要告诉他们一些你的相关信息。
你到底要告诉他们一些你的什么信息呢?它们制定了一个规范,叫做CSR(Certificate Signing Request)
。
CSR
是一个文件,详细规定了这里面应该有哪些内容、格式是什么样子等。
既然CSR
是一个规范,那么肯定有工具可以生成它。
通过openssl生成CSR
的一个示例:
openssl req -newkey rsa:2048 -new -nodes -keyout xx.key -out xx.csr
这条命令生成了两个文件:xx.key
和xx.csr
,xx.key
是私钥,而xx.csr
就是符合CSR(Certificate Signing Request)
规范的那个文件,把xx.csr
发送给CA
,CA
就会根据你发送给他的xx.csr
发送给你经过他们签名的证书。
你如何告诉他们呢?通常是通过电子邮件,当然,也不全然,还有可能是你通过Web
页面上传到他们指定的地方。
一定要把这两个文件保存好,当CA
颁发的证书过期的时候,你还可以用同样的xx.csr
来申请新的证书,xx.key
保持不变。
数字证书的编码格式有2
种: