IPSEC VPN

IPSEC VPN

IPSEC是为IP网络提供安全性的协议和服务的集合,是一种协议簇,一个基于网络层,应用密码学的安全信息协议组。一开始TCP/IP 没有考虑到信息的安全传输。IPSEC协议簇诞生的意义就是保证TCP/IP的安全传输。

伪头部校验:TCP再校验的时候会包含TCP数据部分、原始数据部分还会包括IP头部里面12字节(源IP和目标IP、协议字段、8位保留字段、长度字段)的校验。其中TCP必须,UDP选用。

IPSEC协议簇是针对IPV6设计的,在IPV6的产品中,IPSEC是强制使用,保证其数据传输的安全性;但是,也可以使用在IPV4中,作为一个可选项来使用

IPSEC提供的安全服务

安全信息要素:机密性、完整性、可用性,这三点被称为CIA的黄金三角,新添加可控性和不可否认性

  • 机密性 --- 数据加密

  • 完整性 --- 防篡改

  • 可用性

    • 数据源鉴别:身份认证

      • 预共享密钥 --- PSK --- 相当于两边对了一个暗号,这个暗号需要事先确定好。

      • 数字证书 --- 遵循PKI体系 --- 相当于一个被公认让你的身份证。

    • 不可否认性 --- 数字签名

  • 访问控制

    • 有限的流量保护 --- 在IPSEC中可以抓取感兴趣流,即可以设定哪些流量需要进入到IPSEC通道中,进行保密传输,哪些不需要进入通道

      • 注意

        • IPESC通道,不一定是隧道。隧道是VPN技术的核心技术。IPSEC本身是一个安全体系,它的作用并不一定是用来构建VPN隧道的。他也可以单纯的保证数据的安全传输。指的是要不要保护传输的数据;同理,GRE和GRE VPN也是同样道理,GRE是一种封装技术,而GRE VPN是通过利用GRE技术形成的一种VPN技术;并且MPLS VPN 和MPLS,MPLS它是一种标签转发技术,依靠标签转发。而不依靠路由转发。本身也是一种封装转发技术,MPLS VPN就是利用这个封装转发技术,来建立的一种VPN

重传攻击(重放攻击)

用户登录服务器的加密数据包被截取,其他人通过重新发送这个数据包给服务器,从而绕过登录,进入服务器

预防方法:

  • 数据包+时间戳

  • 数据包+序列号

重传攻击保护 --- 抗重放 --- IPSEC通过启用序列号的方法来进行防重放攻击。 --- 相当于启用一个一次性的数字,不会再次生效。

IPSEC协议簇

安全协议

  • 工作方式:即两种不同的封装方式。

    • 传输模式

      • 特点:没有创建隧道,主机和主机之间,不需要跨越隧道针对数据的保护,一般应用在私网内部。

      • 主要应用场景:经常用于主机和主机之间端到端通信的数据保护。因为没有创建隧道,所以,不能穿越公网,一般用于私网内部。

      • 封装方式 --- 不改变原有的IP包头,在原始的数据包头后面出入IPSEC的包头,将原来数据封装成为被保护的数据。主要针对IP层及以上的数据进行保护,具体的保护方法和范围需要由选用的安全协议来决定。

    • 隧道模式

      • 主要应用场景:因为可以跨公网创建隧道,所以,经常用于私网和私网之间通过公网进行通信,建立安全的VPN隧道。

      • 封装方式 --- 增加新的IP头部,之后是IPSEC的头部,再之后是原始的数据包封装。

  • 安全协议

    • AH(Authentication Header),鉴别头,协议号是51

      • AH提供的安全服务。注意:AH协议无法提供加解密的服务。

        1. 数据完整性保障 --- AH的主要工作就是保证数据的完整性的。

        2. 数据源认证 --- 身份认证

        3. 抗重放攻击

      • AH头部

        • 下一头部:上层协议使用类型

        • 安全参数索引(SPI):用来标识唯一的SA(安全联盟)的,SA相当于建立安全会话,用于参数协商。即IPSEC SA注意,这个SA也是分方向的,如果需要构建这个安全通道,需要构建两条方向相反的SA才行。不同的SA通道需要通过SPI进行标识,相当于SA的一个ID号。

        • 序列号:用来防重放,并且不允许重复

        • AH认证部分= 原始IP头部和数据。将其放在AH头部中的认证数据中。

      • AH保护范围

        • 传输模式

        • 隧道模式

      • 注意

        • AH在进行完整性校验时,因为,会包含IP头部,而IP头部中的部分数据比如TTL,TOS这些参数,在传递的过程中会发生变化,所以,AH在进行校验时将不包含这次参数。

        • 因为AH在进行完整性校验的时候,包含有IP地址信息,但是,NAT技术会修改IP地址信息,所以,AH协议无法通过NAT环境,否则将导致校验失败。

      • 补充

        • GRE协议号是47

        • TCP协议号6

        • UDP协议号17

    • ESP(IPSec Encapsulating Security Payload) --- 封装安全载荷协议

      • ESP提供的安全服务

        1. 数据完整性保障

        2. 数据源认证 --- 身份认证

        3. 抗重放攻击

        4. ESP可以提供数据的加解密服务,并且,加解密是可选的。

      • ESP的头部

        • 注意:ESP尾部主要目的是进行数据的填充。因为数据进行加密主要使用的对称加密算法,而其中分组加密需要针对固定长度的分组进行加密,如果最后分组的长度不足,则需要填充。满足加密的条件。还有就是下一头部因为包含数据信息,所以,也放在尾部进行保护,因为负载部分和尾部部分是会进行加密的。

        • 加密部分=数据部分+尾部部分

        • 下一头部:上层协议使用类型。之所以加密是因为会暴露信息上层协议信息,即泄露数据。

      • ESP的保护范围

        • 加密范围:除了IP头部内容和ESP头部的内容外,剩余所有网络层以上的数据都会进行加密。

        • 认证范围:认证范围广,不包含最外层的IP头部,包含ESP头部和数据部分以及ESP尾部,都进行认证生成摘要值,放在最后面的ESP认证里。

        • 传输模式

          • 红色区域便是加密区,TCP和载荷数据以及ESP尾,黄色区域是验证区包括:ESP和TCP,载荷数据和ESP尾。

        • 隧道模式

          • 红色区域是加密区域,整个数据包加ESP尾, 黄色区域是验证区域,这些区域内的数据是不能被修改的。

          • 此时原始IP头部加密是因为转发依靠新的IP头部转发。

    • AH和ESP对比

    • AH和ESP结合使用

      • 传输模式

      • 隧道模式

      • 结论:只要有AH协议参与的封装都无法通过NAT环境

IKE

IPSEC SA --- 注意,这个SA也是分方向的,如果需要构建这个安全通道,需要构建两条方向相反的SA才行。

手工建立IPSec SA

手工建立IPSec SA的一直生效

  • 先通过ACL列表抓取感兴趣数据流。

  • 配置IPSec的安全提议,即配置安全参数

    • transform --- 选取安全协议封装,AH/ESP

    • esp encryption(加密)-algorithm(算法) 定义做完整性校验,如MD5,SHA-1,SHA-2

    • ah encryption(加密)-algorithm(算法)

    • encapsulation(封装)-mode 确定封装模式,即传输模式或隧道模式

  • 配置IPSec安全策略

    • 针对流量做哪些处理、定义哪些参数。

    • 可以创建点到点,也可以创建点到多点。

    • 设置安全表示SPI。

    • 配置预共享密钥。

    • 两端都要配置。

  • 调用IPSec安全策略

动态建立IPSec SA

IKE(互联网密钥交换) ,主要用来完成IPSec中需要的密钥相关参数的协商工作。可以动态建立IPSec SA。

有两个版本IKE V1和IKE V2

IKE有多个协议构成:SKEME、OAKLEY、ISAKMP

  • ISAKMP(互联网安全联盟密钥管理协议)

    • IKE的协议本体 :主要用来完成IPSec中需要的密钥相关参数的协商工作。可以动态建立IPSec SA

    • 它本身是应用层协议,传输层使用到UDP协议,端口号是500,并且要求源端口和目标端口号都为500。

  • SKEME、OAKLEY 可以理解为IKE协商过程中使用到的资源库

第一阶段

主要目的是为了获得建立IPSec SA时使用的密钥,以及身份认证。并且身份认证是建立安全隧道的前提。

IKE SA (ISAKMP AS) ---这个SA是双向逻辑,不区分源和目标;而IPSec SA 是单向逻辑,通信双方都要建立。

第一阶段的过程

主模式

默认使用IP地址作为身份标识,并且需要通过6个数据包经行交互,安全性更高。

PSK(预共享密钥)和身份标识两者的含义不同,PSK是双方商量的是一样的,主模式用IP地址作为身份标识,它还要作为预共享密钥的识别标志。因为预共享密钥和身份标识有一种对应关系,目的是用来区分选取的预共享密钥,并且用于之后生成密钥,最后再第五第六个数据包解密得出IP地址与数据包传输用的IP对比中得到验证,即身份认证通过。


  • 第一二个数据包 :用来SA交换,即安全参数的交换。

    • CI --- cookie值:用作身份标识,每个数据包中都会携带,并且在IKEV2中,变成了SPI。

    • SA --- 里面携带的是需要协商的安全参数

      • 加密算法

        • AES等

      • 哈希算法

        • MD5等

      • 身份认证方式

        • PSK

        • 证书

      • DH组x

        • (x,的数字越大,越难被破解;一般不选择DH1,因为简单)

      • SA存活期

        • (默认84600s,一天时间)

    • 注意

      • 手工建立的SA,一经建立,则永久有效;但是IKE建立的SA,需要配置生存周期,周期时间到了之后,将重新建立SA。SA两端的数值不要求完全相同,如果时间不同,则按照最小的周期时间执行。

      • 第二个数据包主要确认安全参数,如果安全参数都可以对得上,则将继续完成后面的协商。如果参数没有对上,则将回复一个负载拒绝报文,用于结束IKE SA的建立。

  • 第三四个数据包:DH密钥算法交换,用来计算对称密钥。

    • NI,Nr --- 代表的是随机数

    • X,Y --- 代表DH算法中需要公开的参数。并且这里为了加强安全性,DH算法会生成四种密钥

      • PRF一种哈希算法,将预共享密钥和随机数去经行计算,生成种子密钥。预共享密钥没有传递,而是加入到算法中,如果双方预共享密钥相同,最后得出的密钥结果就是一样的,就相当身份认真了。

      • 种子密钥 --- 剩余三种密钥都需要加入种子密钥运算得出,并且,在种子密钥计算中会携带预共享密钥

      • SKEYID_e --- 加密密钥,用于第一个阶段中5,6个数据包和第二阶段数据包加密使用

        • g^ir --- 代表的就是DH算法中计算出来的Z;

        • CKY-I/CKY-R --- 数据包中携带的cookie值。

      • SKEYID_a --- 验证密钥 --- 用于第二阶段Hash时使用的密钥,即HMAC算法(结合密钥的Hash算法),安全性比不加入密钥的Hash算法更高。

      • SKEYID_d --- 推导密钥 --- 用于计算最终密钥(最终加密数据的密钥)的素材

        • 终加密数据的密钥,第二阶段用的密钥。推到密钥和第二阶段一起算出加密数据的密钥

  • 第五六个数据包

    • ID --- 身份信息 ---在主模式下,默认使用IP地址作为身份信息;

    • Hash ---- 针对之前SA信息再经行Hash运算,对比结果。这里的Hash运算会加入验证密钥一起进行,更加安全。

野蛮模式

注意:在野蛮模式中,可以自定义身份标识,主要是因为身份信息不需要加密。并且前两个数据包都无法加密。所以,野蛮模式安全性比较低。仅第三个数据包会进行加密。但是,野蛮模式适用于NAT环境以及IP地址不固定的环境下使用。

两种模式对比

第二阶段

基于已经建立的安全通道,来协商建立IPSec SA的安全参数。完成后,则标志这IPSec SA建立完成。

快速模式

与第一阶段用于也是UDP 500端口。

协商的安全参数

  • 加密算法 --- 正式传输数据时使用的加密算法(加密算法协商完成后,会计算密钥第一阶段计算出来的推导密钥会加入到该密钥的计算种);

  • Hash算法 --- 正式传输数据时经行完整性校验的算法;

  • 安全协议 --- AH/ESP

  • 封装模式 --- 传输模式/隧道模式

  • 存活时间

PFS

PFS(密钥完美向前保密) --- 正常工作中,第二阶段的最终密钥是通过第一阶段的推导密钥计算出来的,但是,这样做不完全。推导密钥泄露可能导致最终密钥的泄露。所以,可以开启这个PFS技术(注意:要开启这个技术,需要两端都开启才行),之后,则将在第二阶段重新进行一次DH交换,计算最终的密钥,从而提高安全性。

VPN黑洞

VPN黑洞 ---数据传输阶段,IPSec VPN隧道建立之后,如果其中一端的设备异常重启,而另一端的IPSec VPN隧道还在有效期内,则它发送的数据将有去无回,从而形成VPN黑洞 。

解决方法 --- DPD死亡对等体检测(保活机制)

DPD死亡对等体检测,它类似于心跳检测机制,采用空闲计时器原理。两边同时开启一个固定时间的计时器。在计时期间数据将直接发过去,但是如果计时器超时,则在数据发送前,先发送一个DPD检测报文。如果收到对方的DPD应答报文,则将重置计时器。如果没有收到,并且连续五次都没有收到,则将拆掉安全通道 。

IPSec VPN配置

IKE的配置流程

  1. 抓取感兴趣流

    • 创建ACL列表,要创建高级ACL列表,因为后面配置IPSec安全策略中调用的ACL列表只能是高级ACL列表。并且高级ACL列表可以指定源和目标,精确匹配到哪些流量要走VPN隧道,哪些流量不需要走隧道。如果是基础ACL列表,只要是到抓取人发的流量都走隧道,就有可能绕远。

    • [r1]acl 3000 --- 这里只能选择使用高级ACL列表,因为后面调用的时候,仅能调用高级的
      [r1-acl-adv-3000]rule permit ip
  2. 配置IKE安全提议

    • [r1]ike proposal 1 --- 创建IKE安全提议,数字1-99,用来区分不同的IKE安全提议。
      [r1-ike-proposal-1]​
      [r1-ike-proposal-1]encryption-algorithm aes-cbc-128 --- 定义加密算法,缺省是DES算法​
      [r1-ike-proposal-1]authentication-algorithm md5 --- 定义校验算法,缺省是SHA1​
      [r1-ike-proposal-1]authentication-method pre-share --- 定义认证方式,缺省是预共享密钥​
      [r1-ike-proposal-1]dh group2 --- 定义DH组,缺省DH组1​
      [r1-ike-proposal-1]sa duration ? --- 定义SA的老化时间INTEGER<60-604800> Value of time(in seconds), default is 86400
      [r1-ike-proposal-1]sa duration 86400 --- 建议:老化时间修改的时候,要大于600S,避免频繁更新带来的资源消耗。

  3. 配置IKE对等体

    • [r1]ike peer aa v1 --- 需要声明对等体的名称(自定义),第一次进入时,需要写版本号。
      [r1-ike-peer-aa]​
      [r1-ike-peer-aa]ike-proposal 1 --- 关联IKE安全提议
      [r1-ike-peer-aa]exchange-mode ? --- 选择一阶段的模式aggressive Aggressive mode --- 野蛮模式main Main mode --- 主模式
      [r1-ike-peer-aa]exchange-mode main --- 这里缺省选择的是主模式​
      [r1-ike-peer-aa]pre-shared-key cipher 123456 --- 定义预共享密钥的具体值,注意,两边必须一样
      [r1-ike-peer-aa]remote-address 23.0.0.2 --- 三位一体 1,邻居对等体的建邻地址,即指明远端的IP地址;2,参与查找预共享密钥,根据IP地址,查找对应的预共享密钥,并且计算出密钥,对比身份标识,验证对端身份。;3,作为身份标识验证对端身份。

  4. 配置IPSec的安全提议

    •  [r1]ipsec proposal aa --- 需要定义一个提议的名称[r1-ipsec-proposal-aa][r1-ipsec-proposal-aa]transform esp --- 定义安全协议 --- 缺省esp[r1-ipsec-proposal-aa]esp encryption-algorithm aes-128 --- 定义数据加密算法,缺省为des[r1-ipsec-proposal-aa]esp authentication-algorithm md5 --- 定义数据验证算法,缺省为md5[r1-ipsec-proposal-aa]encapsulation-mode tunnel --- 选择封装模式 ,缺省为隧道模式。

  5. 配置IPSec的安全策略

    •  [r1]ipsec policy aa 1 isakmp --- 需要定义策略的名称和编号,并且需要选择手工模式还是IKE的方式。​[r1-ipsec-policy-isakmp-aa-1]security acl ? --- 关联ACL列表INTEGER<3000-3999> Apply advanced ACL[r1-ipsec-policy-isakmp-aa-1]security acl 3000​[r1-ipsec-policy-isakmp-aa-1]ike-peer aa --- 关联IKE对等体​[r1-ipsec-policy-isakmp-aa-1]proposal aa --- 关联ip

  6. 接口调用

    • [r1-GigabitEthernet0/0/0]ipsec policy aa

  7. 其他

    •  [r1]display ipsec sa --- 查看IPSec SA[r1]display ike sa --- 查看IKE SA

IPSec协议簇补充

两个数据库

  • SPD --- 安全策略数据库

  • SAD --- 安全关联数据库

解释域DOI

  • 可以理解为操作空间,将标准,规则都规范起来,统一在解释域中操作。

IKE V2版本

IKEV1的缺点

  1. 协商速度慢

    • 如果第一阶段使用主模式 --- 6 + 3 = 9 条消息完成IPSEC SA的协商;

    • 如果第一阶段使用野蛮模式 --- 3 + 3 = 6条消息完成IPSEC SA的协商。

    • KEV2针对协商速度进行了优化

      • 在IKEV2中,第一阶段协商IKE SA仅需要两个数据包就可以完成;而第二个阶段,在协商IPSEC SA时,也仅需要两个数据包就可以完成 --- 2 + 2 = 4

  2. IKEV1不支持远程用户接入

    • 如果IKEV1想要接入远程用户,可以结合l2tp来构建VPN隧道,只能借助l2tp,通过ppp协议完成远程用户的认证。

    • 而IKEV2增加EAP的认证方式来完成身份认证,则可以实现远程用户的接入。防火墙上,一般V1和V2同时开启,发起协商的时候,一般使用IKEV2,接受协商的时候,同时支持V1和V2。

IPSEC VPN的应用场景

IPSec 不支持动态路由协议

IPsec在协议设计时定位便是一个点对点的协议,这个特点可以通过Ipsec SA看出:IPsecSA通过三元组来唯一标识(目的IP,SPI, 协议号),目的IP都是单播地址,因此一个SA只能对应一个VPN节点,总而言之:ipsec不支持保护组播报文和广播报文。因为ipsec只能跑单播,动态路由使用组播。

GRE虽然同样是点对点协议,却可以封装组播报文和广播报文,但是不具备机密性和源认证等特点;IPsec协议虽然具有机密性和完整性保护的优势,但是无法封装组播报文和广播报文,因此结合两个协议的优势,GRE over IPSec应运而生,这样既可以封装单播、组播、广播报文,还可以加密数据流。

IPSec VPN应用场景

  • IPSec VPN网关部署

    • VPN设备安置在内网和公网的边界位置,这种方式最为简单,就是数据来到出口后,判断是否需要走VPN隧道,匹配上的流量则通过VPN隧道安全的传输到对端私网中。(两边的私网网段需要区分开,否则将导致地址冲突)网关部署的问题:不太安全,因为边界设备将承载很多攻击行为,而VPN设备只是保证业务数据安全的设备。

    • 解决方案:

      1. 使用防火墙在边界充当VPN设备(但是,一台设备需要承担太多的功能,可能导致性能不足)

      2. VPN设备下沉到内网中 --- VPN的单臂部署(NAT下的VPN部署场景)

  • IPSec VPN单臂部署(NAT场景下的VPN部署)

    • IKE协商中的问题

      1. 我们企业一般会采用NAPT的方式来进行NAT转换。但是,在IKE协商中,要求源目端口号必须时UDP 500,否则可能导致协商失败。所以,在NAPT的环境下,则可能更改端口号,导致协商失败。

        • 解决方案:NAT - T

      2. 身份认证的问题:主模式无法通过NAT环境

        • 解决方案:使用野蛮模式。

    • 数据传输阶段的问题

      • AH在进行完整性校验的时候,会包含IP地址信息,所以,NAT如果转换了IP地址,则将导致校验失败。所以,在NAT环境下,无法使用AH协议。

        • 解决办法:使用ESP协议。但是,使用ESP协议还需要分情况来看

          • 如果ESP选择传输模式

          • 问题:如果ESP选择传输模式

            • 四层封装的时候,里面存在伪头部校验。所谓伪头部就是传输层的协议在进行封装的时候,也需要进行完整性校验,但是,这个完整性校验的时候,还需要包含三层IP头部中的部分数据一起进行校验。这些数据中,就包含了IP地址的信息。在正常的NAT中环境,数据进行NAT转换(转换IP地址或者端口号)数据包中传输层的伪头部校验也会重新计算,但是,在ESP选择传输模式的封装下,因为此时,传输层的内容已经被加密了,所以,NAT转换后也无法修改校验和,所以,导致对方在接受的时候,会出现校验和不匹配的问题,导致通信中断。所以,ESP在传输模式也时无法通过NAT环境了。

            • 解决办法:选用ESP隧道模式。

            • 在这种环境下,因为添加了新的IP头部,并且,NAT修改的也是新IP头部。这个头部的内容没有进行完整性校验,所以,可以被修改。并且,四层在进行伪头部校验时使用的数据是原始IP头部中的内容,新的IP头部内容变更,也无法影响到伪头部校验的果。所以,ESP隧道模式的封装可以通过NAT环境

          • ESP和AS协议是否支持NAT转换
  • NAT-T ---- NAT穿越技术

    • 注意

      • 边界NAT设备,开启的是easy-ip或者NAPT技术需要修改端口号,但是由于数据被加密,不能成功修改端口号。NAT-T增加UDP头部。

      • 源端口目标端口都可以是4500,但是源端口号可变,目标端口号不可变。

防火墙Web页面配置IPSec

  1. 配置页面在网络 --- IPSec --- 新建策略列表

  2. 新建IPSec策略

    • 选择场景:点到点或者点到多点

    • 虚拟系统配置

    • 基本配置:策略名称、本段接口(数据发出接口)、本段地址(NAT环境接口配置的公网地址)、对端地址、认证方式(预共享密钥,RSA签名和RSA数字信封)、本端ID和对端ID(主模式就选IP地址;野蛮模式就按照要求选择;本端ID和对端ID的类型和值要保持一致

  3. 待加密的数据流 --- 相当于手工配置的ACL列表

  4. 高级:IKE参数选取、IPSec参数选取。两端配置保持一致。

  5. 两端的安全协议放通 --- 指的是放通IKE的报文传输

    • 此数据包是设备本身发出的,设备本身所在区域是Local,所以区域选取Local到untrush。并且加上IP限制范围。

    • 放通UDP的500/4500

  6. 放通数据传输方面的安全策略

    • 不选区域,选取IP地址,匹配详细。并且不加esp服务限制

      • 因为PC2发送的数据包可以说HTTP或者FTP的协议,经过IPSec隧道经过esp服务封装,到对端防火墙(此图服务器也属于网关设备),如果数据包是找寻网关,就可以正常通信。但是如果找下层其他设备,由于到网关拆开了esp服务封装,但是由于之前放通的数据安全策略仅限制esp放通,所以此时无法正常通信,防火墙安全策略匹配到最后一条拒绝所有。

    • 并且最后要确保本地到未知目标区域的esp流量放通。

      • 和上一条不一样,本条作用是保证本地的esp数据可以通过。上一条只是保证选取的目标网段可以通过,并不是确保本地到目标区域可以通信。

    • 此时仍然数据不通。

      • 原因是:由于NAT和IPSec隧道是在同一个设备上,NAT和IPSec冲突,如果走NAT,就抓不到感兴趣流,就不能走隧道;走IPSec隧道就不能NAT转换,两者冲突。

      • 在防火墙上,NAT是上游配置,而IPSEC隧道是下游配置。所以,NAT的转换会导致数据流量无法进入到IPSEC的隧道中。解决方案:不做NAT转换。

  • 安全策略放通
  • 服务器映射500/4500
  • 模式的选择
  • NAT-T是否开启,默认开启
  • 流量引入隧道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升级到tomcat10和Java 21后,idea控制台system.out.println输出中文乱码问题

最近一次性从tomcat 9升级到tomcat 10&#xff0c;同时Java sdk也从1.8升级到21。 升级过程中&#xff0c;当然会遇到很多问题&#xff0c;但是控制台输出中文乱码问题&#xff0c;着实折腾了很久。 1、尝试各种方法 网上说的很多通用方法都试过了&#xff0c;就是不生效。包…

前端:Element UI 与 Vuetify 的选择

vuetify优势 1、多端适配&#xff0c;Vuetify完全按照Material设计规范进行开发&#xff0c;每一个组件都经过精心设计&#xff0c;具有模块化、响应式和优秀的性能。 使用独特和动态的 布局 自定义您的应用程序&#xff0c;并使用 SASS 变量 自定义您的组件的样式。只需要做下…

【CT】LeetCode手撕—236. 二叉树的最近公共祖先

目录 题目1- 思路2- 实现⭐236. 二叉树的最近公共祖先——题解思路 3- ACM实现 题目 原题连接&#xff1a;236. 二叉树的最近公共祖先 1- 思路 模式识别 模式1&#xff1a;二叉树最近公共祖先 ——> 递归 判断 递归思路&#xff0c;分情况判断&#xff1a; 1.参数及返…

香港“试水”医疗多模态大模型

更好地引入及发掘行业数据有望为垂直领域内的多模态大模型开发提供新可能。中国香港特区传统科研优势要嫁接产业风口&#xff0c;国际化渠道如何与内地资源携手&#xff1f; 产业多模态大模型“风头”正盛&#xff0c;在积极寻找经济新动能的中国香港特区&#xff0c;相关产业…

SQL新手蜕变:掌握这20条常用SQL语句,让你也能成为高手!

序言 在现代软件开发中&#xff0c;SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;作为与数据库交互的标准编程语言&#xff0c;是每个开发者必学的基础技能。掌握SQL并在数据库管理与数据分析中应用自如&#xff0c;能显著提升开发效率和数…

如何修复“AI的原罪”

如何修复“AI的原罪” 上个月&#xff0c;《纽约时报》声称&#xff0c;科技巨头OpenAI和谷歌不顾服务条款和版权法的禁止&#xff0c;将大量YouTube视频转录成文本&#xff0c;并将其用作人工智能模型的额外训练数据&#xff0c;从而进入了版权灰色地带。《纽约时报》还援引Me…

掌握JavaScript ES6精髓:探索函数和对象的高级扩展与实用技巧

序言 JavaScript&#xff0c;作为前端开发中不可或缺的语言&#xff0c;已经发展到了ECMAScript 2015&#xff08;简称ES6&#xff09;以及后续的版本。ES6带来了诸多语法上的改进和创新&#xff0c;使得代码更加简洁、优雅&#xff0c;同时也提供了更多的编程模式和实用技巧。…

【ONE·基础算法 || 记忆化搜索】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解记忆化搜索类题型&#xff08;对比递归、动态规划理解运用&#xff09;。             文章目录 总言1、记忆化搜索1.1、基本介绍1.2、细节理解&#xff08;记忆搜索化、递归、动态规划……&#xff09; 2、斐…

idea插件开发之一起来开发个打印方法入参和返回值的插件吧!

写在前面 源码 。 在开发过程中为了调试代码我们就可能就需要知道某个方法入参的值是什么&#xff0c;或者是返回值是什么。此时&#xff0c;我们的解决办法一般都是debug&#xff0c;但是debug的效率说实话其实是不高的&#xff0c;特别是不断的调试&#xff0c;不断的debug。…

KT148A-SOP8语音芯片接收到一线串口指令到播放声音大概多长时间

一、问题简介 请问KT148A-SOP8语音芯片接收到一线串口指令&#xff0c;到播放出来声音&#xff0c;大概需要多长时间 我的需求是做按键提示音&#xff0c;初测了一下感觉有延时&#xff0c;这个要如何处理 详细说明 KT148A从接收到指令&#xff0c;到执行&#xff0c;到播放…

JavaScript基于时间的动画算法

前段时间无聊或有聊地做了几个移动端的HTML5游戏。放在不同的移动端平台上进行测试后有了诡异的发现&#xff0c;有些手机的动画会“快”一点&#xff0c;有些手机的动画会“慢”一点&#xff0c;有些慢得还不是一两点。 通过查找资料发现&#xff0c;基于帧的算法&#xff08…

多模态大模型时代下的文档图像智能分析与处理

0. 前言 随着人工智能技术的不断发展&#xff0c;尤其是深度学习技术的广泛应用&#xff0c;多模态数据处理和大模型训练已成为当下研究的热点之一&#xff0c;这些技术也为文档图像智能处理和分析领域带来了新的发展机遇。 多模态大模型时代下的文档图像智能分析与处理的研究…

Linux:用户账号和权限管理的命令

目录 一、Linux用户的分类和组的分类 1.1、用户账号和组账号 1.2、用户的分类 1.3、组账号 1.4、用户账号文件/etc/passwd 二、用户管理相关命令 2.1、chage命令&#xff1a;用来修改帐号和密码的有效期限&#xff0c;针对目前系统已经存在的用户 2.2、useradd&#xf…

【Numpy】一文向您详细介绍 np.abs()

【Numpy】一文向您详细介绍 np.abs() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;曾…

数据结构-图的基本概念

图的定义 图时由非空的顶点集合和一个描述顶点之间关系的集合组成。可以定义为&#xff1a; ​​​​​​​ ​​​​​​​ ​​​​​​​ G表示一个图&#xff0c;V表示点集&#xff0c;E表示边集。集合E的每一个二元组都包含两个值和&#xff0c;表示…

什么是联盟营销?独立站如何通过联盟营销提高转化率?

什么是联盟营销&#xff1f;独立站如何通过联盟营销提高转化率&#xff1f; 流量紧缺是跨境电商独立站永恒不变的难题&#xff0c;对于独立站卖家来说&#xff0c;广告投放、KOL引流等推广方式都能带来流量&#xff0c;但在广告流量越来越贵的今天&#xff0c;对于跨境电商独立…

Vue快速上手和Vue指令

一、Vue快速上手 1、Vue概念 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套构建用户界面的渐进式框架 Vue2官网&#xff1a;https://v2.cn.vuejs.org/ 构建用户界面&#xff1a;基于数据渲染出用户可以看到的界面 渐进式&#xff1a; 循序渐进&#xff0c;不一定非得把…

阿里云PAI主机网页访问测试

笔者使用的阿里云平台PAI主机(首次使用免费三个月额度)&#xff0c;由于其默认不设置公网IP&#xff0c;所以在该主机上启动HTTP服务后无法访问测试。 这里使用ssh来作隧道穿透&#xff0c;首先需要配置ssh。 云主机配置ssh 1. 修改root账号密码 在云主机上执行 passwd ro…

安当透明加密(TDE)助力企业建立可信赖的数据环境

​​​​​​​ 透明加密是一种特殊的加密方法&#xff0c;它允许数据在存储或传输过程中自动进行加密和解密&#xff0c;而用户并不需要知道加密过程。这种技术对用户来说是“透明的”&#xff0c;因为它不会改变用户的日常操作习惯&#xff0c;加密和解密过程在后台自动进行…

怎么学习PMP才是最正确的?

每个人的学习方式各不相同&#xff0c;不能一概而论说某种学习方式就是错误的。学习方式并没有绝对的对错之分&#xff0c;只能说是否适合自己&#xff0c;是否能够达到预期的学习效果。并不是别人的学习方式就一定适合自己&#xff0c;也不是不适合自己的学习方式就一定是错误…