首页 > 代码库 > 说说证书——如何获取证书

说说证书——如何获取证书

        我曾经看到过很多的朋友,搭建PoC环境甚至是生产环境时,为了方便申请证书,而在AD CS的服务器上安装基于IIS的证书申请站点。

        虽然现在的IIS比以前的安全多了,可是在AD服务器上安装IIS。。。

        首先来说说怎么获取证书吧。

        image

        世界发展到今天,不仅是Windows,苹果的Mac和iOS,安卓,都是一样要使用证书的。每个系统,其实都会使用一个安全的方式来保存证书。前文我们说过,证书就是公钥私钥,因此,苹果使用KeyChain、安卓使用KeyStore来保存公钥私钥。

        如果您曾经申请过证书,就会记得,首先要生成一个证书请求(CSR),然后把这个证书请求提交给CA,CA经过批准后生成一张证书,然后可以把证书导出为CER文件,在生成证书请求的设备上完成证书申请。

        其实在这背后,过程稍微复杂一点。

        首先需要生成证书请求的客户端,其实是生成了一公钥私钥(还记得我们说的?公私钥是唯一的、成对匹配的),私钥会被立即保存到严格保护的Key Store存储中,通常除了生成的证书,不允许其他方式访问私钥。

        紧接着,客户端将公钥,以及需要的证书信息生成一个CSR文件。请记住,私钥永远不会用于申请证书。

        CA获得CSR请求后,可以按照策略,经过管理员批准或者自动允许生成一张证书。这张证书使用CA的证书进行签名,同时至少会包含我们前文说的证书三要素,CA的信息、证书有效期(往往根据证书模板确定)以及颁发给谁(即我们提交CSR时,提供的Subject申请信息,例如服务器的FQDN)。

        这个证书在客户端导入后,客户端就能够使用私钥了。

 

        让我们回到最前面的问题,申请证书是否一定要使用基于IIS的certsvc站点呢?

 

        当然不用。

        我们可以使用certreq.exe命令行来很好的解决这个问题。

        这个工具可以支持命令行方式申请和导入证书。最关键的,这个工具包含在Windows操作系统中。具体命令行可以参考:

       http://technet.microsoft.com/library/cc725793.aspx

       还有一点特别棒的,可以把一组参数作为一个inf文件,提供给命令行。这样,对于相同要求的证书请求,就不再需要每次输入冗长的命令行参数了。

 

      我基于该命令行,使用脚本写了一个证书生成CSR和导入CER、然后导出PFX的工具。关于这些证书文件的格式,以后再做介绍。

      这个工具的第一步,可以生成一个CSR证书请求。

       image

       然后,可以把这个证书请求,发给中间管理员进行签名。

       image

       签过名的证书请求,发送给Apple用于申请APNS证书。

       image

       收到证书后,就可以导入,并且可以将公钥私钥一起导出为PFX文件。

       image

       当然,也可以直接提交CSR到自建CA进行证书的颁发。

说说证书——如何获取证书