第03课:Windows

第03课:Windows 操作系统下如何管理 SSL 证书

Windows 操作系统本身,对于 SSL 证书的管理应该还是挺方便的,其主要通过三种方式进行操作:

  • 浏览器的证书管理
  • MMC 的控制台的证书管理
  • PowerShell 命令的证书管理

下面笔者将对这三种方式进行分享和阐述。

浏览器的 SSL 证书管理

在 Windows 操作系统里面,不像 Chrome 和 FireFox,微软的 IE 浏览器和 Windows 操作系统有着天然血缘关系,这不,通过 IE 浏览器,我们还能方便的进行 SSL 证书管理:比如导入、导出 SSL 服务器以及其 CA 的 SSL 证书。首先需要做的就是打开一个 IE 浏览器,按照下面的步骤,就能操作操作系统的 SSL 证书了。

Step 1. 单击菜单工具(Tools)→ Internet 选项(Internet Options)→ 内容(Contents)页面,这时就能看到一个名称为证书(Certificates)的按钮了,如下图所示意。

enter image description here

Step 2. 单击证书(Certificates)按钮,则会弹出一个管理 SSL 证书的窗体:

enter image description here

Step 3. 其提供下面 6 种类型的证书归类方式:

  • Personal(私人)
  • Other People(其他)
  • Intermediate Certificate Authorities(中级 CA 证书)
  • Trusted Root Certification Authorities(可信任的根证书)
  • Trusted Publisher(可信任的颁发者)
  • Untrusted Publisher(不可信任的颁发者)

一般来说,操作系统都会事先预装一些世界知名根 CA 的根证书和中级 CA 证书在操作系统里面,这样当我们访问一些由这些知名 CA 商业厂商(如 Versign、COMODO、GeoTrust 等)颁发的 SSL 证书的 Web 服务器的时候,用 IE 浏览器访问的时候,不会弹出任何有关 SSL 安全警告信息。如果所访问的网站的 CA 证书没有预装到操作系统里面或者人工导入到 Trusted Root Certification Authorities(可信任的根证书)的列表中的时候,则会弹出有关 SSL 的安全警告窗体。比如,我们过年过节的时候必须要打交道的 12306 火车票购票网站

enter image description here

其颁发 12306.cn SSL 服务器的 CA 就是中国人自己的 CA 中心,自豪吧,而这个根 CA 的证书并没有被预装到微软的操作系统里面,那为什么 12306.cn 的购票网站不从世界知名的 CA 厂商去申请一张 SSL 证书,笔者认为主要是因为信息安全的问题,大家想想,自己的 CA,私钥是掌握在自己手里的,而世界上知名的 CA 厂商大部分都是美国企业,与此同时购票网站里面可存储着很多身份证以及火车调度的信息,这些信息在平时也许没有很大的杀伤力,但是在战争的时候,就会显得很重要,所以还是中国人自己的 CA 中心可靠,不会也不敢轻易把私钥泄露给别的国家,一旦私钥泄露,就非常容易被窃取,访问基于 HTTPS 协议的火车购票系统时,其被 SSL 证书加密的信息基本上就等于暴露在“光天化日之下”。

Step 4. 导出证书,选择感兴趣的需要导出的 SSL 证书,单击下面的导出(Export…)按钮,就准备开始导出证书了,与此同时,可以选择你感兴趣的格式,如下图所示意的:

  • DER
  • CER
  • P7b
  • PFX(P12)
  • SST

enter image description here

对于每种格式的区别,在后面的一个章节会有详细的介绍,这里就不再赘述。

Step 5. 导入 SSL 证书也非常的简单,单击你想导入的证书归类方式(上面的 Step3 有提及),然后单击导入(Import…)按钮,选择你想导入的证书的位置,单击“下一步(Next)”按钮就能导入了。

enter image description here

Step 6. 如果想删除导入的证书,也很简单,单击你想导入的证书归类方式(上面的 Step3 有提及),然后选择要删除的 SSL 证书,单击下面的移除(Remove)按钮,就能删除你想删除的证书了,So Easy。

MMC 的 SSL 证书管理

一般情况下,我们只知道可以通过浏览器打开和查看当前登陆用户操作系统账户下的 SSL 证书,那么这些 SSL 证书是否还有其他的方式打开并查看呢?其实,Window 操作系统自身也提供了一个存储证书和管理证书的工具,就是 MMC 工具,操作的简要步骤如下。

Step 1. 在 run 命令中输入 mmc 或者在 cmd 的命令行中输入 mmc。

Step 2. 将会打开一个 mmc 的管理台:

enter image description here

Step 3. 在 File 菜单中选择 File→Add or Remove Snap-ins 选项,将会打开下面界面,我们选择并添加“Certificates”选项。

enter image description here

Step 4. 选择一个账号类型,一般选择 My User account 即可。

enter image description here

Step 5. 这样就能把所属的账号类型下面的证书列举出来了。

enter image description here

Step 6. 可以通过下图的方式导入证书(以根证书为例子)。

enter image description here

Step 7. 可以通过下图的方式导出证书(以根证书为例子)。

enter image description here

没有想到 Window 操作系统上还有这么方便的工具,可以通过可视化工具来进行 Window 的 SSL 证书的导入导出管理。

PowerShell 的 SSL 证书管理

PowerShell 其实就 Windows 操作系统下一个非常好用的函数工具箱,其提供了很多命令来操作和管理 Windows 操作系统的 SSL 证书。为了保证操作结果的一致性,本章的 PowerShell 操作和管理 Windows 证书的 PowerShell 命令的版本是 PowerShell 5.1,关于如何升级安装 PowerShell 5.1,请自行百度或者谷歌搜索,这里不在赘述。

PowerShell 查看 SSL 证书管理

下面通过 PowerShell 的命令来查看和管理 Windows 操作系统上的 SSL 证书。

PowerShell 提供不同的 Drives Provider 来存储不同的数据类型,比如运行下面的命令就能得到 Windows 操作系统上 PowerShell 支持的 Drives Provider,比如 C 盘,D 盘就是被 PowerShell 认为就是一个存储的容器,注册表也是,举一反三,Bingo,那么存储证书容器的名字,理所当然就是 Cert 了。

PS C:\> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                 128.72         66.59 FileSystem    C:\
Cert                                   Certificate   \
D                 137.02        133.43 FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

其实其和用 MMC 或者浏览器操作的 SSL 证书是同样的证书集合,同样的物理存放位置,只是表现出来的形式不一样,就好比可以用 ASP.NET 来展示数据库的数据,也可以用 JSP 或者 React JS 来展示数据库里面的数据一样,不同的表现形式,但是操作的是同一份数据。

对于 Cert 证书存储容器,在 PowerShell 的世界就可以像操作磁盘空间上的文件一样。比如,查看 Cert 里面根目录存储了什么内容,就可以使用下面的 PowerShell 命令。

PS C:\> ls cert:

Location   : CurrentUser
StoreNames : {TrustedPublisher, Root, UserDS, CA...}

Location   : LocalMachine
StoreNames : {TrustedPublisher, Remote Desktop, Root, TrustedDevices...}

可以看出其有两个目录,当前用户(CurrentUser)和本地机器(LocalMachine),其和上面用 MMC 管理的证书的方式不谋而合。

在进一步浏览里证书目录:

PS C:\> ls cert:\CurrentUser

Name : TrustedPublisher
Name : Root
Name : UserDS
Name : CA
Name : ACRS
Name : REQUEST
Name : AuthRoot
Name : TrustedPeople
Name : addressbook
Name : My
Name : SmartCardRoot
Name : Trust
Name : Disallowed

其和我们用 IE 和 MMC 管理证书的时候,分类风格和方式类似。

我们可以进一步的查看各个子目录下面有哪些证书,比如对 cert:\CurrentUser\root 目录下面的所有证书感兴趣的话,就可以执行下面的命令,其会把 Cert:\CurrentUser\ROOT 目录下所有的 SSL 的根证书列举出来。

PS C:\> ls Cert:\CurrentUser\ROOT

enter image description here

如果想查看某一个具体的证书,则可以运行下面类似的命令:

Get-Item -path Cert:\CurrentUser\ROOT\AE3F2E66D48FC6BD1DF131E89D768D505DF14302

其中,AE3F2E66D48FC6BD1DF131E89D768D505DF14302 为 SSL 证书的 Thumbprint(指纹),如上面的截图所示意。

enter image description here

PowerShell 移除 SSL 证书

我们能够查看 SSL 证书,当然也能够移除 SSL 证书。比如要移除上面 Thumbprint(指纹)为 AE3F2E66D48FC6BD1DF131E89D768D505DF14302 的证书,只需要运行下面的命令即可。

PS C:\> Remove-Item -path Cert:\CurrentUser\ROOT\AE3F2E66D48FC6BD1DF131E89D768D505DF14302

其会弹出一个框,如下图所示,询问我们是否删除,如果是的话,其就会从 ert:\CurrentUser\ROOT 目录中异常;如果不想弹出确认框,在上面的命令后面加上“-force”即可。

enter image description here

使用 PowerShell 导入 SSL 证书

上面提到我们如何查看和删除证书,那么如何用 PowerShell 导入证书呢?其实操作系统也为 PowerShell 也提供了一个叫做 CertUtil 的命令,比如可以使用下面的命令把一个目录下面所有的证书都导入到一个指定的证书目录,比如 Cert:\CurrentUser\My 目录,则先通过下面的命令进入 Cert:\CurrentUser\My:

cd Cert:\CurrentUser\My

然后再执行下面的命令,我们将会看到在 C:\openssl\cert 目录下面,导出的京东和百度的证书就被成功导入到 Cert:\CurrentUser\My 目录下面了。

PS Cert:\CurrentUser> ls C:\openssl\cert  | %{certutil -addstore My $_.FullName}

enter image description here

是不是感觉很酷哦~

总结

Windows 操作系统考虑和设计的还是挺周全的,其提供了三种工具帮助我们管理操作系统上的证书:IE 浏览器,MMC 和 PowerShell 命令,在本节之中之所以提到 PowerShell,是因为有的时候,我们需要开发定制自己的程序来操作 Windows 操作系统里面的证书,这时就可以通过调用 PowerShell 的命令来进行实现,限于作者水平,如果有疏漏之处,敬请在读者圈留言,谢谢。祝大家学习愉快。

上一篇
下一篇
目录