创建CA,签发证书,建立OCSP!
让RDP连接时不再弹出证书校验提示!
唔,要看懂这篇文章可能需要一点关于证书体系的基础知识,参考咱的上一篇文章w
连接RDP的时候,估计诸位都会无视这个界面,直接继续连接
这个界面的出现是因为RDP使用证书对连接进行身份认证和数据加密
(这里认证的是服务器的身份,即确定汝连接到的服务器就是它所申明的名字)
而在没有配置证书的默认情况下,服务器将生成并使用一张自签名证书
这样当然是非常不安全的,基于中间人劫持的攻击可以截获大部分信息,包括:
对于客户端本身,劫持者则可以:
(更多操作详见这里的研究)
如果是在公网部署,可以使用真正的PKI(公钥基础设施)
那么本文中的建立CA、OCSP,根证书安装等就可以跳过
言归正传……
唔,咱这里拿xca演示,毕竟直观一点awa
dalao们当然可以openssl一把梭qwq
拿到XCA,汝需要先建立一个数据库,来存档生成的各种证书和密钥
对于一个证书体系来说,首先得有一个CA,这个CA其实就是一张自签名的证书,
一张证书又需要一对密钥,所以先生成一对密钥:
无所谓密钥的类型和长度,默认即可
然后签出CA证书:
这里别忘了第四步,不要选了模板不应用(
commonName必填!
TIPs:
内部名称
都是必填项未明确到期日期
会导致windows始终认为这个证书失效!来源->签名
栏目,需要使用上一步签发的CA证书进行签名,不能使用自签名证书
终端证书是签给RDP服务器的。这是一个简单的例子,所以咱就不签中间证书啦,CA直接签出终端证书
http://
开头,例如http://127.0.0.1:8081
这里密钥用途选中Key Encipherment
和Data Encipherment
(因为RDP自签的证书就选中这两个用途)
注意:终端证书是给RDP服务端安装的!
需要安装的是证书和私钥
这里导出PKCS #12
格式,这会包含证书和私钥
windows支持直接读取并安装PKCS #12格式的文件,双击即可启动导入向导
这里需要注意:安装位置要选择本地计算机
手动选择证书存储,并选择安装在个人存储位置
首先,获取证书的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显然不在windows自带的可信任根证书列表中,所以在客户端需要导入这张CA根证书
导出CA证书文件
这里不需要私钥,默认格式即可
安装证书
同终端证书,安装位置要选择本地计算机
务必手动选择存入受信任的根证书颁发机构
中
目前的RDP会(且仅会)使用OCSP校验证书吊销,所以咱们需要一个OCSP服务端,XCA显然没有这个功能,所以这里还是得用一下openssl
各大linux发行版显然拥有各自的预编译包,对于windows平台,可以在这里找一个看着顺眼的
一个OCSP需要有自己证书,且这张证书需要拥有OCSP Signing
的密钥用途:
(注意使用前面咱们生成的CA证书签名,其他设置不需要额外注意。包括commonName,任意名称即可)
运行一个简单的OCSP将需要:
导出私钥
注意是OCSP的私钥,不要导出错了
默认格式没有问题
导出证书
参考前文
导出证书链
和导出OCSP证书一样,右键OCSP的证书并选择导出->文件,但是文件格式选择PEM证书链
最好包含从CA根证书一直到OCSP的完整证书链文件,
只有CA证书似乎也可以加载?(存疑)
导出(生成)证书索引
不要试图建立空文件来替代索引文件,没用的…
openssl ocsp -index ./证书索引.txt -port 8081 -rsigner OCSP证书.crt -rkey OCSP密钥.pem -CA OCSP证书链.pem -text
-port
指定服务端口-text
将日志打印到控制台其他的参数应该是不言自明的
在RDP连接时,会查询OCSP,这时应该会有日志输出,如果没有,检查地址和端口的可用性
OCSP日志输出示例:
到了这里
如果没有什么差错的话,这时连接RDP,应该不会再弹出证书错误页面,并且连接后会显示安全锁