证书在手,认证无忧---证书浅析

2023-10-27

IPSec VPN篇章中,我们介绍了IPSec隧道两端设备使用证书进行身份认证的内容,在刚刚推出的SSL VPN开篇中,也介绍了证书认证的相关内容。作为网络世界的“身份证”,证书在身份认证的场景中已经得到了普遍应用。

大家可能已经习惯了用户名+密码的认证方式,而对证书这种认证方式还不太了解。为此,强叔带来了本篇内功心法,揭示证书的来龙去脉和使用方法,帮助大家提升内力。

根基 ---公钥密码学

在介绍证书之前,我们先来了解一些密码学的基本概念,包括对称密码学和非对称密码学,为理解证书的实现原理打好基础。

首先,一提到加密,我们自然会想到通信双方使用相同的算法和密钥去加密和解密数据。加密和解密过程中用到的密钥是双方都知道的,即双方的“共享密钥”。这种加密方式称为对称密码学,也叫做单钥密码学。

如下图所示,AB发送数据,A使用双方事先协商好的算法和密钥来加密数据,B使用相同的算法和密钥来解密数据。反之同理,BA发送数据时,B加密数据而A解密数据,双方使用的都是相同的算法和密钥。

注意:我们用“算法[密钥]”来表示使用该算法和密钥对数据进行加密或解密处理,下文中出现的类似表达方式含义相同。

 

对称密码学的优点是效率高,开销小,适合加密大量的数据。但对称密码学要求通信双方事先协商好密钥,这就要求在协商过程中必须做好保密,密钥只能让使用的人知道,不能泄露。另外,如果通信方数量庞大,比如A需要和数百个对象通信,为了安全起见,就需要在A上维护数百个不同的共享密钥,这就为密钥更新和管理带来诸多不便。

为了解决对称密码学面临的问题,公钥密码学横空出世,开创了密码学的新方向。公钥密码学使用了两个不同的密钥:一个可对外界公开,称为“公钥”;一个只有所有者知道,称为“私钥”。这一对密钥具有如下特点:

l  用公钥加密的信息只能用相应的私钥解密,反之用私钥加密的信息也只能用相应的公钥解密,即用其中任一个密钥加密的信息只能用另一个密钥进行解密。

l  要想由一个密钥推出另一个密钥,在计算上是不可能的。

由于公钥密码学使用了两个不同的密钥,所以属于非对称密码学,也称为双钥密码学。目前常用的公钥密码学算法有以下几种:

l  RSARivest, Shamir and Adleman),这个由三位发明者名字命名的算法是当前最著名、应用最广泛的公钥密码学算法。RSA可实现数据加解密、真实性验证和完整性验证

l  DSADigital Signature Algorithm),中文名称叫数字签名算法,可实现签名功能。本篇对DSA不做过多的介绍,大家可以自行查阅相关资料。

l  DHDiffie-Hellman),也是由发明者名字命名的一种密钥交换算法,通信双方通过一系列的数据交换,最终计算出密钥,以便用于以后的报文加密。在IPSec中就用到了DH算法,使得建立IPSec隧道的两端网关设备可以计算出密钥,而不必担心密钥泄露,我们在IPSec篇中对此进行过介绍。

数据加解密

下面我们就以RSA算法为例,介绍通信双方如何实现数据加解密功能。如下图所示,AB各自生成自己的公钥和私钥,并且相互交换了双方的公钥(至于双方是通过什么途径来交换公钥,我们先留个伏笔,后面会讲到)。A要向B发送数据,A使用B的公钥加密数据然后发送给BB收到后使用自己的私钥解密数据。因为其他人没有B的私钥,即使截获报文也无法解密,这就保证了数据传输的安全性。BA发送数据时,过程同理。

 

与对称密码学相比,公钥密码学加密数据的计算非常复杂,而且开销大、速度较慢,所以不适用于加密大量数据的场景。在实际使用中,通信双方通常会使用公钥密码学来交换密钥素材,双方最终计算出密钥,而用对称密码学来加密实际的数据,两者配合使用,保证了加密速度和安全性。

如下图所示,AB发送数据,A使用B的公钥把加密算法和密钥素材加密后发给BB收到后使用自己的私钥解密,这样就得到了算法和密钥素材(B也可以将自己要采用的算法和密钥素材发给A,即双方通过协商方式来确定算法和密钥素材),双方根据密钥素材计算出密钥。然后就可以通过对称密码学的机制,使用相同的算法和密钥对数据进行加密和解密。

 

 

真实性验证

除了加解密,RSA还能实现真实性验证,即身份认证功能,这也是利用了公钥密码学中由任一个密钥加密的信息只能用另一个密钥进行解密这一原理。

如下图所示,A要认证B的身份,首先AB发送数据(例如一串字符串),B用自己的私钥将数据加密,然后发送给AA用自己所持有的B的公钥解密,将解密后的数据和原始数据进行对比,如果一致,说明数据的确是由B发过来的。因为B的私钥只能由B持有,因此A可以通过判断对方是否持有私钥来判断对方是否就是B,进而实现了对B的身份认证,这就是使用公钥密码学来进行身份认证的理论基础。

 

加解密功能是数据发送方使用接收方的公钥加密,接收方使用自己的私钥解密。而身份认证功能是被认证方使用自己的私钥进行加密,认证方使用被认证方的公钥进行解密。

完整性验证

使用私钥加密公钥解密这种方式,还能实现完整性验证,即签名功能。所谓签名,就是在数据的后面再加上一段内容,可以证明数据没有被修改过,那怎么样生成签名呢?

发送方可以用自己的私钥加密数据,然后连同数据一起发给接收方。但是,由于公钥密码学计算复杂、速度慢的原因,通常发送方一般不直接使用私钥加密数据,而是先将原始数据经过某种计算得出一段较短的数据,然后发送方使用自己的私钥加密这段新的数据,这和直接加密原始数据的效果是一样的,而且还兼顾了安全和处理速度。这种计算方式是通过HASH密码学来实现的。

HASH密码学可以将任意长的字符串通过哈希计算出固定长度字符串,并且该计算是单向运算,无法逆推。最重要的是,原字符串任意字符的变化都会导致不同的计算结果HASH计算后得出的信息通常称为原字符串的摘要信息,也可以称为指纹信息。通过对比摘要信息,就可以判断数据是否被修改,所以HASH密码学通常用于保证数据的完整性。常见的HASH算法有MDMessage Digest algorithm)系列、SHASecure Hash Algorithm)系列等,之前在IPSec篇中我们也都配置过这些算法。

如下图所示,AB发送数据之前,先使用HASH算法将数据进行HASH计算,得出摘要信息。然后使用自己的私钥将摘要信息加密,形成签名,最后将数据和签名一并发给BB收到后,使用相同的HASH算法也对数据进行HASH计算,得到摘要信息;然后B使用A的公钥对签名进行解密,得到另一个摘要信息。B将两个摘要信息进行对比,如果两者一致,就说明数据确实是从A发过来的,并且没有被修改过,这样既验证了A的身份又实现了数据完整性保护。

注意:为了便于讲解,图中A发给B的信息没有加密,实际情况下,A会使用通过计算得出的密钥将信息加密后再发给BB使用相同的密钥解密后再进行处理。

 

我们花费了一些笔墨介绍公钥密码学的原理,相信大家对公钥密码学已经有了初步的了解。必须强调一点,公钥密码学能够保证安全的重要前提是私钥必须得到安全妥善的保存,不能被泄露。接下来我们便要解决前面留下的问题,即通信双方是通过什么途径来获取到对方的公钥。

通常情况下,通信双方在每次通信时都把自己的公钥发给对方,这是最直接的方法。但是这种方法存在安全问题,因为谁都可以生成公钥和私钥,仅凭一个公钥,我们无法判断收到的公钥到底是不是对方的。除非对方把公钥和身份信息同时发送过来,并且有绝对可信的第三方做**,证明这个公钥确实是发送方的。也就是说,通信双方就需要一个安全可信的载体来交换公钥,这个载体就是证书。

载体 ---证书

证书,也叫做数字证书,是网络世界中的“身份证”。证书将持有者的身份信息和公钥关联到一起,保证公钥确实是这个证书持有者的,通过证书就可以确认持有者的身份。证书由权威的、公正的、可信任的第三方机构颁发,我们把证书的颁发机构称为CACertificate Authority),相当于现实生活中的公安局。

证书属性

公钥是通过证书来向外界公开分发的,证书中必然会含有持有者的公钥信息。除此之外,证书中还包括哪些信息呢?下图展示了一个遵循X.509 v3版本规范的证书格式,我们简要介绍一下其中的关键信息。

 

l  签名算法:生成该证书的签名时所使用的HASH密码学算法和公钥密码学算法。

l  颁发者:谁颁发了这个证书,即CA的名称。

l  主题:该证书时颁发给谁的,即证书持有者的名称。

l  公钥信息:证书持有者的公钥信息。

l  签名:CA对该证书的签名,又叫做CA的指纹信息。

下图展示了证书中签名的形成过程,操作都是在证书颁发之前,也就是在CA上来进行的。首先,CA使用签名算法中的HASH密码学算法(如SHA1)生成证书的摘要信息,然后使用签名算法中的公钥密码学算法(如RSA),配合CA自己的私钥对摘要信息进行加密,最终形成签名。

 

证书颁发

通常情况下,为网络中的设备(PC、防火墙等)申请证书时,我们先要在设备上生成公私密钥对,然后将公钥以及设备信息提供给CACA根据这些信息来生成证书。当然,也可以由CA来帮助设备生成公私密钥对,并为设备生成证书。然后将CA生成的公私密钥对和证书导入到设备中,省去了设备自己生成公私密钥对的过程。

CA生成证书后,会把证书以文件的形式颁发给使用者。常见的证书存储格式如下表所示。

DER

二进制编码,后缀名.der/.cer/.crt

不包含私钥

PEM

BASE 64编码,后缀名.pem/.cer/.crt

不包含私钥

PKCS #12

PKCS编码,后缀名.p12

包含私钥

注意:公私密钥对必须成对出现才能保证公钥密钥学正常运转,所以如果CA同时为设备生成了公私密钥对和证书,就需要将公私密钥对(主要是其中的私钥)和证书同时颁发给设备,颁发时需要根据不同情况选择证书的存储格式。例如,颁发给PC时就要选择PKCS #12格式,将私钥和证书同时颁发;颁发给防火墙时,因为防火墙只支持DER/PEM格式,所以要选择DER/PEM,同时还必须将公私密钥对以单独文件的形式颁发给防火墙。

证书验证

证书颁发给使用者后,使用者就会拿着证书到处证明自己的身份。如果我们收到了一个这样的证书,怎么才能判断这个证书就是合法的,不是伪造的呢?还记得前面我们介绍过的HASH密码学吗,我们可以利用HASH密码学原理,通过证书中的签名来验证证书的真伪。

例如,A收到了B发过来的证书,想要验证这个证书的真伪,此时A首先需要获取到为B颁发证书的那个CA的公钥,用这个公钥解密证书中的签名,得到摘要信息;然后A使用证书中签名算法里面的HASH密码学算法对证书进行HASH计算,也得到一个摘要信息。A将两个摘要信息进行对比,如果两者一致,就说明证书确实是由这个CA颁发的(能用CA的公钥解密说明该CA确实持有私钥),并且没有被篡改过,该证书没有问题。当然,也会同时检查证书是否在有效期内。

到这里大家可能会有疑问,为A颁发证书的那个CA的公钥又该如何获取呢?答案还是证书,从CA的证书获取。也就是说,CA除了给别人颁发证书外,它本身也有自己的证书,证书中包含CA的公钥A使用CA的证书验证B的证书的过程如下图所示。

  

 

再进一步,如何判断为B颁发证书的这个CA的证书真伪以及是否被篡改过?答案是用CA自己的公钥来验证自己的签名,即用CA证书中的公钥解密该证书中的签名,得到摘要信息;然后使用CA证书中签名算法里面的HASH密码学算法对该证书进行HASH计算,得到另一个摘要信息,两者一致,说明该CA证书是真实的,没有被篡改过。 此时有一个新的问题,假设黑客伪造了CA证书,证书中的签名是黑客用自己的私钥来签名,而公钥就是黑客自己的公钥,那么对该CA证书的验证也能通过。所以上述验证过程的前提是CA证书必须是在可信任的机构获取的,保证没有被伪造。

如果通信双方要互相验证对方的证书,那就要分别获取到为对方颁发证书的CA的证书。如下图所示,A如果要验证B的证书,则A必须先获取为B颁发证书的CA的证书,用CA的证书验证B的证书;B如果要验证A的证书,则B必须先获取为A颁发证书的CA的证书,用CA的证书验证A的证书。如果AB是由同一个CA颁发的证书,那么两者获取到的CA的证书是相同的,如果AB是由两个不同的CA颁发的证书,那么两者获取到的CA的证书是不同的。

 

对于证书的使用方法,下面我们再进行一下总结:

1、通信双方各自持有自己的证书,当一方需要向另一方证明身份时,就把自己的证书发送过去。双方不用事先保存对方的证书,只在验证时接收对方发送过来的证书即可。

2、一方验证另一方证书的真伪时,必须事先获取到为另一方颁发证书的CA的证书,用这个CA证书来验证对方的证书。

注意:因为不同的CA会颁发不同证书,所以在证书的世界中,每个人可能会持有多个证书。同理,每个人也会获取到多个不同的CA证书。在这种情况下,一方收到另一方发过来的证书时,会根据证书中颁发者的名称,在自己的系统中查找对应的CA证书,找到后就用这个CA证书来验证。如果没有找到,那就说明事先没有获取到CA证书,也就无法判断对方发送过来的证书的真伪。

上面我们介绍了证书的很多内容,但还是有一个前提条件没有解决,那就是如何从CA获取证书?我们可以通过PKIPublic Key Infrastructure)框架来实现证书的生成、管理和维护,但是搭建一个PKI环境比较复杂。其实我们可以向网上的专业证书颁发机构申请证书,例如VerisignGeotrustGlobalsign等。

我们还可以利用平时常用的资源,搭建我们自己的CA环境。比如,常用的Windows Server操作系统就可以作为CA来颁发证书,具体的配置方法在网上都可以搜索到,此处不再赘述。这里强叔想为大家介绍一个开源的第三方证书管理软件XCA,通过这个软件来帮助设备生成公私密钥对,然后为设备生成并颁发证书。

下面我们就结合证书的具体应用,介绍XCA的使用方法。

应用 ---IPSec VPNSSL VPN

证书在IPSec中的应用

IPSec引入数字证书,身份认证简单便捷一篇中,我们已经介绍过了IPSec隧道两端网关设备使用证书进行身份认证的配置,在这里就不做过多介绍了。需要注意的是,当时两台网关设备是从同一个CA申请的证书,所以两台设备上安装的CA证书也是相同的;如果两台网关设备从不同的CA申请证书,那就需要在两台网关设备上分别安装为对方颁发证书的那个CA的证书。

证书在SSL VPN中的应用

远程接入IPSec现短板,SSL VPN登上历史舞台一篇中,我们分析了客户端和服务器(即防火墙设备)建立SSL连接的过程,其中包括了两个阶段:首先是客户端对服务器进行身份认证,然后是服务器对客户端进行身份认证。

下图展示了在SSL VPN连接建立过程中,不同类型的证书的安装和使用方法。由于客户端和服务器都是由XCA颁发的证书,所以两者获取到的CA的证书是相同的。另外,由于我们使用了XCA生成的证书替换了服务器内置的证书,所以还需要将XCA为服务器生成的公私密钥对导入到服务器中。

 

第一阶段:客户端验证服务器的身份

我们先来看一下第一个阶段。在这个阶段中,服务器将自己的证书发送给客户端,客户端需要用为服务器颁发证书的CA的证书来验证这个证书。但是,客户端在自己的系统上没有找到CA的证书,无法验证服务器证书的真伪,所以浏览器会提示警告框。

我们可以先忽略这个警告,等出现登录页面后,在页面左侧下载CA证书并安装到客户端的系统中,就可以验证服务器证书的真伪,后续客户端登录时就不会再出现警告框了。

可见,服务器向CA申请好证书后,将自己的证书连同CA的证书一块内置到系统中。当服务器需要被客户端验证时,就会将自己的证书发给客户端;同时,在登录页面上提供CA证书,供客户端下载使用。

当然,我们也可以替换掉服务器内置的证书,使用我们自己认可的CA,如XCA为服务器颁发新的证书。下面介绍如何使用XCA软件来生成CA证书和服务器的证书。

操作步骤如下:

1、从http://sourceforge.net/projects/xca/下载并安装XCA软件,具体过程略。

2、在“File”菜单中创建一个新的数据库,输入数据库的名字,然后设置该数据库的密码,使用这个数据库来保存密钥对和证书的信息。

3、在“Private  Keys”页签,生成CA的公私密钥对。

 

参考上述步骤,生成服务器的公私密钥对,密钥对的Name10.1.1.1,即用服务器的IP地址标识,其他参数不变。

4、在“Certificate”页签,生成CA的证书。


然后为该CA证书生成CRL,即设置该证书的有效期。

5、参考上述步骤,生成服务器的证书,与CA证书生成过程中有差异的参数取值如下表所示。

注意:服务器证书的CN字段取值必须与服务器IP地址一致的要求,否则在客户端上无法验证通过,所以我们这里将证书的名称设置为10.1.1.1

Source页签

Signing

Use this Certificate for signing: CA

Template for the new certificate

[default] HTTPS_server

Subject页签

Internal name

10.1.1.1

commonName

10.1.1.1

Private key

10.1.1.1 (RSA)

6PEM格式导出CA证书CA.crt和服务器证书10.1.1.1.crt,保存文件备用

 

 

7、导出服务器的公私密钥对10.1.1.1.pem,保存文件备用。为了保证密钥对的安全,导出时要设置密码。

 

8CA证书CA.crt发送至客户端,在客户端上双击CA.crt,按照提示将该证书存储到“受信任的根证书颁发机构”中

9、将服务器的公私密钥对文件10.1.1.1.pem上传至服务器,然后执行如下命令导入公私密钥对,password处输入导出时设置的密码。

注意:在SSL握手过程的第3次通信中,客户端会使用服务器的公钥将随机数pre-master-key加密后发给服务器,要求服务器上必须存在私钥才能解密。

[Server] pki import rsa-key-pair 10.1.1.1 pem 10.1.1.1.pem password huawei

10、在服务器上安装自己的证书10.1.1.1.crt

 

11、配置服务器使用10.1.1.1.crt来向客户端证明自己的身份。

 

完成上述操作后,当客户端访问服务器的登录页面时,就可以用XCACA证书来验证服务器发送过来的证书。由于服务器的证书也是由XCA颁发的,所以验证通过,浏览器不会提示警告框。

第二阶段:服务器验证客户端的身份

下面来看一下第二个阶段,即服务器使用证书方式对客户端进行身份认证的过程。在这个阶段中,客户端要向服务器发送自己的证书,服务器使用为客户端颁发证书的CA的证书来验证客户端的证书。下面我们就以服务器使用证书匿名认证方式认证客户端为例,介绍使用XCA软件为客户端生成证书的过程。

操作步骤如下(省略了与第一阶段相似的部分截图):

1、在“Private  Keys”页签,生成客户端的公私密钥对,密钥对的NameClient

2、在“Certificate”页签,按照下表中的参数取值,生成客户端的证书。

Source页签

Signing

Use this Certificate for signing: CA

Template for the new certificate

[default] HTTPS_client

Subject页签

Internal name

Client

commonName

Client

Private key

Client (RSA)

3、以PEM格式导出CA证书CA.crt,以PKCS #12格式导出客户端的证书Client.p12(因为PKCS #12格式的证书中包含了私钥,所以导出时需要设置密码),保存文件备用。

注意:本步骤中导出的CA证书要安装到服务器(防火墙)上,格式必须为PEMDER,而客户端证书要安装到客户端(PC)上,格式必须为PKCS #12

4、将客户端证书发送至客户端,在客户端上双击Client.p12,按照提示安装即可,安装过程中需要输入导出该证书时设置的密码。

安装 成功后,在Windows操作系统的MMC控制台中,可以看到客户端的证书,以及在第一阶段的步骤8中安装的CA证书。客户端证书中包含私钥,所以图标比CA证书的图标多了一个“钥匙”的标志,如下图所示。

 

5、在服务器上安装CA的证书CA.crt,该CA证书在第一阶段的步骤6中已经导出。

 

6、配置服务器使用CA.crt来验证客户端的身份。

 

完成上述操作后,客户端使用浏览器访问服务器的登录页面时,就可以在浏览器中选择自己的证书来进行身份认证,成功登录到服务器上。

至此,本篇的内容就全都介绍完毕,希望通过强叔的介绍,能够帮助大家明晰证书概念原理,掌握证书使用方法,更好地运用证书来进行身份认证。也请大家继续关注强叔侃墙,关注 SSL VPN 接下来的技术贴。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

证书在手,认证无忧---证书浅析 的相关文章

  • 证书在手,认证无忧---证书浅析

    在IPSec VPN篇章中 我们介绍了IPSec隧道两端设备使用证书进行身份认证的内容 在刚刚推出的SSL VPN开篇中 也介绍了证书认证的相关内容 作为网络世界的 身份证 证书在身份认证的场景中已经得到了普遍应用 大家可能已经习惯了用户名
  • (一)在ubuntu20.04安装VPN服务

    很多时候需要从世界各地来访问公司服务器 电脑 工厂设备 实现方式有很多种 主要分为VPN和内网穿透方式 但是他们俩都存在一些问题 例如内网穿透主要利用外网IP 端口映射内网IP地址 端口方式 需要在设备端 电脑端装软件 例如frp方式需要在
  • 如何在 Debian 9 上设置 OpenVPN 服务器

    无论您是想在连接不可信的公共 Wi Fi 网络时安全可靠地访问互联网 绕过地理限制内容还是允许您的同事在远程工作时安全地连接到您的公司网络 使用 VPN 都是最佳解决方案 VPN 允许您连接到远程 VPN 服务器 使您的连接加密且安全 并通
  • 记一次pptp实践经历

    由于公司业务需求 需要搭建vpn服务器以供外部用户传送数据 所以需要采用客户端到网关的方式的VPN VPN服务器的类型很多 如IPSec L2TP PPTP SSLVPN OPENVPN等 考虑到安全稳定性的因素 专业的vpn设备肯定是首要
  • 使用teamviewer搭建内网服务器。

    目录 起因 下载并安装teamviewer 服务器安装ccproxy 客户端使用SwitchyOmega 起因 学习的时候 学习视频必须使用校内的网络才能连接观看 校外无法观看 所以使用teamviewer和proxy搭建一个方便访问的服务
  • 锐捷防火墙(WEB)——VPN部署场景—VPN技术介绍

    目录 IPSec简介 应用场景 IPSEC VPN原理简介 数字证书原理简介 预共享密钥与数字证书的区别 主模式与野蛮模式的区别 SSL VPN简介 应用场景 SSL VPN原理简介 SSL VPN有三种工作模式 GRE简介 应用场景 功能
  • Kubernetes Pod 中的 OpenVPN 客户端

    我正在研究如何使 OpenVPN 客户端在 Pod 的容器上工作 我解释了我所做的事情 但是您可以跳过我的所有解释并直接提供您的解决方案 如果可行的话 我不在乎将以下所有内容替换为您的步骤 我想让我的容器以外部和内部网络都可以工作的方式使用
  • 用 C# 创建 VPN 客户端 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在研究不同的 VPN 它们似乎没有很好的加密 如默认的 Windows XP VPN 服务器 我想看看是否可以使用 C 创建自己的 但我不知道如何创建一个客户端来拦截所有数
  • 使用 Jenkins 部署到 VPN

    我的总体目标是自动部署到 VPN 中的服务器 目前的 VPN 是 Cisco AnyConnect 和 Barracuda 但如果有更通用的解决方案就更好了 我考虑过使用 Jenkins 但我发现的唯一相关资源是这个插件https wiki
  • 如何从 VBA 获取当前登录的 Active Directory 用户名?

    我是 Active Directory 新手 我有一个 VBA Excel 加载项 当且仅当运行该加载项的计算机当前登录到 Active Directory 无论是本地登录还是通过 VPN 时 该加载项才应运行 知道了域名 我如何检索当前登
  • Minikube服务访问本地VPN

    如何让我的 pod 或 minikube 能够查看我的笔记本电脑通过 VPN 连接到的 10 x 网络 设置 迷你库贝 PHP 容器 php 代码访问私有存储库 10 x 地址 东西可以在本地找到 但我无法在 Pod 中访问同一个 10 x
  • 将所有互联网流量从我的 Android VoIP 应用程序路由到我自己的 VPN 服务器

    我们已经设置了您自己的 VPN 服务器 并希望通过此服务器路由来自您的 VOIP android 应用程序的所有流量 但到目前为止我看到的所有解决方案都使用 vpn 服务类http developer android com referen
  • MSCHAPv2 与 RADIUS - 加密过程到底如何进行?

    我正在构建一个 RADIUS 服务器来与 node js 中的 MS CHAPv2 配合使用 我有一个 RADIUS 客户端 它是在访问请求中向我发送以下内容的 VPN 服务器 用户名 MS CHAP 挑战 MS CHAP2 响应 我使用实
  • 如何使用 Android 4.0 以编程方式创建新的 VPN 接口?

    我想知道是否可以使用 Android 4 0 中的新 VPN API 以编程方式创建 VPN 接口 我已经看过了http developer android com resources samples ToyVpn http develop
  • Android VpnService 保护 fd 如何工作?

    根据https developer android com reference android net VpnService html protect int https developer android com reference an
  • JNI 在应用程序中检测到错误:调用 JNI NewGlobalRef 时出现未决异常 java.lang.ClassNotFoundException:

    我正在开发 VPN 应用程序并遵循以下代码强天鹅 https github com vmlinz strongswan android应用程序 我已经使用了这个应用程序的代码并且它正在加载 so通过 JNI 文件 我已经从 Strongsw
  • 将进程附加到远程 PC 上正在运行的进程

    我正在开发一个 C 应用程序 该应用程序在远程 PC 上运行 我有 VPN 连接并使用 RDP 会话 我可以登录到该计算机 在那台计算机上 在正在运行的进程旁边 还有两个 msvsmon exe 进程 在任务管理器中具有以下 命令行 条目
  • PHP 脚本到 Traceroute?

    我有一个在 GoDaddy 共享 Linux 服务器上运行 PHP 的网站 我需要确定用户是否连接到公司 VPN 如果我简单地执行 SERVER REMOTE ADDR 它会给我客户端的 IP 地址 但是 如果我可以使用 Tracert 进
  • 在 Windows 7 上通过 VPN 使用时 Git 无响应

    这是关于通过 VPN 处理本地存储库时简单 git 命令无响应的问题 我的 Windows 用户帐户 管理员角色 是我用来登录的域帐户 我有一些从 github 源克隆的本地存储库 场景 1 在没有 VPN 的 Windows 上使用本地存
  • “建立安全 TLS 连接之前客户端网络套接字已断开”,节点 10

    当我向 google api 发送请求时 使用 axios 或仅使用 https 例如https www googleapis com blogger v3 blogs 2399953 key 我总是点击 在建立安全 TLS 连接之前 客户

随机推荐

  • PARL 强化学习框架学习

    最近参加了百度的的PARL深度强化学习课程 算是对强化学习有了一定了解 因为之前并没有学习过强化学习相关的知识 粗略入门 体验了PARL框架 确实对新手比较友好 入门学习了比较基础的算法 如SARSA Q Learning DQN PG D
  • Matlab 2020b 64bit

    Matlab 2020b 64bit 链接 https pan baidu com s 1PfAaWPGEzyXBBvYWe48Fng pwd kigc 提取码 kigc 来自百度网盘超级会员V7的分享
  • 数据结构之线性表(bsd, sys/queue.h)

    数据结构之线性表 Author Once Day Date 2023年5月27日 参考文档 Linux内嵌链表 sys queue h 详解 tissar的博客 CSDN博客 嵌入式大杂烩周记第 3 期 sys queue h 知乎 zhi
  • AIC(最小信息化准则)

    AIC信息准则 即Akaike information criterion 是用来衡量统计模型拟合优良性的一个标准 是是由日本统计学家赤池弘次创立和发展的 因此也称为赤池信息量准则 它建立在熵的概念基础上 可以权衡所估计模型的复杂度和模型拟
  • 去除vue顶部60px的空白

    问题 今天才注意到编译后的vue代码 在网站的顶部有一个margin top 60px的空白 有点不解 于是去看源码 代码 app font family Avenir Helvetica Arial sans serif webkit f
  • 概率统计21——指数分布和无记忆性

    指数分布 Exponential distribution 是一种连续型概率分布 可以用来表示独立随机事件发生的时间间隔的概率 比如婴儿出生的时间间隔 旅客进入机场的时间间隔 打进客服中心电话的时间间隔 系统出现bug的时间间隔等等 指数分
  • 给rhel9、centos-stream9 设置软件源

    我使用的是清华镜像源 https mirrors tuna tsinghua edu cn centos stream SIGs 9 stream 一 软件源添加 vim etc yum repos d CentOS Stream9 rep
  • typedef struct node的用法及与struct node的区别,为何要用typedef?

    typedef的作用是为已有的数据类型定义一个新名字 其主要目的是为了我们在使用时能用这个更加清晰简单的新名字 还有一个目的就是为了简化变量的声明 下面的几段代码具有相同的功能 都是用于链表结构体节点的定义和声明 第一种方式 struct
  • vue页面刷新或者后退参数丢失的问题

    在toB的项目中 会经常遇到列表数据筛选查询的情景 当要打开某一项的详情页或者暂时离开列表页 再返回 后退时 选择的筛选条件会全部丢失 辛辛苦苦选择好的条件全没了 还得重新选择 如果有分页的更头大 还得重新一页页翻到之前看到的那一页 用户体
  • 如何理解协方差矩阵(散布矩阵)

    这学期开了模式识别的学习课程 经常提到概率论与数理统计的一个概念 协方差矩阵 在模式识别中又叫散布矩阵 理解这个矩阵严格意义上来说其实不需要太多先导知识 我们只需要了解一些线性代数基本的概念 但是你如果不了解协方差矩阵 听模式识别的课程就会
  • 有深度的文章

    大家好 时隔半年 我将会继续更新推文 主发微信公众号 希望与大家一起交流学习 望大家多支持 你将在这里以最短的时间 获得最好的技术知识 图片是公众号二维码 谢谢大家
  • 第五章字符串总结

    5 1 String类 5 1 1 声明字符串 字符串是常量 它们可以显示任何文字信息 字符串的值在创建之后不能更改 在 Java 语言中 单引号中的内容表示字符 例如 s 而双引号中的内容则表示字符串 例如 我是字符串 123456789
  • vlc-android配置实录

    听说vlc底层也用的ffmpeg 免费开源的 业界做的不错的 就来看看 从网上找了很多例子 也从github上找了好多demo 好多都不全 或者下载下来编译失败 官网上下载的vlc android就编译失败 下面列两个可以用的 一 有vlc
  • JavaScript实现数组对应位置插入另一个数组

    系列文章目录 文章目录 系列文章目录 前言 一 使用循环遍历 二 使用concat和slice方法 三 使用splice方法 四 使用for循环 总结 前言 在JavaScript中 有时我们需要将一个数组的元素按照对应位置插入另一个数组中
  • Spring源码解析:BeanFactory深入理解

    现在一般都用ApplicantContext代替BeanFactory 说到Spring框架 人们往往大谈特谈一些似乎高逼格的东西 比如依赖注入 控制反转 面向切面等等 但是却忘记了最基本的一点 Spring的本质是一个bean工厂 bea
  • 使用思维导图快速了解 Eventbus

    详细源码解读可参考 Awsome Android
  • CentOS 上安装ClamAV

    安装epel yum y install epel release 安装ClamAV yum install y clamav clamav update 安装 yum load transaction tmp yum save tx 20
  • 医学图像分割:自动心脏诊断挑战赛项目数据集(ACDC)

    Local contrastive loss with pseudo label based self training for semi supervised medical image segmentation Krishna Chai
  • WSL2安装Docker

    推荐阅读知乎版 排版更好一点 WSL2安装Docker WSL2安装Docker比较简单 这里记录下 主要参考官方文章如下 Docker wsl2 1 确保已安装WSL2 首先确保你已经安装了WSL2 wsl l v 如果没有安装 请参考
  • 证书在手,认证无忧---证书浅析

    在IPSec VPN篇章中 我们介绍了IPSec隧道两端设备使用证书进行身份认证的内容 在刚刚推出的SSL VPN开篇中 也介绍了证书认证的相关内容 作为网络世界的 身份证 证书在身份认证的场景中已经得到了普遍应用 大家可能已经习惯了用户名