为Android客户端创建自定义openvpn,以在TEE中生成私钥

时间:2018-11-21 10:42:41

标签: android openvpn ics-openvpn trusted-execution-environment

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

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

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

1 个答案:

答案 0 :(得分:3)

  

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

这可以在TEE中轻松完成。例如,假设您正在使用OPTEE-OS,则可以使用Global Platform API从Trusted Application中生成密钥对。如果您正在使用其他TEE-OS,则假定它们提供了该功能,那么当然可以实现。

  

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

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

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

  

然后将CSR文件发送到Openvpn服务器,并且服务器对CSR文件进行签名   并创建CRT(证书文件)并发送回客户端。客户   将CRT文件存储在TEE中,并使用专用与OpenVpn服务器进行通信   密钥/证书在下一次。

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

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