rest - Restful 服务上的数据加密

标签 rest encryption ssl https

有没有办法加密通过 restful 服务传递的数据?

我有一个 getUser 服务,它接受用户 ID 并提供用户信息。 根据 restful 教程,我应该发送这样的查询以获取用户信息: http://myrestfulserver/getUser/123 其中 123 是用户 ID。 有没有使用 https 加密 123 而无需实现专有安全级别的简单方法?

最佳答案

是的,但要了解发生了什么,您可能需要玩一下 telnet。

基本上,SSL 有三个阶段,而 HTTP(普通)有两个阶段。

  1. 打开到服务器的套接字。
  2. 协商加密 channel 。
  3. 发送加密数据。

所以,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 部分是分开的事情。回到我们的三个阶段:

  1. 连接到 yourrestfulserver.com
  2. 建立SSL
  3. 发出 GET/getUser/123 HTTP/1.1

如您所见,3) 是通过加密连接完成的,因此整个 URL 对嗅探操作的任何人都是不可见的,而不仅仅是标识符,因此无需为 OTA 问题加密 url 选项。

至于客户端访问,除非您或您使用的进程有意记录此信息,否则它也是加密的。

关于rest - Restful 服务上的数据加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6293470/

相关文章:

javascript - 小数点四舍五入 JavaScript

.net - 如何使用NAudio从cryptoStream播放mp3?

java - byte[] 到 String 返回不同的 String

angularjs - 如何以 RESTful 方式在一个 API 请求中发布多个项目?

json - Yii Restful API 将在 POST 上创建,但不会填充任何变量

c# - Azure SQL 数据库透明数据加密 (TDE) + 始终加密安全吗?

ssl - Spring Cloud Gateway 和 Eureka 在 SSL 中工作,微服务默认为 HTTP,但应该是 HTTPS

security - 是否可以用 XMPP (Jabber) 协议(protocol)中的数字签名对每条消息进行签名?

apache - 在两个不同端口下运行的同一域的 HTTP 到 HTTPS 重定向

java - 为什么在使用 "response.flushBuffer()"提交响应后我仍然可以发送数据?