【问题标题】:Web service call on https在 https 上调用 Web 服务
【发布时间】:2011-03-10 01:52:33
【问题描述】:

从我的 Web 应用程序中,我必须将一些数据发布到 https 上的远程第三方 Web 服务。 Web 应用程序的用户已获得单独的证书以连接到 Web 服务。 Web 应用程序将充当最终用户和 Web 服务之间的中介,因为该应用程序具有要发布的所有数据。如何做到这一点?可以从 Web 应用程序启动的 Applet 或 Java Web Start。各位大侠能不能放个光。等待您的想法、建议。

谢谢

【问题讨论】:

    标签: browser service certificate


    【解决方案1】:

    Web 服务提供者是否在与 Web 应用程序不同的机器上运行?

    如果没有,您可以直接教 Web 应用程序公开处理用户请求所需的 Web 服务。您可以使用 WS-Security 协议之一来相互验证客户端和服务器。

    如果是,Web 服务提供商是否在 Web 应用程序可以看到的专用网络上运行?

    如果是,您可以直接从您的 Web 应用程序使用该 Web 服务,在用户通过 SSL 对 Web 应用程序进行相互身份验证后,然后将使用的数据发送给用户。

    如果不是,则使用 SSL 在 Web 应用程序上对用户进行相互身份验证;从 Web 应用程序中,使用服务器证书通过 WS-Security 协议之一对 Web 服务提供者进行相互身份验证。

    编辑

    要使用自签名证书,让小程序将该证书导入到密钥库中,无论是在 JRE 默认密钥库中,还是在运行时加载的自定义密钥库中(更准确地说,用于信任证书的密钥库称为 TrustStore)。

    您可以使用 Oracle 提供的 keytool 可执行文件创建密钥库。一旦您教您的小程序使用该密钥库,您的小程序就会信任该自签名服务器证书。

    将应用程序 TrustStore 设置为:

    System.setProperty("javax.net.ssl.trustStore","path/to/clientTrustStore.key");
    System.setProperty("javax.net.ssl.trustStorePassword","keystore-password-if-any");
    

    阅读this link 了解有关 javax.net.ssl.trustStore 属性的更多信息。

    【讨论】:

    • Web 服务在不同的机器上运行并公开,但仅使用有效证书。我想从已将证书添加到浏览器密钥库的客户端浏览器调用 Web 服务。如果没有将有效证书添加到浏览器,则必须将错误暴露给客户端(通过浏览器)。所以调用过程应该在客户端/浏览器端运行。如何? Applet 或 Java Web Start。等待您的建议。
    • 抱歉耽搁了,我来了。然后你应该去买一个小程序,但你需要签署它来访问敏感数据,比如安装在正在运行的本地机器上的证书。有很多关于如何签署小程序的教程,只需谷歌“签署小程序”即可。
    • 那是因为小程序是由浏览器自动执行的,所以不能隐含地认为代码是可信的。希望这会有所帮助。
    • 你好 Luca,抱歉耽搁了,我可以签署小程序,但我认为真正的问题是,Web 服务服务器上的证书不是受信任的(如 verisign 或 godaddy),而是自签一份。如您所知,一旦我们将自签名证书导入浏览器,它就会在没有安全警报的情况下接受对域的请求。我怎么能做同样的运行小程序来调用 web 服务,即。使用安装在运行它的浏览器上的证书调用 Web 服务。希望你能指出我正确的方向。
    • 要使用自签名证书,让小程序将该证书导入到密钥库中,或者在 JRE 默认密钥库中,或者在运行时加载的自定义密钥库中。
    猜你喜欢
    • 2016-06-30
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2012-03-17
    • 1970-01-01
    相关资源
    最近更新 更多