【问题标题】:How to control SSLContext scope如何控制 SSLContext 范围
【发布时间】:2011-05-17 02:12:11
【问题描述】:

如果我使用以下代码是因为我想更改证书的验证方式。

trm = 一些信任管理器

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { trm }, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

然后,这将为将来建立的所有 https 连接设置 SSLContext,无论是哪个线程。控制范围的最简洁方法是什么,以便我只为我想要的那些调用设置它?

【问题讨论】:

    标签: java http ssl


    【解决方案1】:

    您可以在要使用此信任存储的实际连接对象上设置套接字工厂:

    HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
    urlConnection.setSSLSocketFactory(sc.getSocketFactory());
    

    这样做而不是调用setDefaultSSLSocketFactory

    【讨论】:

    • 谢谢,听起来它应该可以工作,但是您知道其他不需要您获取 HttpsURLConnection 实例的方法吗?
    • 你没有使用 HTTP 吗?使用 SSL 套接字的连接类型是什么?
    • @che javara 每次在 Java 中使用 HTTPS URL 时,都会得到一个 HttpsURLConnection。这不是额外的步骤。你的问题没有意义。
    • 假设我正在使用更高级别的消息传递框架,该框架在后台使用 http,因此我无法直接访问修改 HttpsURLConnection 实例
    • 您需要依赖该框架的机制来提供替代套接字工厂。如果框架没有公开这些细节,您将需要依赖全局设置。在这种情况下,您可以提供TrustManager 的子类,它只在选定主机上执行不同的行为,而对所有其他主机回退到原始TrustManager
    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多