背景
最近,由于学校的某门课程要用到一个 Windows only 的屑软件,而我又不想使用 Boot Camp / 虚拟机之类的解决方式,因此最后选择在套路云上开了一台 抢占式实例,利用停机不收费、流量按量计费等特性获得了一台暂时性、价格尚可接受、性能不错的 Windows 云服务器。
在使用 Microsoft Remote Desktop (BTW, 这玩意的评分只有 2 星不到,太惨了) 远程连接到 Windows Server 时,会弹出一个「无法验证证书,您的连接可能不安全」之类的提示。这是因为 Windows 远程桌面服务默认会使用自签证书来进行连接。尽管可以直接忽略提示甚至选择始终信任,但是这毫无疑问让咱这个强迫症非常不爽…
通常情况下,使用可信 CA 签发的服务器证书即可解决这个问题。不过,由于我比较懒只是暂时性使用,就懒得再去用 certbot 申请 Let’s Encrypt 的证书了,直接全部用自签名证书搞定(逃
签发根证书
参考 为 Surge 自签发 CA 根证书,完成后需要在 Keychain Access 中添加并信任证书。
简单示例:
openssl ecparam -genkey -name prime256v1 -out ca.key # 生成 ECC 私钥
openssl req -x509 -new -sha256 -key ca.key -days 3650 -out ca.crt -subj "/CN=Custom CA"
签发服务器证书
生成私钥
openssl genrsa -out server.key 2048 # 生成 RSA 私钥
# 或者
openssl ecparam -genkey -name prime256v1 -out server.key # 生成 ECC 私钥
生成证书请求
openssl req -new -sha256 -key server.key -out server.csr -subj "/CN=<domain or ip>"
# 请自行将 <domain or ip> 替换为服务器域名或 IP 地址
签发证书
# 使用 openssl x509 工具
openssl x509 -req -sha256 -days 820 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile <(printf "extendedKeyUsage=serverAuth\nsubjectAltName=DNS:<domain or ip>") -out server.crt
# 或者使用 openssl ca (需要准备好 index.txt, serial 和 openssl.cnf)
openssl ca -in server.csr -out server.crt -outdir . -cert ca.crt -keyfile ca.key -startdate 20200101000000Z -enddate 20211231000000Z -config openssl.cnf -extfile <(printf "extendedKeyUsage=serverAuth\nsubjectAltName=DNS:<domain or ip>") -notext -md sha256 -policy policy_anything
# 请自行将 <domain or ip> 替换为服务器域名或 IP 地址
# 证书有效期不能超过 825 天,macOS 下必须指定摘要算法为 SHA-256,参见 https://support.apple.com/zh-cn/HT210176
导出 pfx 格式的证书
openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx -password pass:<password>
# <password> 为证书密码,在下面安装证书时需要用到
获取证书指纹
openssl x509 -fingerprint -in server.crt | head -n 1 | cut -d '=' -f2 | tr -d ':' | tr '[:upper:]' '[:lower:]'
# Copy 下来稍后会用
安装服务器证书
安装 pfx 格式的证书
连接到 Windows Server,双击打开 pfx 格式的证书,存储位置选择「本地计算机」 > 文件名默认 > 输入密码 & 其他设置默认 > 选择「将所有的证书都放入下列存储 - 个人」> 完成。

安装证书
配置 RDP 服务
打开 Windows PowerShell,执行以下命令:
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="<上面获取的证书指纹>"

配置 RDP 服务
提示「属性更新成功」即可。
测试连接
断开远程桌面连接,重新连接,此时应该已经没有证书未受信任的提示了。
移除服务器证书
如果要移除服务器上安装的证书,则右击开始菜单 > 运行 > 打开 certlm.msc
,在 证书 - 本地计算机 > 个人 > 证书下删除安装的证书即可。
使用可信 CA 签发的证书
如果你有可信 CA 签发的证书,那么只需要从 导出 pfx 格式的证书 这一步往后操作即可。
垃圾 Windows 毁我青春,耗我时光