java - 如何通过 Web 服务生成 'simple SSL'?

标签 java web-services ssl

我知道如何使用证书保护 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。更多详情在此 blog .

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

关于java - 如何通过 Web 服务生成 'simple SSL'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810634/

相关文章:

java - 当抽象类不包含任何抽象方法时

java - 当同样的事情可以由 servlet 完成时,为什么还要使用 Restful Webservices?

python - 在 FTPS 服务器上使用 ftplib 列出目录时 sslobj.do_handshake 中的 "OSError: [Errno 0] Error"

node.js - NodeJS 服务器不接受 POST 请求

java - 如何在 Selenium 中使用 ChromeDriver

java - 使用导航切换到另一个 fragment 时保存 fragment 数据

java - 如果我在我的 Android 应用程序中包含 Java 8,这会影响它在哪些设备上运行吗?

javascript - 我如何测试我的 web api Post Web 方法以了解内部发生了什么?

r - 在 R 中,如果我有 Web 服务的 WSDL 描述,我该如何调用它? (消费网络服务)

ssl - 如何在后现代而不是 cl+ssl 中使用 Lispworks comm 包进行 SSL 访问