windows 系统自签名的 rdp 证书有效期只有几个月,到期了又需要重新自己配置。所以动了自己配置一套 CA 证书的想法。
修改 openssl 配置文件
为了方便生成证书,我们可以配置一些默认信息。windows 一般用的是 git 自带的 openssl,所以配置文件在C:\Program Files\Git\mingw64\ssl\openssl.cnf。mac 默认自带了,位置是/etc/ssl/openssl.cnf。找到[ req_distinguished_name ]添加以下内容即可:
[ req_distinguished_name ]
countryName_default = CN
stateOrProvinceName_default = cn
localityName_default = cn
organizationName_default = org
organizationalUnitName_default = Dev
commonName_default = none
添加配置文件
创建rdp.ext文件:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
subjectKeyIdentifier=hash
[alt_names]
DNS.1 = localhost #服务器主机名
IP.1 = 127.0.0.1 #服务器 ip 地址
生成CA证书和rdp证书
openssl req -x509 -newkey rsa:2048 -keyout ca.key -out ca.crt -days 3650 -nodes -addext "subjectKeyIdentifier=hash" -addext "basicConstraints=critical,CA:TRUE" -addext "keyUsage=critical,keyCertSign,cRLSign"
openssl req -new -x509 -nodes -days 3650 -key ca.key -out ca.crt
openssl genrsa -out rdp.key 2048
openssl req -new -key rdp.key -out rdp.csr
openssl x509 -req -days 3650 -in rdp.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out rdp.crt -extfile rdp.ext
openssl pkcs12 -export -out rdp.pfx -inkey rdp.key -in rdp.crt -certfile ca.crt -name "rdp certificate"
注意:
- genrsa后面加
-des3会提示输入密码,不加就不会有密码。 - req 里面
-nodes是No DES,加了它代表证书没有密码。-x509代表直接生成自签名证书,不加代表生成的是待签名请求文件(.csr)。 - pkcs12 是把 crt 转成 windos 更好用的 pfx 格式,需要配置一个密码,导入的时候会用到。
配置成 rdp 证书
- 复制 rdp.pfx 文件到 windows,双击它,指定安装路径是个人,输入pkcs12命令里面设置的密码即可导入成功。
- Win+R 输入 mmc → 文件 → 添加删除管理单元 → 证书 → 计算机账户 → 本地计算机
- 在个人里面找到 rdp 这个证书,会看到图标上有个钥匙,代表正确导入了。右键刚导入的 RDP 证书 → 所有任务 → 管理私钥。
- 添加 → 输入 NETWORK SERVICE → 检查名称 → 确定。
- 双击证书 → 详细信息 → 找到 指纹 ,然后复制备用。
- 以管理员身份打开 PowerShell,执行
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="这里粘贴指纹"。 - 断开连接,再进去就可以发现用的是新生成的证书。
注意:mac 上实测信任 CA 证书后,还是会跳提示,找不到原因就 pass 吧,信任自己生成的证书也能用。