当前位置: 首页 > 面试题库 >

如何通过Web服务创建“简单SSL”?

鄢英哲
2023-03-14
问题内容

我知道如何使用证书保护Web服务。那是我的客户代码:

  SSLContext ssl = SSLContext.getInstance("SSLv3");
  KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
  KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
  String password = Configuration.getConfig("keyStorePassword");
  store.load(new FileInputStream(new File(Configuration.getConfig("keyStore"))), password.toCharArray());
  kmf.init(store, password.toCharArray());
  KeyManager[] keyManagers = new KeyManager[1];
  keyManagers = kmf.getKeyManagers();
  TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
  tmf.init(store);
  TrustManager[] trustManagers = tmf.getTrustManagers();
  ssl.init(keyManagers, trustManagers, new SecureRandom());

  HttpsConfigurator configurator = new HttpsConfigurator(ssl);
  Integer port = Integer.parseInt(Configuration.getConfig("port"));
  HttpsServer httpsServer = HttpsServer.create(new InetSocketAddress(Configuration.getConfig("host"), port), 0);
  httpsServer.setHttpsConfigurator(configurator);

  Implementor implementor = new Implementor(); // class with @WebService etc.
  HttpContext context = (HttpContext) httpsServer.createContext("/EventWebService");
  Endpoint endpoint = Endpoint.create( implementor );
  endpoint.publish(context);

现在,如何制作“简单SSL”?如何进行SSL连接而不在客户端存储证书。(就像通过浏览器中的HTTPS连接一样)


问题答案:

Java Runtime
Environment确实在cacerts文件中附带了很多(使用最广泛的)证书颁发机构。如果您用来保护服务安全的证书是由那些根CA之一签名的,则您不必担心与客户端共享任何证书。

但是,如果您使用自签名证书,并且不想在信任库中通过/导入证书,则可以实现自定义X509TrustManager并为连接创建自定义SSLContext。在此博客中有更多详细信息。

自签名证书对于开发和测试环境很有用,但是您确实应该考虑从公认的证书颁发机构(例如Verisign,Thwate等)获取服务器证书的签名。



 类似资料:
  • 我正试图通过Prestashop 1.7 web服务创建一个新产品。 我将以下XML发布到https://www.myshop.com/api/products.(我在https://www.myshop.com/api/products?schema=blank从空白方案创建了XML数据) 但我得到了以下错误: 正如您在发布的XML中看到的,price字段有一个值。此外,上述XML中包含的值对于

  • 我正在Azure Kubernetes服务上工作。我正在通过门户成功创建AKS。但是,我需要通过ARM模板来完成。 如何使用ARM模板创建AK? 为此,我选择了link 但是,我收到的问题如下: 代码:InvalidTemplate 消息:部署模板验证失败:“模板资源”AKSsubnet/Microsoft。授权/36985XXX-XXXX-XXXX-XXXX-XXXX-5fb6b7ebXXXX“

  • 问题内容: 有谁知道将Java方法发布为Web服务的非常简单的方法?我真的不想要使用Tomcat或Jetty或任何其他容器框架的开销。 方案:我想从本地LAN上的其他计算机访问服务类型应用程序中的一组Java方法。 问题答案: 好吧,Tomcat或Jetty对于将某些方法发布为Web服务可能是过大的。但是另一方面,它并不太复杂,他们可以完成工作,那么为什么不呢? 不久前我遇到了类似的问题,并将To

  • Jersey 1创建RESTful客户端的例子似乎很多。x、 但不是泽西2.0或更高版本。我提到了其他问题和泽西岛的网站,但由于泽西岛2.0与上一个版本之间的差异,我仍然无法创建用于REST的客户端。所以我想问一些建议。 到目前为止,我的编码是这样的。 这会产生406错误。 但是,当我尝试通过Glassfish服务器测试RESTful服务时,测试工作正常,并且服务器端类有其@GET方法,其中包含@

  • 前面小节已经介绍了Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件,模版,cookie等数据进行设置和操作。 http包建立Web服务器 package main import ( "fmt" "net/http" "strin

  • 我创建了一个将被转换为web服务方法,该方法如下所示: 当我部署和测试此web服务时,我得到以下错误: WS00041:服务调用引发异常,消息为:NULL;有关更多详细信息,请参阅服务器日志异常详细信息:java.lang.reflect.invocationtargetexception javax.servlet.servletexception:java.lang.reflect.invoc