MsSqlServerJdbcUrl encrypt、trustServerCertificate、trustStore、trustStorePassword hostNameInCertif

2023-11-01

原文链接

为了允许应用程序使用 TLS 加密,从 1.2 版开始,Microsoft JDBC Driver for SQL Server 引入了以下连接属性:encrypt、trustServerCertificate、trustStore、trustStorePassword 和 hostNameInCertificate 。 为了使驱动程序能够将 TDS 8.0 与 TLS 加密配合使用,从版本 11.2 开始引入了连接属性 serverCertificate。 有关详细信息,请参阅设置连接属性

下表总结了此 Microsoft JDBC Driver for SQL Server 版本对于可能的 TLS 连接方案的行为方式。 每种方案使用一组不同的 TLS 连接属性。 该表包含:

  • blank:“连接字符串中不存在此属性”
  • value:“连接字符串中存在此属性且属性的值有效”
  • any:“连接字符串中是否存在此属性或属性的值是否有效均无关紧要”

备注

同样的行为适用于 SQL Server 用户身份验证和 Windows 集成身份验证。

属性设置 行为
encrypt = false 或 blank
trustServerCertificate = any
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
驱动程序不会强制服务器支持 TLS 加密。 如果服务器具有自签名证书,驱动程序将启动 TLS 证书交换。 将不会验证 TLS 证书,并且只会加密登录数据包中的凭据。

如果服务器要求客户端支持 TLS 加密,驱动程序将启动 TLS 证书交换。 将不会验证 TLS 证书,但将加密整个通信。
encrypt = true
trustServerCertificate = true
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。 如果 trustServerCertificate 属性设置为“true”,驱动程序将不验证 TLS 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = blank
trustStore = blank
trustStorePassword = blank
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用在连接 URL 上指定的 serverName 属性以验证服务器 TLS 证书,并依赖于信任关系管理器工厂的查找规则以确定要使用哪一个证书存储区

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = value
trustStore = blank
trustStorePassword = blank
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用为 hostNameInCertificate 属性指定的值验证 TLS 证书的 subject 值。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = blank
trustStore = value
trustStorePassword = value
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用 trustStore 属性值查找证书 trustStore 文件,并使用 trustStorePassword 属性值检查 trustStore 文件的完整性

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = blank
trustStore = blank
trustStorePassword = value
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用 trustStorePassword 属性值检查默认 trustStore 文件的完整性。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = blank
trustStore = value
trustStorePassword = blank
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用 trustStore 属性值查找 trustStore 文件的位置。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = value
trustStore = blank
trustStorePassword = value
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用 trustStorePassword 属性值检查默认 trustStore 文件的完整性。 此外,驱动程序还将使用 hostNameInCertificate 属性值验证 TLS 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = value
trustStore = value
trustStorePassword = blank
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用 trustStore 属性值查找 trustStore 文件的位置。 此外,驱动程序还将使用 hostNameInCertificate 属性值验证 TLS 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = true
trustServerCertificate = false 或 blank
hostNameInCertificate = value
trustStore = value
trustStorePassword = value
驱动程序请求对服务器使用 TLS 加密。

如果服务器要求客户端支持 TLS 加密,或者服务器支持加密,则驱动程序将启动 TLS 证书交换。

驱动程序将使用 trustStore 属性值查找证书 trustStore 文件,并使用 trustStorePassword 属性值检查 trustStore 文件的完整性。 此外,驱动程序还将使用 hostNameInCertificate 属性值验证 TLS 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。
encrypt = strict
hostNameInCertificate = value
trustStore = blank
trustStorePassword = blank
serverCertificate = value
驱动程序请求对服务器使用 TDS 8.0 strict TLS 加密。

驱动程序将启动与服务器的 TLS 握手和证书交换作为第一个操作。

strict 模式下,将忽略 trustServerCertificate 设置将其视为 false。

驱动程序将使用可选的 hostNameInCertificate 或 serverCertificate 属性来验证服务器 TLS 证书。

如果服务器未配置为支持 TDS 8 加密,驱动程序将报错并终止连接。

如果 encrypt 属性设置为 true,则 Microsoft JDBC Driver for SQL Server 将使用 JVM 的默认 JSSE 安全提供程序与 SQL Server 协商 TLS 加密 。 默认的安全提供程序可能不支持成功协商 TLS 加密所需的全部功能。 例如,默认的安全提供程序可能不支持在 SQL Server TLS 证书中使用的 RSA 公钥的大小。 在这种情况下,默认的安全提供程序可能报错,此错误将导致 JDBC 驱动程序终止连接。 为了解决此问题,可以使用以下选项之一:

  • 使用具有较小 RSA 公钥的服务器证书配置 SQL Server
  • 在“<java-home>/lib/security/java.security”安全属性文件中将 JVM 配置为使用其他 JSSE 安全提供程序
  • 使用其他 JVM

验证服务器 TLS 证书

在 TLS 握手期间,服务器向客户端发送其公钥证书。 JDBC 驱动程序或客户端必须验证服务器证书是由客户端信任的证书颁发机构颁发的。 驱动程序要求服务器证书必须满足以下条件:

  • 证书是由受信任的证书颁发机构颁发的。
  • 必须颁发证书才能进行服务器身份验证。
  • 证书未过期。
  • 证书使用者中的公用名 (CN) 或使用者替代名称 (SAN) 中的 DNS 名称与连接字符串中指定的 serverName 值完全匹配,或与 hostNameInCertificate 属性值(如果指定)完全匹配
  • DNS 名称可包含通配符。 在版本 7.2 之前,Microsoft JDBC Driver for SQL Server 不支持通配符匹配。 也就是说,abc.com 与 *.com 不匹配,但 *.com 与 *.com 匹配。 在版本 7.2 和更高版本中,支持标准证书通配符匹配。

为了使 TDS 8.0 能够与 strict 加密配合使用,serverCertifcate 属性值提供用于服务器证书验证的服务器证书路径。 此文件必须使用 PEM 文件格式。 从服务器收到的证书必须与此证书完全匹配。

另请参阅

使用加密
保护 JDBC 驱动程序应用程序

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

MsSqlServerJdbcUrl encrypt、trustServerCertificate、trustStore、trustStorePassword hostNameInCertif 的相关文章

  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • SQL Server 数据库架构版本控制和更新

    对于我的应用程序 我必须支持更新方案 并且数据库可能会受到影响 我希望能够从旧版本更新到最新版本 而无需安装中间版本 例如 假设我有版本 A 最旧的版本 B 中间版本 和 C 新版本 我希望能够将版本 A 直接更新到版本 C 对于应用程序文
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • 【LVGL 学习】COLOR 常用接口函数说明

    COLOR 接口常用函数说明 通常跟样式 style 接口函数搭配使用 文件位置 src misc lv color c lv palette t 枚举包含以下18种 LV PALETTE RED LV PALETTE PINK LV PA
  • php的接口怎么用postman测试,使用postman做接口测试

    postman功能说明 接口的组成 request 请求 请求地址 url 请求类型 method 请求头 headers 请求数据 data 请求格式按接口文档填写 response 响应 响应数据 状态码 200 接口运行正常 400
  • 请阐述分治算法、动态规划算法、贪心算法三者的共同点与区别,以及它们都有哪些优势和劣势?...

    分治算法 动态规划算法 贪心算法三者共同点 都是用于解决复杂问题的算法 都是通过将大问题分解为若干个小问题来解决问题的 不同点 分治算法的思路是通过不断分解问题的规模 最终到达一定的规模 然后再合并结果来解决问题 动态规划算法通过对问题的拆
  • [C++] 线程同步的四种方式和demo

    源码路径 dangwei 90 ThreadSync 线程同步 github com https github com dangwei 90 ThreadSync 编译平台 win10 编译工具 vs2019 语音 C 线程同步的四种方式
  • 七牛云图片上传

    进入七牛云的网站 https portal qiniu com
  • hive库操作示例

    hive库操作示例 1 常规表 创建数据库 CREATE DATABASE mydatabase 使用数据库 USE mydatabase 创建表 CREATE TABLE mytable id INT name STRING age IN
  • Linux卸载home独立分区

    最近编译了一个新的Linux内核 安装的时候如果直接make install 那么镜像文件会和原来的系统放在一块 登录的时候账户 桌面配置等都是一样的 只是内核不一样 其它都是共享的 看不出两个内核有啥区别 因此想在一个独立的分区放置新的内
  • Spring Web MVC和Hibernate的集成

    网上看到很多关于Spring与Hibernate的集成的文章 奈何由于那些文章写作时间较早 很多都是Spring 3 和Hibernate 4等较旧的版本 所以我在这里使用更新的版本来说明一下 添加项目依赖 首先我们需要一个Java Web
  • egg框架(用户鉴权,token验证,以及前端简略配置)

    最近在研究阿里出的egg 想写一个后台管理系统 但是用了egg nunjucks之后 感觉它的模板渲染很僵硬 模板页面无法直接调用service的方法来操作数据库 但是用常规的form表单提交到路由 感觉又很奇怪 还是要请求api 那我为什
  • Ubuntu显示美化 优化 常用插件

    Ubuntu显示美化 优化 常用插件 1 安装 Extension Manager 2 网速显示 不显示总流量记得关掉 3 顶部透明度 4 左侧dock导航透明度 5 过渡动画 2022 01 22 毛玻璃效果 和 程序启动背景墙效果 20
  • TortoiseGit提示No supported authentication methods available异常

    TortoiseGit他属于git的客户端 可有可无 说白了就是将git命令给我们整理成了可直接操作的按钮 本地代码是使用了SSH的方式去拉取的代码 但是通过TortoiseGit pull代码的时候发生了如下异常 而GitBash却可以正
  • 蓝桥杯单片机第14届模拟题第三套

    总的来说14届省赛的模拟题都是考串口通信的 都做完基本没什么问题了 题目 代码 main函数 include stc15f2k60s2 h include intrins h include iic h include stdio h sb
  • 安卓手机硬改软件介绍。改机软件 改手机参数

    https www bilibili com video BV1Pp4y1S7hK 视频地址 硬改无需root权限 改完就是新机 手机端能一键操作的都是软改 就好比你女朋友化妆了还是你女朋友 硬改相当于换了一个新的女朋友
  • 初学者应该这样看盘

    首先在 开盘 时要看集合 竞价 的股价和成交额 看是高开还是低开 就是说 和昨天的收盘价相比价格是高了还是低了 它表示出市场的意愿 期待今天的股价是上涨还是下跌 成交量的大小则表示参与买卖的人的多少 它往往对一天之内成交的活跃程度有很大的影
  • Unity3D Glow Effect 自发光 颜色溢出效果

    unity自带的image effect中的一个摄像机特效 但它是针对全屏幕渲染的 而且我们要明确一点 只需你知道我们场景中的GameObject的材质shader通过alpha通道进行控制这个光晕的 也就是说将alpha变成0那么将是原来
  • 合工大 编译原理 实验

    目前仅有实验一二三四 Windows桌面应用程序项目 开发语言 c 开发环境 Visual Studio 实验一 GitHub 实验二 传送门 实验三 传送门 实验四 传送门 实验一大致功能 支持程序运行时输入关键词 支持已保存关键词的表格
  • Ethereum私有网络的搭建

    好久没有弄以太坊 因为工作需要 需要搭建一个以太坊的私有网络 private network 0 实验环境 3台阿里云服务器 Ubuntu 16 04 分别简称为ali1 ali2 ali3 1 Ethereum节点的编译 安装 这一点无需
  • DAY40:贪心算法(九)单调递增的数字(贪心的思路)

    文章目录 738 单调递增的数字 暴力解也需要看一下 暴力解写法 注意 必须引入 isIncreasing 变量的原因 贪心思路 遍历顺序 最开始的写法 debug测试 逻辑错误 修改版 debug测试 int转化为字符串的原因 to st
  • QMap的排序

    QMap排序方法运用实例 QMap的升序排序 巧妙避开默认排序规则 QMap 如何根据value排序 QMap排序方法运用实例 QMap排序方法运用实例 Music 爱好者的博客 CSDN博客 QVector
  • MsSqlServerJdbcUrl encrypt、trustServerCertificate、trustStore、trustStorePassword hostNameInCertif

    原文链接 为了允许应用程序使用 TLS 加密 从 1 2 版开始 Microsoft JDBC Driver for SQL Server 引入了以下连接属性 encrypt trustServerCertificate trustStor