创建CA,签发证书,建立OCSP!
让RDP连接时不再弹出证书校验提示!


唔,要看懂这篇文章可能需要一点关于证书体系的基础知识,参考咱的上一篇文章w


连接RDP的时候,估计诸位都会无视这个界面,直接继续连接
证书错误
这个界面的出现是因为RDP使用证书对连接进行身份认证和数据加密
(这里认证的是服务器的身份,即确定汝连接到的服务器就是它所申明的名字)
而在没有配置证书的默认情况下,服务器将生成并使用一张自签名证书

这样当然是非常不安全的,基于中间人劫持的攻击可以截获大部分信息,包括:

对于客户端本身,劫持者则可以:

(更多操作详见这里的研究


如果是在公网部署,可以使用真正的PKI(公钥基础设施)
那么本文中的建立CA、OCSP,根证书安装等就可以跳过

言归正传……

唔,咱这里拿xca演示,毕竟直观一点awa
dalao们当然可以openssl一把梭qwq

XCA项目github地址

拿到XCA,汝需要先建立一个数据库,来存档生成的各种证书和密钥
xca主页面

建立CA

对于一个证书体系来说,首先得有一个CA,这个CA其实就是一张自签名的证书,
一张证书又需要一对密钥,所以先生成一对密钥:
生成密钥
无所谓密钥的类型和长度,默认即可
然后签出CA证书:
建立CA图1
这里别忘了第四步,不要选了模板不应用(
建立CA图2
commonName必填!


TIPs:


签发终端证书

终端证书是签给RDP服务器的。这是一个简单的例子,所以咱就不签中间证书啦,CA直接签出终端证书
签出终端证书1

签出终端证书4
这里密钥用途选中Key EnciphermentData Encipherment(因为RDP自签的证书就选中这两个用途)

安装终端证书

注意:终端证书是给RDP服务端安装的!

从XCA导出文件

导出带私钥的终端证书1
需要安装的是证书和私钥
导出带私钥的终端证书2
这里导出PKCS #12格式,这会包含证书和私钥

安装证书

windows支持直接读取并安装PKCS #12格式的文件,双击即可启动导入向导
导入终端证书1
这里需要注意:安装位置要选择本地计算机
导入终端证书2
手动选择证书存储,并选择安装在个人存储位置

让RDP使用这张证书

首先,获取证书的hash,使用运行打开certlm.msc
(certmgr.msc打开的是当前用户的证书管理,但是咱们上一步应该安装在了当前计算机的位置中)
找到刚刚安装的证书,位于个人位置中:
查看证书哈希
打开powershell,
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="<证书哈希>"
正常输出应该如下

正在更新“\\INIT-HOST\root\cimv2\TerminalServices:Win32_TSGeneralSetting.TerminalName="RDP-Tcp"”的属性
属性更新成功。

如果出现这样的输出

正在更新“\\INIT-HOST\root\cimv2\TerminalServices:Win32_TSGeneralSetting.TerminalName="RDP-Tcp"”的属性
错误:
描述 = 无效的参数

则表示hash有误,检查证书是否成功导入、导入位置是否正确,hash是否复制漏了几位

安装CA证书

咱们自己建立的CA显然不在windows自带的可信任根证书列表中,所以在客户端需要导入这张CA根证书
导出CA证书文件
导出CA证书1
这里不需要私钥,默认格式即可
导出CA证书2
安装证书
同终端证书,安装位置要选择本地计算机
务必手动选择存入受信任的根证书颁发机构
导入CA证书

建立OCSP

目前的RDP会(且仅会)使用OCSP校验证书吊销,所以咱们需要一个OCSP服务端,XCA显然没有这个功能,所以这里还是得用一下openssl

获取openssl

各大linux发行版显然拥有各自的预编译包,对于windows平台,可以在这里找一个看着顺眼的

签发OCSP证书

一个OCSP需要有自己证书,且这张证书需要拥有OCSP Signing的密钥用途:

(注意使用前面咱们生成的CA证书签名,其他设置不需要额外注意。包括commonName,任意名称即可)
OCSP证书

导出所需文件

运行一个简单的OCSP将需要:

导出私钥
导出OCSP私钥1
注意是OCSP的私钥,不要导出错了
导出OCSP私钥2
默认格式没有问题
导出证书
导出OCSP证书
参考前文
导出证书链
导出OCSP证书链
和导出OCSP证书一样,右键OCSP的证书并选择导出->文件,但是文件格式选择PEM证书链
最好包含从CA根证书一直到OCSP的完整证书链文件,
只有CA证书似乎也可以加载?(存疑)
导出(生成)证书索引
生成OCSP证书索引
不要试图建立空文件来替代索引文件,没用的…

运行OCSP

openssl ocsp -index ./证书索引.txt -port 8081 -rsigner OCSP证书.crt -rkey OCSP密钥.pem -CA OCSP证书链.pem -text

其他的参数应该是不言自明的

在RDP连接时,会查询OCSP,这时应该会有日志输出,如果没有,检查地址和端口的可用性
OCSP日志输出示例:
OCSP日志


到了这里
如果没有什么差错的话,这时连接RDP,应该不会再弹出证书错误页面,并且连接后会显示安全锁
最终效果