如何优雅地检测 SSL

2023-11-30

我有一个 Web 服务,可以绑定到 ssl 或普通 http。 Java 客户端配置为了解服务器主机和端口。当客户端连接时,我构建服务器端点,例如http://主机:端口/服务。客户端不知道服务器是否使用 ssl - 服务器始终绑定到单个端口,因此它要么安全,要么不安全。现在的问题是如何让客户端在不引入其他参数的情况下发现这一点?我可以挑战普通的 http 请求,然后在出现特定异常时回退到 ssl(或反之亦然)吗?或者我必须明确为客户端引入新的连接参数?


在服务器端,您可以使用类似的机制Grizzly 的港口统一执行。这可用于在同一端口上提供 HTTP 和 HTTPS 服务。这依赖于这样一个事实:在这两种情况下,客户端首先进行对话,然后发送 HTTP 请求或 SSL/TLS 客户端 Hello 消息。这在服务器端非常方便(尽管我不确定我是否建议通常在同一端口上运行两个协议)。

从客户的角度来看(这就是您所问的问题),其后果是:

  • 客户先说话的事实意味着它总是必须先尝试。如果您尝试将 SSL/TLS 与普通 HTTP 服务进行对话,则可能会出现某种异常,反之亦然。
  • 如果服务器使用端口统一,您将无法可靠地找到答案。

除了端口统一之外(毕竟这种情况很少见),您可以尝试缓存过去尝试的结果。

更根本的是,从安全角度来看,不知道应该使用哪种协议会引入漏洞:您的系统将容易受到降级攻击(以类似的方式盲目依赖自动重定向会)。如果您的用户代理支持HSTS,值得研究一下(尽管它需要用户代理记住哪些站点将与 HTTPS 一起使用)。

无论哪种方式,如果您担心安全性,您must配置客户端以了解何时使用https://.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何优雅地检测 SSL 的相关文章

  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 简单但方法调用的位置参数太多

    谁能解释一下为什么TypeError is fib 接受 1 个位置参数 但给出了 2 个 当我只给它一个参数时 gt self fib self n 1 另外 在保留类的实例化的同时 您能建议您的解决方案来解决这个问题吗 我觉得 自我 用
  • Ace 编辑器无法与 bootstrap 配合使用

    我使用引导程序默认示例主题 http getbootstrap com examples jumbotron narrow 我想过去 ace 编辑器而不是中央块 但 ace 编辑器不起作用 空白区域 div class container
  • 无法将结果发布到 Sonarqube 服务器

    我已经设置了一个 jenkins sonarqube github 集成工作流程 其中 git 存储库中的拉取请求触发一个 webhook 该 webhook 启动 jenkins 作业 从而启动 SonarQube Scanner 问题是
  • 解决 Postgres 中的“错误:在数据中发现文字换行符”?

    我有一个包含 3200 万个元组的数据集 我使用 COPY FROM 将这些元组复制到表中 在前 700 万个左右中 有 3 个格式不正确的元组 在这些情况下 下一条记录不会位于当前记录下方 而是会附加到同一行当前记录的末尾 所以而不是 r
  • g++ 无法静态链接 libmongcxx(r3.0.2) 但动态链接可以

    我使用 mongodb 站点的示例代码来展示这里的问题 操作系统 ArchLiux c 是g 的链接 dean dell xps 13 c version c GCC 6 2 1 20160830 版权所有 C 2016 Free Soft
  • S3 静态网站上的 https 卡住

    我创建了一个 S3 存储桶并将其设为静态网站 如果我尝试重定向 例如重定向到 Google 它对于 HTTP 来说效果很好 例如 curl I http test s3 redirect s3 website eu west 1 amazo
  • UIActionSheet 自定义

    我们可以更改破坏性按钮和其他按钮在 UIActionSheet 中出现的顺序吗 默认情况下 破坏性按钮 红色 显示在其他按钮上方 在我的应用程序中 我希望其他按钮显示在破坏性按钮上方 没问题 只需分配并初始化一个新的 UIActionShe
  • 如何有效地找到给定位置附近最近的位置

    我正在制作一个脚本 其中将大量业务加载到具有纬度和经度的 mySQL 数据库中 然后 我为该脚本提供 最终用户的 纬度和经度 并且该脚本必须计算从提供的纬度 经度到从数据库获取的每个条目的距离 并按照从最近到最远的顺序对它们进行排序 我实际
  • h:dataTable 复合组件、cc.attrs.var、IllegalArgumentException

    我正在尝试创建自己的数据表 例如 primefaces 的数据表 问题是cc attrs var使用时会抛出 IllegalArgumentException 所以我想知道如何才能拥有像 Primefaces 这样的 var 属性
  • 如何将 Math.X 函数与 LINQ 结合使用?

    我有一个简单的表 SQL Server 和 EF6 Myvalues 有列Id Value 双倍的 我试图获得该表中所有值的自然对数之和 我的 LINQ 语句是 var sum db Myvalues Select x gt Math Lo
  • 使用 Array.new(n, Array.new) 创建矩阵

    我通过执行以下操作创建了一个数组 gameboard Array new 3 Array new 3 我尝试像这样分配一个值 我得到了这个 gameboard 0 2 X gameboard gt X X X 当我以不同方式声明数组时 ga
  • 如何为任意类型创建 Roslyn ITypeSymbol?

    我可以用一个语法生成器生成类型的参数Int32像这样 var generator SyntaxGenerator GetGenerator document var paramType generator TypeExpression Sp
  • 为什么 PRFRelation 不支持 fromLocalDataStore 查询?

    我有一个PFUser对象有几个PFRelation指向其他物体 当我运行以下代码时 PFRelation relation PFUser currentUser relationForKey Relation PFQuery query r
  • JavaScript 将字符串添加到数字

    我正在读MDN 上重新介绍 JavaScript并在该部分中Numbers它说您只需在字符串前面添加一个加号运算符即可将字符串转换为数字 例如 42 这将产生 42 的数字输出 但在接下来的部分中运营商它说 通过将字符串 某物 添加到任何数
  • 访问当前系统时区

    基本上我可以使用以下代码检测系统时区列表 foreach TimeZoneInfo info in tz Debug Log time zone id info Id display name info DisplayName 运行此代码
  • AjaxForm 结果中的 AjaxForm

    这是我的观点 foreach var item in Model tr Html RenderPartial PhoneRow item tr PhoneRow model PhoneModel using Ajax BeginForm E
  • Storage::move 给出“在路径中找不到文件:” Laravel 和 Ubuntu

    我想移动一些文件 Storage move posts temp val photos post gt id val 但它给了我 File not found at path home vagrant Code 有什么特殊的配置需要寻找吗
  • Pandas 和 SQLAlchemy:在连接期间重命名列

    I have table A and table B 两者都有一个专栏id和一列name 当我使用pd read sql 将 SQLAlchemy 查询的结果转换为 pandas DataFrame 生成的 DataFrame 有两列 名为
  • 解析数据 org.json.JSONException 时出错:在字符 0 处输入结束 - Android

    我正在开发一个测试 Android 应用程序 它必须显示来自 mysql 数据库的一些数据 这是我的日志 05 22 17 10 56 865 E JSON Parser 31648 Error parsing data org json
  • 如何优雅地检测 SSL

    我有一个 Web 服务 可以绑定到 ssl 或普通 http Java 客户端配置为了解服务器主机和端口 当客户端连接时 我构建服务器端点 例如http 主机 端口 服务 客户端不知道服务器是否使用 ssl 服务器始终绑定到单个端口 因此它