我需要能够在我的 RESTful 服务中识别用户。我决定将 HTTPS 与客户端证书身份验证一起使用,因此它将允许其他服务以 URL、标头或任何方式安全地传递用户或密码。
现在我想加密一些被发送回服务的数据。例如,不用发送普通的用户 ID - 只需使用我自己的服务器密钥对其进行加密并发送回来。然后服务将发送这个(加密的)数据,我将能够在本地解密它。
对于这种加密,我想使用服务提供给我的 SSL 证书。
我猜位于我的服务器上的证书包含私钥和公钥。所以我可以使用我的服务器端证书的公钥来加密数据,并确保我可以使用服务器端的私钥安全地解密它。第三方服务将无法解密数据,因为它只有我的服务器端证书的公钥。
现在的问题 - 从客户端 (HTTPS) 给定格式为 X509Certificate 的客户端 SSL 证书,我如何在本地密钥库中找到相应的证书?该证书的格式是什么以及如何从中获取私钥/公钥?
UPD基本流程:
- 服务向 REST 应用发送请求:http ://rest.api.com/authenticate/username/password/
- REST 应用发回响应:{ ok: "123456" }
- 服务向 REST 应用发送请求:http ://rest.api.com/1233456/dosomething
- REST 应用程序提取 123456 并知道必须使用哪个用户进行操作
我想得到什么
- 服务向 REST 应用发送请求:http ://rest.api.com/authenticate/username/password/
- REST 应用程序获取用户名/密码并在数据库中查找用户 ID
- REST 应用不想与服务共享 ID
- REST 应用了解 SSL 服务证书
- REST 应用程序找出相应的公钥,用于加密到该服务的传入流量
- REST 应用程序使用 REST 应用程序公钥加密 id "123456" 并发送响应:{ ok : "lybibHubJis7" }
- 服务向 REST 应用发送请求:http ://rest.api.com/lybibHubJis7/dosomething
- REST app 使用 SSL keychain 的私钥对字符串 lybibHubJis7 进行解密,发现用户 ID 为 123456,然后对该用户进行操作。