热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IPsecSA创建步骤——IKE协议

IPsecSA创建步骤概述IPsecSAcreationstepsTherearetwostepsontheIPsecSAcreation,phase1istocreatIKE-

IPsec SA 创建步骤概述

IPsec SA creation steps

There are two steps on the IPsec SA creation, phase 1 is to creat IKE-SA, and phase 2 is to creat IPSEC-SA, the phase2 will be protected by phase 1. phase 1 creat a security tunnel to protect phase2.

step 1: creat IKE-SA, there are two modes on this step, the major is main mode, which including six messages;
       1,&2, to negotiate the security policy, 1,initiator send all type policys supported to remote, and if remote search one of them which it support too, it will response to initiator;

including Authentication method: psk or md5; hash- algorithm : md5 or sha; encryption algorithm :des or 3des ; sa life time (duration) x seconds;

       3&4 , to exchange the DH and key, and creat key;
       5&6, those two messages had been protected by key_id, to authentication each other;

step2 : creat IPSEC-SA;
      1, negotiate the IPSEC-protocol:esp or ah;   ipsec-mode:tunnel or transport; hash-algorithm: md5 or sha;
      2, ack and ack too .


第一阶段

主模式和积极模式(也叫进取模式)2种

主模式执行3步,6个数据包的双向交换.过程如下:

1、对等体间协商如何来保护管理连接.(使用加密变换集来保护,即安全策略)

2、对等体间使用DH算法来交换密钥,创建密钥,以及保护连接.

3、对等体间进行彼此的验证,这两个消息使用key_id来保护.

积极模式执行的过程:

1、交换保护管理连接的策略,DH算法建立公钥/密钥对并在对等体间进行认证.

2、对收到的数据包做验证,DH算法来共享加密的密钥,并查看连接是否成功建立.

PS:除了预共享密钥认证外,其他的认证方式默认为主模式。




注意!!!只有remote vpn和Easy vpn是积极模式的,其他都是用主模式来协商的
让IKE对等体彼此验证对方并确定会话密钥,这个阶段用DH进行密钥交换,创建完IKE SA后,所有后续的协商都将通过加密和完整性检查来保护。
phase 1帮助在对等体之间创建了一条安全通道,使后面的phase 2过程协商受到安全保护。

第二阶段
使用快速模式

1、协商IPSEC SA使用的安全参数(ipsec协议:AH或者ESP,ipsec模式:传输模式或者隧道模式,hash算法:MD5或者SHA)

2、彼此验证。

此阶段创建IPSEC SA,使用AH或ESP来加密IP数据流。


详细过程主模式协商 IKE phase 1在IPSEC对等体间交换6条消息,这些消息的具体格式取决于使用的对等体认证方法。


一,使用预共享密钥进行验证的主模式(6条)




第一阶段


准备工作

在前2条消息发送以前,发送者和接受者必须先计算出各自的
COOKIE(可以防重放和DOS攻击),这些COOKIE用于标识每个单独的协商交换消息

COOKIE ---RFC建议将源目IP,源目端口,本地生成的随机数,日期和时间进行散列操作。
COOKIE成为留在IKE协商中交换信息的唯一标识。实际上 COOKIE是用来防止DOS攻击的,它把和其他设备建立IPSEC所需要的连接信息不是以缓存的形式保存在路由器里,而是把这些信息HASH成个 COOKIE值。

1&2消息

即策略协商。
消息1——发送方向对等体发送一条包含一组或多组策略的提议,在策略提议中包括5元组(加密算法,散列算法,DH组,认证方法,IKE SA寿命(可选))。
策略协商,在这一步中,就四个强制性参数值进行协商:

1)加密算法:选择DES或3DES。

2)hash算法:选择MD5或SHA。哈希算法将任意长度的二进制映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法

3)认证方法:选择证书认证、预置共享密钥认证或Kerberos v5认证。

4)Diffie-Hellman组的选择 。

Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分。Whitefield与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm)。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是注意,这密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实际加密和解密消息。然而,它所产生的密钥可用于加密、进一步的密钥管理或任何其它的加密方式。

Diffie-Hellman (DH) 组确定了在密钥交换进程中使用的密钥的强度。 组的编号越大安全性就越高,但是也就需要更多的时间来计算密钥。


消息2——接受方查看IKE策略消息,并尝试在本地寻找与之匹配的策略,找到后,则有一条消息去回应。


注意:发起者会将它的所有策略发送给接受者,接受者则在自己的策略中寻找与之匹配的策略(对比顺序从优先级号小到大)。

默认策略实际就是个模版,没作用,如果认证只配置预共享的话,其他参数就会copy默认策略里的。

在1&2消息中报错可能出现的原因
1,peer路由不通;
2,crypto isakmp key没有设置;
3,一阶段的策略不匹配。


3&4消息

这2条消息用于交换DH算法的公开信息和随机数。

两个对等体根据DH的公开信息都算出了双方相等的密值后,两个nonce(随机数)连同预共享密钥
生成第一个skeyID。随后便根据SKEY__ID来推算出其他几个skeyID。并保护后续连接。

DH算法:
     A:   P(较大的质数)                           B: P(较大的质数)
           G                                                   G
           PriA(随机产生)                              PriB(随机产生)   
           PubA=G^PriA mod P                       PubB=G^PriB mod P
           交换PubA和PubB
           Z=PubB^PriA mod P                         Z=PubA^PriB mod P
      Z就是共享密钥,两个自我产生的Z应相同,它是用来产生3个SKEYID的素材。


skeyID_d---用来协商出后续IPSEC SA加密使用的密钥,是一个中间密钥。
skeyID_a---为后续的IKE消息协商以及IPSEC SA协商进行完整性检查(HMAC中的密钥)。
skeyID_e---为后续的IKE消息协商以及IPSEC SA协商进行加密。

密钥负载——传送的DH公共值(Xab) 而生成 。
临时值负载——当DH临时值一被计算出来,两个对等体就独立计算临时值。(发起者的临时值Ni,响应者的临时值Nr)。

  ·<密钥推导>  
  · SKEYID&#61;PRF(preshared key, Ni|Nr)  
  · SKEYID是从预共享密钥推导得到&#xff0c;并且总是与Ni/Nr有关&#xff0c;这样即使采用相同的预共 享密钥&#xff0c;不同的Ni/Nr产生的SKEYID是不同的   
  · SKEYID_d &#61;PRF(SKEYID, gab |CKY-i|CKY-r|0)  
  · SKEYID_a &#61;PRF(SKEYID, SKEYID_d| gab |CKY-i|CKY-r|1) 
  · SKEYID_e &#61;PRF(SKEYID, SKEYID_a| gab |CKY-i|CKY-r|2)   
  SKEYID_d&#xff1a;一个中间态密钥&#xff0c;不用于实际的数据加密和认证&#xff0c;仅仅用于导出其他密钥。
    由SKEYID和K&#xff08;是Pre-shared keys&#xff0c;或是证书的公钥&#xff09;经H计算得出。



5&6消息

这2条消息用于双方彼此验证&#xff0c;这个过程是受skeyID_e加密保护的。

&#xff08;据上下文推测&#xff0c;这个过程会生成hash值来做彼此认证&#xff0c;请看下文的HASH认证成分&#xff09;

为了正确生成密钥&#xff08;hash值&#xff09;&#xff0c;每一个对等体必须找到与对方相对应的预共享密钥。

当有许多对等体连接时&#xff0c;每一对对等体两端都需要配置预共享密钥&#xff0c;每一对等体都必须使用ISAKMP分组的源IP来查找与其对等体对应的预共享密钥&#xff08;此时由于ID还没到&#xff0c;ID要到第二阶段的消息1才会开始发送&#xff0c;彼此先用HASH来彼此验证对方&#xff09;

HASH认证成分——SKEYID_a&#xff0c;COOKIEA&#xff0c;COOKIEB&#xff0c;preshare_key&#xff0c;SA paload&#xff0c;转换集&#xff0c;策略。

在5&6消息中报错可能出现的原因
1&#xff0c;crypto isakmp key设置错了


接受者处理过程&#xff1a;
1、用skeyID_e对消息进行加密&#xff1b; 

2、用ID&#xff08;源IP&#xff09;查找出预共享密钥&#xff1b;

3、skeyID_a和preshare-key等一堆东西一起来计算HASH &#xff1b;

4、和收到的HASH做比较。


第二阶段(3条)

phase 2的目标是协商IPSEC SA&#xff0c;而且只有一种模式——
快速模式。快速模式的协商是受IKE SA保护的。

使用哪种IPSec协议&#xff1a;AH或ESP。

使用哪种hash算法&#xff1a;MD5或SHA。

使用什么模式&#xff1a;隧道还是传输。

是否要求加密&#xff0c;若是&#xff0c;选择加密算法&#xff1a;3DES或DES 

在上述前三个方面达成一致后&#xff0c;将建立起两个SA&#xff0c;分别用于入站和出站通信。


1&2消息

消息1——发送方发送一条报文&#xff0c;其中包含HASH&#xff0c;IPSEC策略提议&#xff0c;NONCE和可选的DH&#xff0c;身份ID&#xff1a;

HASH&#xff1a;是用于给接受方作完整性检查的&#xff0c;用于再次认证对等体(必须)。HASH的成分和5&#xff0d;6阶段一样。

IPSEC策略提议&#xff1a;其中包括了安全协议&#xff08;AH或者ESP&#xff09;&#xff0c;SPI&#xff0c;散列算法&#xff0c;隧道模式&#xff0c;IPSEC SA生命周期(必须)。

NONCE&#xff1a;用于防重放攻击&#xff0c;还被用作密码生成的材料。仅当启用PFS时用到。

ID&#xff1a;描述IPSEC SA是为哪些地址、协议和端口建立的。

PFS &#xff08;Perfect Forward Secrecy&#xff0c;利用DH交换&#xff0c;可选&#xff09;&#xff1a;用了PFS后&#xff0c;就会在第二阶段重新DH出个数据加密KEY。这个KEY和以前IKE协商出来的KEY没有任何关系&#xff0c;然后由这个新 KEY来加密数据。到这个IPSEC SA的生命周期后&#xff0c;会再次DH出新的KEY。这样&#xff0c;安全性就提高了&#xff08;普通等ipec SA过期或密钥超时时&#xff0c;重新生成的数据加密密钥还是根据一阶段DH出来的skeyID_d衍生出来的。PFS启用后&#xff0c;数据加密部分使用的密钥就没有了衍 生的过程&#xff09;。

DH&#xff1a;重新协商IPSEC SA时使用的密钥交换协议&#xff08;正常情况下IPSEC阶段使用的密钥都是由skeyID_d衍生而来&#xff0c;密钥之间都有一定的关系&#xff0c;就算IPSEC SA超时&#xff0c;新的KEY还是和skeyID_d有一定的关系&#xff09;。


安全联盟&#xff08;SA&#xff09;由一个三元组来唯一标识&#xff0c;这个三元组包括SPI(Security Parameter  Index&#xff0c;安全参数索引&#xff09;、目的IP 地址、安全协议号&#xff08;AH 或 ESP&#xff09;。SPI 是为唯一标识 SA 而生成的一个 32 比特的数值&#xff0c;它在AH 和 ESP 头中传输。

在1&2消息中报错可能出现的原因
1&#xff0c;ipsec trasport不匹配
2&#xff0c;感兴趣流不对称

消息2——使用相同的消息进行响应。

3消息


发送方发送第三条消息&#xff0c;其中包含一个HASH&#xff0c;其作用是确认接受方的消息以及证明发送方处于Active状态&#xff08;表示发送方的第一条消息不是伪造的&#xff0c;确认作用ACK)。


<实际数据加密密钥>   


在快速模式中&#xff0c;最后一条消息发送前&#xff0c;连接的两端必须用和DH相关的信息生成一个新的DH密钥&#xff0c;并用该密钥同SKEYID_d以及其他一些参数连接生成IPSec加解密密钥。
下面是步骤&#xff1a; 
发起者生成的密钥资源:   
1&#xff0c; 生成新的DH共享密钥&#61;(Xb&#39;) mod p  
2&#xff0c; 用于入口的IPSec SA 的IPSec会话密钥&#61;PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIr,Ni&#39;,Nr&#39;)  
3&#xff0c; 用于出口的IPSec SA 的IPSec会话密钥&#61;PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIi,Ni&#39;,Nr&#39;)   


响应者生成的密钥资源:   
1&#xff0c; 生成新的DH共享密钥&#61;(Xa&#39;) mod p  
2&#xff0c; 用于入口的IPSec SA 的IPSec会话密钥&#61;PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIi,Ni&#39;,Nr’)  
3&#xff0c; 用于出口的IPSec SA 的IPSec会话密钥&#61;PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIr,Ni&#39;,Nr’)


一些小的知识点和值得注意的地方   


1、对于1~4个包为明文内容&#xff0c;用UDP的500(isakmp)&#xff0c;以后的5~9个包都为加密内容&#xff0c;用UDP的4500(ipsec-nat-t)&#xff08;这里有些疑问&#xff0c;应该是主模式都是   用isakmp 500&#xff0c;积极模式使用ipsec-nat-t 4500&#xff1f;&#xff09;

2、第一阶段为了正确地生成密钥&#xff0c;每一个对等体必须找到与对方相应的预共享密钥&#xff0c;当有许多对等体要连接时&#xff0c;每一对对等体都要配置预共享密钥&#xff0c;这样就会有很多预共享密钥被配置。不过标志对等体IP地址或者主机名的负载直到下一条消息&#xff08;第二阶段消息1&#xff09;交换才会到来。因此&#xff0c;每一对对等体必须使用ISAKMP分组的源地址来找到与其对等体对应的预共享密钥。

3、 第二阶段的3个包主要用来协商用于加密用户数据的安全策略&#xff08;只有认证和加密方法和对应算法&#xff09;&#xff0c;当第二阶段协商完毕之后&#xff0c;第一阶段的策略将暂时不会被使用&#xff0c;直到有新的VPN连接建立时或IPSEC SA加密密钥超时时&#xff0c;才会用第一阶段的策略重新生成并传递新的加密数据和认证的密钥。  

4、 加密5-9消息的密钥SKEYID_e &#61; PRF(SKEYID, SKEYID_a| gab |CKY-i|CKY-r|2)  。

5、 真正加密数据的密钥&#xff1a;

  用于入口的IPSec SA 的IPSec会话密钥&#61;PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIr,Ni&#39;,Nr&#39;)  &#xff1b;

  用于出口的IPSec SA 的IPSec会话密钥&#61;PRF(SKEYID_d,portocol(ISAKMP),新的共享密  钥,SPIi,Ni&#39;,Nr&#39;)  &#xff1b;

6、 第一阶段配置的 加密算法是加密5-9个包的算法。不是用户数据的加密算法。  

7、 如果穿越的是路由&#xff0c;则在放行UDP 500号端口的基础之上&#xff0c;还需要放行UDP的4500号端口。 

8、如果穿越的是防火墙&#xff0c;刚在放行UDP 500号端口的基础之上&#xff0c;还需要放行ESP协议。

9、这个阶段要协商的SA是密钥交换协议最终要协商的IPSEC SA&#xff0c;当IKE为IPSec协商时可以称为IPSec SA&#xff0c;是保证AH或者ESP的安全通信。

  阶段2的安全由阶段1的协商结果来保证。阶段1所协商的一个SA可以用于协商多个阶段2的SA。第1个包协商IP sec SA的策略&#xff0c;建立IPsec的安全关联&#xff08;SA&#xff09;&#xff0c;在IKE SA协商进行认证的基础上&#xff0c;产生新的Key再次进行双方的认证。


IPSec流程实例

  为简单起见&#xff0c;我们假设这是一个Intranet例子&#xff0c;每台主机都有处于激活状态的IPSec策略&#xff1a;

  1&#xff0e;用户甲&#xff08;在主机A上&#xff09;向用户乙&#xff08;在主机B上&#xff09;发送一消息 
  2&#xff0e;主机A上的IPSec驱动程序检查IP筛选器&#xff0c;查看数据包是否需要受保护以及需要受到何种保护 
  3&#xff0e;驱动程序通知IKE开始安全协商 
  4&#xff0e;主机B上的IKE收到请求安全协商通知 
  5&#xff0e;两台主机建立第一阶段SA&#xff0c;各自生成共享"主密钥" 注&#xff1a;若两机在此前通信中已经建立起第一阶段SA&#xff0c;则可直接进行第二阶段SA协商 
  6&#xff0e;协商建立第二阶段SA对&#xff1a;入站SA和出站SA。SA包括密钥和SPI。 
  7&#xff0e;主机A上IPSec驱动程序使用出站SA对数据包进行签名&#xff08;完整性检查&#xff09;与/或加密。 
  8&#xff0e;驱动程序将数据包递交IP层&#xff0c;再由IP层将数据包转发至主机B 
  9&#xff0e;主机B网络适配器驱动程序收到数据包并提交给IPSec驱动程序。 
  10&#xff0e;主机B上的IPSec驱动程序使用入站SA检查完整性签名与/或对数据包进行解密。 
  11&#xff0e;驱动程序将解密后的数据包提交上层TCP/IP驱动程序&#xff0c;再由TCP/IP驱动程序将数据包提交主机B的接收应用程序。

  以上是IPSec的一个完整工作流程&#xff0c;虽然看起来很复杂&#xff0c;但所有操作对用户是完全透明的。中介路由器或转发器仅负责数据包的转发&#xff0c;如果中途遇到防火墙、安全路由器或代理服务器&#xff0c;则要求它们具有IP转发功能&#xff0c;以确保IPSec和IKE数据流不会遭拒绝。

  这里需要指出的一点是&#xff0c;使用IPSec保护的数据包不能通过网络地址译码NAT。因为IKE协商中所携带的IP地址是不能被NAT改变的&#xff0c;对地址的任何修改都会导致完整性检查失效。&#xff08;NAT穿越可以解决此问题&#xff09;

http://blog.csdn.net/wesleyhe/article/details/7223731

http://wenku.baidu.com/link?url&#61;VFi_OWi9lfrA_j1uzAF7bTB__eRAP8UqPfg0QvxBEGnycXHYm1C7rke0ELo9kE8E_fbDN_L2G30wujUJko86lVsg6BUf_rGR9W-MXth1j7y



推荐阅读
  • 无线认证设置故障排除方法及注意事项
    本文介绍了解决无线认证设置故障的方法和注意事项,包括检查无线路由器工作状态、关闭手机休眠状态下的网络设置、重启路由器、更改认证类型、恢复出厂设置和手机网络设置等。通过这些方法,可以解决无线认证设置可能出现的问题,确保无线网络正常连接和上网。同时,还提供了一些注意事项,以便用户在进行无线认证设置时能够正确操作。 ... [详细]
  • 本文详细介绍了华为4GLTE路由器B310的外置天线安装和设置方法。通过连接电源和网线,输入路由器的IP并登陆设置页面,选择手动设置和手动因特网设置,输入ISP提供商的用户名和密码,并设置MTU值。同时,还介绍了无线加密的设置方法。最后,将外网线连在路由器的WAN口即可使用。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 转自:微点阅读(www.weidianyuedu.com)微点阅读-范文大全-免费学习知识的网站电脑唯独搜不到自己家wifi,别人家的都能搜到,手机也可以搜到自己家的,就是电脑不可 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了安全性要求高的真正密码随机数生成器的概念和原理。首先解释了统计学意义上的伪随机数和真随机数的区别,以及伪随机数在密码学安全中的应用。然后讨论了真随机数的定义和产生方法,并指出了实际情况下真随机数的不可预测性和复杂性。最后介绍了随机数生成器的概念和方法。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • 解决浏览器打开网页后提示“dns_probe_possible 怎么解决”的方法
    在使用浏览器进行网上冲浪的时候遇到故障是一件很常见的事情,很多用户都遇到过系统提示:dns_probe_possible。从提示中可以看出和DNS是有一定的关系的,经过小编测试之后 ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
author-avatar
sbn3552505
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有