我需要调用安全的Web服务(https)。使用Java(甚至任何其他程序)。
我是否需要执行任何额外步骤而不是通常的步骤来为HTTP Web服务创建客户端?
编辑: 我也需要回答这个问题: 如果没有,那么我的客户端如何解密从Web服务发送的加密消息?
由于
答案 0 :(得分:4)
Java URL api应该为您处理这个问题。如果服务器证书签名者不是标准Java CA集的一部分,则证书可能存在问题,但这不太可能(并且不太难修复)。
其他语言几乎肯定会有类似的支持。
套接字层将为您处理所有加密和解密。
答案 1 :(得分:2)
如果您的Web服务不需要客户端证书身份验证,则没有太多要更改的内容(信任管理员/信任存储除外,但您可能倾向于在整个应用程序中使用相同的那些)。
如果您的服务需要客户端证书身份验证,则需要额外的配置步骤。例如,如果您使用的是Axis,则可以尝试这种方法:Choosing SSL client certificate in Java
(如何完成将取决于您使用的语言和框架。)
修改强> 关于“如果没有,那么我的客户端如何解密从Web服务发送的加密消息?”,这是由SSL / TLS堆栈完成的。大多数支持HTTPS的HTTP库将或多或少地透明地使用平台的SSL / TLS堆栈(Java中的JSSE):这是加密/解密将发生的地方。如果您正在使用Web服务框架,则可能有一个API来配置SSL / TLS信任设置(或使用哪个客户端证书),尽管如果您不这样做,它也可能使用系统的默认设置任何东西。
请注意,您的问题是关于使用HTTPS保护的Web服务,这只涉及传输级安全性(您或将使用的平台的SSL / TLS堆栈或多或少地透明地处理)。一些Web服务也可以使用消息级安全性进行保护,在这种情况下,客户端和服务器端的框架都需要支持这一点。这肯定需要更多配置。 (在某些情况下,您可能会发现与传输级安全性一起实施的消息级安全性,即在HTTPS之上交换签名或加密的有效负载。)
答案 2 :(得分:1)
在大多数情况下,HTTP客户端将“只使用”HTTPS。
当然,唯一可以确定的方法是尝试:将您喜爱的HTTP客户端更改为http://
到https://
。
答案 3 :(得分:1)
理论上没有。 Https基本上是HTTP over SSL / TLS。因此,由于SSL / TLS都位于传输层中,因此所有 的工作方式与HTTP完全相同。 现在,您将不得不获得服务器的证书。
你不需要做任何事情。传输层自动处理所有这一切,您的应用层没有麻烦。这意味着,您的程序不会区分常规HTTP和HTTPS。
答案 4 :(得分:0)
除非您在服务器上自行签署了证书,否则它应该正常工作。在这种情况下,java会抱怨,您需要将服务器密钥导入到本地客户端密钥库中。如果您需要将客户端软件部署到许多地方,这显然不是一个很好的解决方案,因为您需要在每个部署的客户端上执行此操作。在这种情况下,您可能希望在服务器上获得适当的证书。
您可以使用以下代码信任java中的任何证书:http://www.exampledepot.com/egs/javax.net.ssl/TrustAll.html但这确实让您在中间攻击中对人开放,因此它纯粹是为了开发。
如果客户端是Windows .NET应用程序,则可以使用以下代码信任所有SSL证书:
// Trust all SSL certificates
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
它会抱怨这已被弃用并提供替代方案,但这确实有效。