Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
默认情况下,Java8URL连接是否使用TLS?_Java_Security_Https - Fatal编程技术网

默认情况下,Java8URL连接是否使用TLS?

默认情况下,Java8URL连接是否使用TLS?,java,security,https,Java,Security,Https,我有一个关于HTTPS/TLS和Java8或更高版本的简短问题。 想象一下以下设置: Version 1: URL myUrl = new URL("https://example.com/fileOfInterest"); URLConnection connection = myURL.openConnection(); InputStream iStream = connection.getInputStream(); 默认情况下,此连接是TLS加密的(包括受信任CA

我有一个关于HTTPS/TLS和Java8或更高版本的简短问题。 想象一下以下设置:

Version 1:
URL myUrl = new URL("https://example.com/fileOfInterest");
URLConnection connection = myURL.openConnection();
InputStream iStream = connection.getInputStream();
默认情况下,此连接是TLS加密的(包括受信任CA的证书验证等),还是我必须遵循与此配置相关的指南:

Version 2:
URL url = new URL("https://example.com/fileOfInterest");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
InputStream iStream = connections.getInputStream();
我有点困惑,因为版本2似乎对可能的HTTPS连接没有任何配置影响

在默认情况下使用安全的HTTPS连接的情况下,如果无法通过HTTPS连接,是否也禁止回退到不安全的HTTP?或者我必须自己禁用它

如果您能澄清这一困惑,请提前感谢,我只是不想冒安全漏洞的风险;)

我有点困惑,因为版本2似乎对可能的HTTPS连接没有任何配置影响

但当然不是

HttpsURLConnection connection=(HttpsURLConnection)url.openConnection()

此构造称为强制转换运算符:其形式为
(someType)someExpression

它做3件完全不相关的事情。因此,不足为奇:它经常让java程序员感到困惑

这里使用的模式是“类型强制”模式:这是当parens中的类型不包含与表达式不同的泛型(它根本不包含任何泛型,所以请检查)并且不是基元(它不是,所以请检查)时得到的模式

此模式意味着,什么也不发生。代码几乎是一个完整的禁止操作。在运行时,如果表达式实际上是所述类型(结果证明它是一个
HttpsURLConnection
),则不会发生任何事情。但是,如果不是,该代码将抛出ClassCastException

版本2没有抛出这个,因此证明它什么也没做。(当然,在编译时,它确实强制类型:编译器现在允许您调用只有HttpsURLConnection对该表达式具有的内容,而如果您不强制转换,编译器将拒绝编译。但是,这是编译时,当我说“它什么都不做”时,我指的是运行时发生的事情

假设它什么都不做,而且java是严格的动态分派(这意味着,
getInputStream()
调用总是根据调用它的实例的实际情况“解析”到最具体的实现),这两个代码段是完全相等的,除非
openConnection
调用不返回
HttpsURLConnection
,在这种情况下,版本1工作,版本2抛出ClassCastException

这使我们得出以下结论:

  • 这两件事在定义上是一样的,因此证明版本2不是“必要的”

  • 尽管如此,从第二个版本将崩溃的意义上讲,第二个版本可以被认为是“更安全的”(尽管有一个完全不合适的异常;您应该捕获它并重新引用到更合适的版本,这表明如果URL不是https,您的代码被指定为中止),虽然它不适用于这里,当然:您的URL是基于https的

  • 真的,整个API有点糟糕。因为,嗯,jdk11?在任何情况下都比jdk8更新,有一个新的,更好的HTTP客户机烘焙到java中

  • 我有点困惑,因为版本2似乎对可能的HTTPS连接没有任何配置影响

    但当然不是

    HttpsURLConnection connection=(HttpsURLConnection)url.openConnection();

    此构造称为强制转换运算符:其形式为
    (someType)someExpression

    它做3件完全不相关的事情。因此,难怪它经常让java程序员感到困惑

    这里使用的模式是“类型强制”模式:这是当parens中的类型不包含与表达式不同的泛型(它根本不包含任何泛型,所以请检查)并且不是基元(它不是,所以请检查)时得到的模式

    此模式意味着,什么也不发生。代码几乎是一个完全的禁止操作。在运行时,如果表达式实际上是声明的类型(结果证明它是一个
    HttpsURLConnection
    ),那么什么也不会发生。但是,如果不是,该代码将抛出ClassCastException

    版本2没有抛出这个,因此证明它什么也没做。(当然,在编译时,它确实强制类型:编译器现在允许您调用只有HttpsURLConnection对该表达式具有的内容,而如果您不强制转换,编译器将拒绝编译。但是,这是编译时,当我说“它什么都不做”时,我指的是运行时发生的事情

    假设它什么都不做,而且java是严格的动态分派(这意味着,
    getInputStream()
    调用总是根据调用它的实例的实际情况“解析”到最具体的实现),这两个代码段是完全相等的,除非
    openConnection
    调用不返回
    HttpsURLConnection
    ,在这种情况下,版本1工作,版本2抛出ClassCastException

    这使我们得出以下结论:

  • 这两件事在定义上是一样的,因此证明版本2不是“必要的”

  • 尽管如此,从第二个版本将崩溃的意义上讲,第二个版本可以被认为是“更安全的”(尽管有一个完全不合适的异常;您应该捕获它并重新引用到更合适的版本,这表明如果URL不是https,您的代码被指定为中止),虽然它不适用于这里,当然:您的URL是基于https的

  • 真的,整个API