首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >GAE上web服务的双向SSL (java)

GAE上web服务的双向SSL (java)
EN

Stack Overflow用户
提问于 2012-06-07 23:09:50
回答 7查看 2.4K关注 0票数 15

我们需要在Google App Engine上实现双向SSL,在这里我们使用JAX-WS将web服务请求发送到需要双向SSL身份验证的服务器。

我们如何为传出的web服务请求设置双向SSL?

我们知道javax.net.ssl*在App Engine环境中是被禁止的。

下面是我们的代码示例:

代码语言:javascript
复制
@WebService(name="ListenerSoap", targetNamespace = "http://example.com/Listener.Wsdl")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface ListenerSoap {

    @WebMethod(operationName = "Ping", action="http://example.com/Listener.Wsdl#Ping")
    public void ping();
}

@WebServiceClient(name="Listener", targetNamespace="http://example.com/Listener.Wsdl", wsdlLocation = "https://example.com/Listener.asmx?WSDL")
public class Listener extends Service
{
  public ListenerSoap getListenerSoap() {
   return super.getPort(new QName("http://example.com/Listener.Wsdl", 
                       "ListenerSoap"), ListenerSoap.class);
  }
}

和上述代码的一个使用示例:

代码语言:javascript
复制
ListenerSoap soap = new Listener().getListenerSoap();
soap.ping();

我认为我们可以将DataStore中需要的密钥库或任何证书存储为二进制对象(尽管如何上传它们对我来说仍然是一个模糊的小问题)。

我们如何着手设置此web服务使用双向SSL进行身份验证所需的必需值?

谢谢你的帮助

更新:

通过研究,我发现这是如何在传统服务器(具有文件系统访问的服务器)上实现的:

代码语言:javascript
复制
ListenerSoap soap = new Listener().getListenerSoap();
((BindingProvider) soap).getRequestContext().put("javax.net.ssl.keyStore", "client_cert.p12"

但是,在这种方法中,client_cert.p12应该在文件系统上。

此外,GAE上不允许使用SSLSocketFactorySSLContextKeyManagerKeyManagerFactory

更新:

从GAE SDK版本1.7.7开始。现在,这应该是可能的:

代码语言:javascript
复制
Similarly, Java developers can now use the javax.net.ssl package to make outbound SSL connections.

GAE 1.7.7 SDK Release Notes

EN

回答 7

Stack Overflow用户

发布于 2013-04-24 12:19:23

从我对SSL授权的有限了解来看,您可能在这里遗漏了一些至关重要的东西:证书。双向SSL要求客户端和服务器证书在您的密钥库中,可以是自签名证书( pkcs12或pem文件,您可以通过shell使用几个命令轻松生成),也可以是由Thawte或Verisign等授权公司颁发的专有证书。虽然我不确定这是否是你所面临的问题,但检查一下是很好的。(另外,我是一个新手,所以请不要贬低我的答案,只是试图提出可能的选择。)

票数 2
EN

Stack Overflow用户

发布于 2012-12-14 08:39:30

代码语言:javascript
复制
ListenerSoap soap = new Listener().getListenerSoap();

希望它能有所改善

谢谢

票数 1
EN

Stack Overflow用户

发布于 2013-02-22 14:27:21

我知道你可能不想听到这个,但是使用SSL对于双向通信来说是昂贵和有问题的。根据您对服务器/客户端的控制程度,我更喜欢简单的双向管道,如web套接字和可以简单实现AES的数据包协议。这真的取决于你想要解决的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10934576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档