【问题标题】:Right way to set SSL validation in Java在 Java 中设置 SSL 验证的正确方法
【发布时间】:2020-10-23 08:45:36
【问题描述】:

我有一个 Jersey 应用程序,它基本上从 S3 检索图像文件并进行操作(调整大小等)以获取缩略图。最后,它将缩略图存储回同一个存储桶中。

如图所示禁用 SSL 时它可以正常工作。

@ApplicationPath("/*")
public class TarkshalaPhotoLibraryApplication extends Application {

@SneakyThrows
public TarkshalaPhotoLibraryApplication() {
    // FIXME: 01/07/20 This is for sake of development, in production environment
    // legitimate certificate issuers are needed to be supplied
    disableSSLVerification();
}

private void disableSSLVerification() throws NoSuchAlgorithmException, KeyManagementException {
    TrustManager[] trustAllCerts = new TrustManager[] {
            new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }
    };
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    // Create all-trusting host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
}
}

我是在 jersey 的应用类中做的。

我对上面的代码 sn-p 的理解是,我们基本上是在添加 TrustManager 来跳过检查 ssl 证书。理想情况下,我们的信任管理器应该检查我们必须指向正确的 SSL 提供者的证书。

我不知道的是,我在哪里可以获得 S3 使用的正确 SSL-Provider 以及在 Java 中检查 SSL 的正确方法。

任何帮助将不胜感激。

【问题讨论】:

  • 我不知道 S3,但是要在 java 中使用 SSL 验证。您可以获得证书,创建一个信任库并将该信任库保存在类路径中。用户 JAVA_OPTS 指向证书 JAVA_OPTS -Djavax.net.ssl.trustStore=信任库的路径。即使您可以使用 System.setProperty("javax.net.ssl.trustStore","trust store path"); System.setProperty("javax.net.ssl.trustStorePassword","password");

标签: java security ssl amazon-s3 https


【解决方案1】:

演练是这样的:

  1. 在浏览器中打开您想要获得证书的网址。示例网址:https://images.s3-us-west-2.amazonaws.com/photo.jpg

  2. 该文件不需要存在。现在重要的是正确验证 TLS 连接。

  3. 单击证书详细信息。 Chrome 中的示例:

  4. 根证书是您需要放入信任库的东西。

  5. 下载并放入您的信任库。利润。

【讨论】:

  • 其实!我们不需要设置明确的证书管理器。如果证书提供者/验证者是公开的,Java 会自动处理它。就我而言,这是由于最近 S3 对象 url 的变化而导致的问题。参考stackoverflow.com/questions/62736506/…
  • 您的解决方案可能适用于证书提供者未知的问题,但我尚未对此进行测试。谢谢你的时间:)
猜你喜欢
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
相关资源
最近更新 更多