2011-06-30 52 views
2

我正在寻找真正的建议。我有一个系统运行在我的amazon云实例上,这个实例基本上是在JBoss上运行的一堆REST服务。我的下一步是确保这些服务的安全,因为信用卡信息将流经他们。我也需要进行身份验证,所以我的问题是,可以将哪些最安全的方法用于REST服务?最安全的方式来保护Jersey REST服务

SSL CA Certs当然如此加密数据使用CA可能是我会开始当然。 这是为了爸爸的声誉吗?还是我不得不为Verisign掏钱?

对于身份验证,简单地进行基本身份验证或者可能只是让调用者以某种方式签署请求就足够了吗?任何其他方法?

OH我忘了提及,客户端应用程序是一个iPad应用程序。感谢您的建议。

回答

0

使用证书是安全性的一个很好的开始。我发现Thawte在价值和受支持的客户之间取得了很好的平衡。当我看了(一段时间后),GoDaddy没有得到足够的客户端支持(Java,Objective-C/iPad,浏览器),但现在可能已经改变了。您一定要确保您获得的证书由您关心的客户端支持(针对您的iPad的Objective-C)。

基本身份验证通过https确定,只要确保您不会在URL中显示任何内容(如ID或标记),因为URL本身是可见的。如果您通过https发布所有数据,您将获得一个良好的开端。

2

您希望能够在中间人攻击中保护自己免受人侵,并防止重播请求。 任何时候有与支付相关的信息被中继,我会选择使用随机数和时间戳签名请求。 这涉及使用客户端和服务器之间的共享密钥来签署请求。这个秘密可以在登录时传递一次。

使用时间戳和客户端生成的唯一随机数值作为签名字节的一部分。 这些值也作为请求中的标头传回,以便服务器可以重新组装请求。

从卷曲执行的典型的请求可能是这样的:

curl -v -H "Content-Type: application/json" -H "Authorization: ff7b93ad-27d0-49f6-90bd-9937951e5fcc:ncYoA5n5s2nFSm7qyvf5hDgL4pmmPOUP3zo/UYfaQKg=" -H "x-date:2013-03-28T19:34:00+00:00" -H "nonce:2d1321d32a" -X GET 'http://localhost/orders/123' 

授权头包含一个ID来标识请求,然后将签名的请求的哈希值。 日期标题应该在服务器时间的某个偏移量内(15分钟是合理的限制)。

我有一个完整的代码示例here