Windows 从 2000 开始支持 SSL 加密 远程桌面服务,只要在远程桌面服务设置里指定一个证书,RDP设置的加密方式那里就会出现SSL选项(从Windows Server 2008开始默认内置用于远程桌面服务的自认证证书)。问题是 Windows 证书管理方式和 Linux 下有很大的不同,所有证书都由 OS 集中管理在一个类似数据库的容器里,需要用到证书的服务或者应用通过 WMI 从这个容器里获取。因为标准 Window 证书都有指定的 OID ,匹配的就会出现在服务或者应用的证书目录下。
微软官方文档里提到过如何生成标准的 Windows 证书,但是都依赖于Domain,而我想要的是像 OpenSSL 那样可以通过命令行直接生成自认证证书的工具。微软为了开发者测试应用的方便,提供了一批小工具,其中就包括一个 makecert 的命令行工具,让开发者可以通过命令行创建用于测试的自认证证书。
Makecert 的语法也不算复杂,手册清楚明白,只是一些有微软特色的参数要注意。
范例一枚:
makecert -r -pe -n "CN=digglife.net" -e 01/01/2040 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -a SHA1 -len 2048
通过这个命令生成证书后,我们可以在证书管理控制台的“个人”证书下找到。
记录一下一些和生成远程桌面服务SSL证书相关的参数,详细信息参考MSDN的文档。
-r
: 生成自认证证书。
-pe
: 私钥标记为可导出(私钥包含在证书中)。
-n
: 证书名称 (CN=,OU=,O= blahblah)。
-e
: 证书失效日期。
-eku
: OID名称。1.3.6.1.5.5.7.3.1
就是“服务器身份验证”的OID
-ss
: 证书存储名称。my代表的是Personal。
-sr
: 证书存储位置。LocalMachine或者CurrentUser。
-sky
: 密钥类型。
-sp
: 加密API的名称。
-sy
:加密API的类型。
-a
: 加密算法。
-len
: 密钥长度。
本来 makecert.exe 是集成在.Net Framework开发包里的,但是为了这么个小工具下载一个硕大的SDK实在很扯,所以提了一个出来放在这里。