数字证书
1.1、数字证书简介

现实生活中,为了证明某个个体具有某种资格,某些机构就会给该个体颁发一个证书。其他人看到该证书,就相信该个体具有了某种资格。 也就是说,证书能证明某种事情。

下面是现实生活中的证书的样子:

数字证书与现实生活中的证书的理念完全一样。

1.2、数字证书的作用

数字证书有2个作用:

  • 验证完整性
  • 验证合法性
1.3、自签名证书

在数字证书中,"盖章"被称为"签名"。理论上,谁都可以给证书进行签名,包括自己给自己签名,就好比,我自己给自己颁发了一个"三好学生"的证书, 上面的盖张是自己的名字。这个就是自签名证书。这也是数字证书,只是没有人承认它。大家都只承认CACertificate Authority,证书授权中心)签名的证书。

自签名证书不是一无是处,因为数字证书有两个作用:一:验证合法性;二:验证完整性。显然,自签名证书无法用来验证合法性,但是可以用来验证完整性。

Android开发中,对APK签名,使用的基本上都是自签名证书。 因为在安装APK的时候,Android系统只验证这个APK的完整性,不会验证它是否是合法的(是不是从某个CA颁发的证书)。

iOS开发中,对IPA签名就不能使用自签名证书,必须要向苹果公司申请证书, 因为开发者在将IPA上传到iTunesConnect进行审核的时候, 审核不仅会验证IPA的完整性,还会验证IPA的合法性。

1.4、CA颁发的证书

现实生活中的证书上都会有某个权威机构的盖章。我们相信这个证书,主要是因为我们相信这个权威机构。

在数字证书中,我们要想获得这个权威机构"盖章的"证书,就必须要向CACertificate Authority,证书授权中心)去申请。

1.5、如何向CA申请签名的证书?

你要向某个CA申请被他们签名的证书,首先你必须要告诉他们一些你的相关信息。

你到底要告诉他们一些你的什么信息呢?它们制定了一个规范,叫做CSR(Certificate Signing Request)

CSR是一个文件,详细规定了这里面应该有哪些内容、格式是什么样子等。

既然CSR是一个规范,那么肯定有工具可以生成它。

通过openssl生成CSR的一个示例:

openssl req -newkey rsa:2048 -new -nodes -keyout xx.key -out xx.csr

这条命令生成了两个文件:xx.keyxx.csrxx.key是私钥,而xx.csr就是符合CSR(Certificate Signing Request)规范的那个文件,把xx.csr发送给CACA就会根据你发送给他的xx.csr发送给你经过他们签名的证书。

你如何告诉他们呢?通常是通过电子邮件,当然,也不全然,还有可能是你通过Web页面上传到他们指定的地方。

一定要把这两个文件保存好,当CA颁发的证书过期的时候,你还可以用同样的xx.csr来申请新的证书,xx.key保持不变。

1.5、数字证书的编码格式

数字证书的编码格式有2种: