0

我想创建一个满足我要求的自定义 OpenVpn For Android 客户端。在典型模式下,客户端有一个配置文件(.ovpn 文件),用于连接到 OpenVpn 服务器。身份验证过程可以是用户名/密码或基于证书的。但是我希望在客户端(移动)而不是在服务器端完成密钥生成过程,并且私钥保持完全私有并且服务器无法访问它。

我的意思是更改 android 客户端的 openvpn 代码以在移动设备的 TEE(可信执行环境)中生成密钥对,然后创建 CSR(证书签名请求),然后将 CSR 文件发送到 Openvpn 服务器和服务器签署 CSR 文件并创建 CRT(证书文件) 并发送回客户。客户端将 CRT 文件存储在 TEE 中,并在下次使用私钥/证书与 OpenVpn 服务器通信。

这种情况可能吗?有人对实现此功能有任何想法吗?

4

1 回答 1

3

我的意思是更改 android 客户端的 openvpn 代码以在移动设备的 TEE(可信执行环境)中生成密钥对

这可以在 TEE 中轻松完成。例如,假设您使用的是 OPTEE-OS,那么您可以使用 Global Platform API 从您的可信应用程序生成密钥对。如果您使用的是另一个 TEE-OS,这当然是可能的,前提是它们提供了该功能。

然后创建 CSR(证书签名请求)

根据 TEE 提供的支持,这也是可能的。OPTEE-OS 支持使用 mbedTLS 的 X509 证书。

或者,您的客户端应用程序可以要求受信任的应用程序获取 PEM 格式的公钥并调用 openssl、mbedTLS 或任何其他库来创建 CSR。

然后将 CSR 文件发送到 Openvpn 服务器和服务器签署 CSR 文件并创建 CRT(证书文件)并发送回客户端。客户端将 CRT 文件存储在 TEE 中,并在下次使用私钥/证书与 OpenVpn 服务器通信。

您的客户端应用程序必须发送证书请求并将签名的证书注入受信任的应用程序,然后必须检查证书的私钥和公钥是否匹配。

这是一种可能的情况,但是 OpenVpn 需要有一种方法来验证客户端,因此,必须调用一个函数 verify/certify,该函数将使用 TEE 中存储的证书和私钥。

于 2018-11-23T18:10:04.930 回答