【问题标题】:Data encryption on restful serviceRESTful服务上的数据加密
【发布时间】:2011-09-11 17:11:45
【问题描述】:
有没有办法加密通过 RESTful 服务传递的数据?
我有一个服务 getUser,它接受用户 ID 并提供用户信息。
根据宁静的教程,我应该发送这样的查询以获取用户信息:
http://myrestfulserver/getUser/123
其中 123 是用户 ID。
有没有一种简单的方法可以在不实现专有安全级别的情况下使用 https 加密 123?
【问题讨论】:
标签:
rest
encryption
ssl
https
【解决方案1】:
是的,但是要了解发生了什么,您可能需要玩一下 telnet。
基本上,SSL 有三个阶段,而 HTTP(普通)有两个。
- 打开一个到服务器的套接字。
- 协商加密通道。
- 发送加密数据。
所以,1) 实际上是一个连接。 2) 在 HTTP 中不会发生,但在 HTTPS 中会发生,那么 3) 在这两种情况下都是 HTTP。 HTTP 是什么样的?使用远程登录:
$ telnet google.com 80
Trying 209.85.227.103...
Connected to google.com.
Escape character is '^]'.
GET / HTTP/1.1 # <---- I typed this
HTTP/1.1 302 Found
Location: http://www.google.co.uk/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=71ab4b30677eaa81:FF=0:TM=1307626411:LM=1....
Date: Thu, 09 Jun 2011 13:33:31 GMT
Server: gws
Content-Length: 221
X-XSS-Protection: 1; mode=block
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.uk/">here</A>.
</BODY></HTML>
...
...
好的,所以您应该从中理解的是,连接和请求您想要的部分 url 是分开的事情。回到我们的三个阶段:
- 连接到 yourrestfulserver.com
- 建立 SSL
- 发出 GET /getUser/123 HTTP/1.1
如您所见,3) 是通过加密连接完成的,因此任何嗅探操作的人都看不到整个 URL,而不仅仅是标识符,因此无需为 OTA 问题加密 url 选项。
至于客户端访问,除非您或您使用的进程故意记录此信息,否则它也是加密的。