iOS開發之VPN協議(理論)

dengshuai_super發表於2016-07-10

July 10, 2016
作者:dengshuai_super
出處:http://blog.csdn.net/dengshuai_super/article/details/51872474
宣告:自由轉載,轉載請註明作者及出處。


1 概述

虛擬專用網(英語:Virtual Private Network,簡稱VPN),是一種常用於連線中、大型企業或團體與團體間的私人網路的通訊方法。虛擬私人網路的訊息透過公用的網路架構(例如:網際網路)來傳送內聯網的網路訊息。它利用已加密的通道協議(Tunneling Protocol)來達到保密、傳送端認證、訊息準確性等私人訊息安全效果。這種技術可以用不安全的網路(例如:網際網路)來傳送可靠、安全的訊息。需要注意的是,加密訊息與否是可以控制的。沒有加密的虛擬專用網訊息依然有被竊取的危險。

以日常生活的例子來比喻,虛擬專用網就像:甲公司某部門的A想寄信去乙公司某部門的B。A已知B的地址及部門,但公司與公司之間的信不能註明部門名稱。於是,A請自己的祕書把指定B所屬部門的信(A可以選擇是否以密碼與B通訊)放在寄去乙公司地址的大信封中。當乙公司的祕書收到從甲公司寄到乙公司的信件後,該祕書便會把放在該大信封內的指定部門信件以公司內部郵件方式寄給B。同樣地,B會以同樣的方式回信給A。

在以上例子中,A及B是身處不同公司(內部網路)的計算機(或相關機器),通過一般郵寄方式(公用網路)寄信給對方,再由對方的祕書(例如:支援虛擬專用網的路由器或防火牆)以公司內部信件(內部網路)的方式寄至對方本人。請注意,在虛擬專用網中,因應網路架構,祕書及收信人可以是同一人。許多現在的作業系統,例如Windows及Linux等因其所用傳輸協議,已有能力不用通過其它網路裝置便能達到虛擬專用網連線。--維基百科

iPhone上設定–>通用–>VPN–>新增VPN配置–>型別中,有四種協議:IKEV2,IPSec,L2TP和PPTP。


2.1 PPTP:

PPTP(Point to Point Tunneling Protocol),即點對點隧道協議。該協議是在PPP協議(點對點協議(Point to Point Protocol))的基礎上開發的一種新的增強型安全協議,支援多協議虛擬專用網(VPN),可以通過密碼驗證協議(PAP)、可擴充套件認證協議(EAP)等方法增強安全性。可以使遠端使用者通過撥入ISP、通過直接連線Internet或其他網路安全地訪問企業網。—百度百科

點對點隧道協議(英語:Point to Point Tunneling Protocol,縮寫為PPTP)是實現虛擬專用網(VPN)的方式之一。PPTP使用傳輸控制協議(TCP)建立控制通道來傳送控制命令,以及利用通用路由封裝(GRE)通道來封裝點對點協議(PPP)資料包以傳送資料。這個協議最早由微軟等廠商主導開發,但因為它的加密方式容易被破解,微軟已經不再建議使用這個協議。—維基百科

PPTP的協議規範本身並未描述加密或身份驗證的部分,它依靠點對點協議(PPP)來實現這些安全性功能。因為PPTP協議自帶在微軟視窗系統家族的各個產品中,在微軟點對點協議(PPP)協議堆疊中,提供了各種標準的身份驗證與加密機制來支援PPTP 。 在微軟視窗系統中,它可以搭配PAP、CHAP、MS-CHAP v1/v2或EAP-TLS來進行身份驗證。通常也可以搭配微軟點對點加密(MPPE)或IPSec的加密機制來提高安全性。—維基百科

這裡寫圖片描述


2.2 L2TP

第二層隧道協議(英語:Layer Two Tunneling Protocol,縮寫為L2TP)是一種虛擬隧道協議,通常用於虛擬專用網。L2TP協議自身不提供加密與可靠性驗證的功能,可以和安全協議搭配使用,從而實現資料的加密傳輸。經常與L2TP協議搭配的加密協議是IPsec,當這兩個協議搭配使用時,通常合稱L2TP/IPsec。

L2TP支援包括IP、ATM、幀中繼、X.25在內的多種網路。在IP網路中,L2TP協議使用註冊埠UDP 1701。[1]因此,在某種意義上,儘管L2TP協議的確是一個資料鏈路層協議,但在IP網路中,它又的確是一個會話層協議。—維基百科

L2TP是一種工業標準的Internet隧道協議,功能大致和PPTP協議類似,比如同樣可以對網路資料流進行加密。不過也有不同之處,比如PPTP要求網路為IP網路,L2TP要求面向資料包的點對點連線;PPTP使用單一隧道,L2TP使用多隧道;L2TP提供包頭壓縮、隧道驗證,而PPTP不支援。—百度百科

在VPN連線中要設定L2TP連線,方法同PPTPVPN設定,同樣是在VPN連線屬性視窗的“網路”選項卡中,將VPN型別設定為“L2TP IPSec VPN”即可。
第二層隧道協議(L2TP)是用來整合多協議撥號服務至現有的因特網服務提供商點。PPP 定義了多協議跨越第二層點對點連結的一個封裝機制。特別地,使用者通過使用眾多技術之一(如:撥號 POTS、ISDN、ADSL 等)獲得第二層連線到網路訪問伺服器(NAS),然後在此連線上執行 PPP。在這樣的配置中,第二層終端點和 PPP 會話終點處於相同的物理裝置中(如:NAS)。
L2TP 擴充套件了 PPP 模型,允許第二層和 PPP 終點處於不同的由包交換網路相互連線的裝置來。通過 L2TP,使用者在第二層連線到一個訪問集中器(如:調變解調器池、ADSL DSLAM 等),然後這個集中器將單獨得的 PPP 幀隧道到 NAS。這樣,可以把 PPP 包的實際處理過程與 L2 連線的終點分離開來。—百度百科

L2TP協議結構:
L2TP協議結構

L2TP直觀示意圖:
這裡寫圖片描述

2.2.1 與PPTP比較:

PPTP和L2TP都使用PPP協議對資料進行封裝,然後新增附加包頭用於資料在網際網路絡上的傳輸。盡
管兩個協議非常相似,但是仍存在以下幾方面的不同:

1.PPTP要求網際網路絡為IP網路。L2TP只要求隧道媒介提供面向資料包的點對點的連線。L2TP可以在IP(使用UDP),幀中繼永久虛擬電路(PVCs),X.25虛擬電路(VCs)或ATM VCs網路上使用。
2.PPTP只能在兩端點間建立單一隧道。L2TP支援在兩端點間使用多隧道。使用L2TP,使用者可以針對不同的服務質量建立不同的隧道。
3.L2TP可以提供包頭壓縮。當壓縮包頭時,系統開銷(overhead)佔用4個位元組,而PPTP協議下要佔用6個位元組。
4.L2TP可以提供隧道驗證,而PPTP則不支援隧道驗證。但是當L2TP或PPTP與IPSEC共同使用時,可以由IPSEC提供隧道驗證,不需要在第2層協議上驗證隧道
5.L2TP訪問集中器(L2TP Access Concentrator,LAC)是一種附屬在網路上的具有PPP端系統和L2Tpv2協議處理能力的裝置,它一般就是一個網路接入伺服器軟體,在遠端客戶端完成網路接入服務的功能。
6.L2TP網路伺服器(L2TP Network Server,LNS)是用於處理L2TP協議伺服器端的軟體。

L2TP支援的協議:
IP協議、IPX協議和NetBEUI協議


2.3 IPsec

網際網路安全協議(英語:Internet Protocol Security,縮寫為IPsec),是一個協議組合,透過對IP協議的分組進行加密和認證來保護IP協議的網路傳輸協議族(一些相互關聯的協議的集合)。

IPsec由兩大部分組成:(1)建立安全分組流的金鑰交換協議;(2)保護分組流的協議。前者為因特網金鑰交換(IKE)協議。後者包括加密分組流的封裝安全載荷協議(ESP協議)或認證頭協議(AH協議)協議,用於保證資料的機密性、來源可靠性(認證)、無連線的完整性並提供抗重播服務。

IPsec協議工作在OSI模型的第三層,使其在單獨使用時適於保護基於TCP或UDP的協議(如安全套接子層(SSL)就不能保護UDP層的通訊流)。這就意味著,與傳輸層或更高層的協議相比,IPsec協議必須處理可靠性和分片的問題,這同時也增加了它的複雜性和處理開銷。相對而言,SSL/TLS依靠更高層的TCP(OSI的第四層)來管理可靠性和分片。

2.3.1 IPsec做什麼?

IPsec通過使一個系統提供在IP層的安全服務來選擇所需的安全協議,確定演算法(多個)到用於服務(s)和到位的任何加密金鑰,以提供所請求的服務所需的。IPsec的可用於保護一對主機之間的一個或多個的“路徑”,一對之間的安全閘道器,或一個安全閘道器和一個主機之間。(該術語“安全閘道器”用於整個的IPsec檔案指的是實現IPsec協議的中間系統。對於例如,路由器或實施的IPsec防火牆是一個安全閘道器。)

一組安全服務的IPsec可以提供包括訪問控制,無連線的完整性,資料來源認證,拒絕播放包的(部分序列完整性的一種形式),保密性(加密)和有限的流量保密。因為在IP層提供這些服務,它們可通過任何更高層協議,例如,TCP,UDP,可使用的ICMP,BGP等

IPsec DOI也支援IP壓縮協商[ SMPT98 ],由部分動機觀察當使用加密功能,從而在IPsec的,它較低的協議阻止有效壓縮層。----維基百科

IPsec VPN
指採用IPSec協議來實現遠端接入的一種VPN技術,IPSec全稱為Internet Protocol Security,是由Internet Engineering Task Force (IETF) 定義的安全標準框架,用以提供公用和專用網路的端對端加密和驗證服務。

2.3.2 匯入協議原因

匯入IPSEC協議,原因有2個,一個是原來的TCP/IP體系中間,沒有包括基於安全的設計,任何人,只要能夠搭入線路,即可分析所有的通訊資料。IPSEC引進了完整的安全機制,包括加密、認證和資料防篡改功能。
另外一個原因,是因為Internet迅速發展,接入越來越方便,很多客戶希望能夠利用這種上網的頻寬,實現異地網路的的互連通。
IPSEC協議通過包封裝技術,能夠利用Internet可路由的地址,封裝內部網路的IP地址,實現異地網路的互通。

2.3.3 包封裝協議

設想現實一種通訊方式。假定發信和收信需要有身份證(成年人才有),兒童沒有身份證,不能發信收信。有2個兒童,小張和小李,他們的老爸是老張和老李。現在小張和小李要寫信互通,怎麼辦?
一種合理的實現方式是:小張寫好一封信,封皮寫上 “小張–>小李”, 然後給他爸爸,老張寫一個信封,寫上“老張–>老李”,把前面的那封信套在裡面,發給老李,老李收到信以後,開啟,發現這封信是給兒子的,就轉給小李了。小李回信也一樣,通過他父親的名義發回給小張。
這種通訊實現方式要依賴以下幾個因素:
* 老李和老張可以收信發信
* 小張發信,把信件交給老張。
* 老張收到兒子的來信以後,能夠正確的處理(寫好另外一個信封),並且重新包裝過的信封能夠正確送出去。
* 另外一端,老李收到信拆開以後,能夠正確地交給小李。
* 反過來的流程一樣。
把信封的收發人改成Internet上的IP地址,把信件的內容改成IP的資料,這個模型就是IPsec的包封裝模型。小張小李就是內部私網的IP主機,他們的老爸就是VPN閘道器,本來不能通訊的兩個異地的區域網,通過出口處的IP地址封裝,就可以實現區域網對區域網的通訊。
引進這種包封裝協議,實在是有點不得已。理想的組網方式,當然是全路由方式。(這裡注意理想的組網方式雖然是全路由方式,但VPN的應用也不會因全網而沒有用武之地,因為VPN的根本還是為了方便外網訪問內網)任意節點之間可達(就像理想的現實通訊方式是任何人之間都可以直接寫信互通一樣)。
Internet協議最初設計的時候,IP地址是32位,當時是很足夠了,沒有人能夠預料到將來Internet能夠發展到現在的規模(相同的例子發生在電信短訊息上面,由於160位元組的限制,很大地制約了短訊息的發展)。按照2的32次方計算,理論上最多能夠容納40億個左右IP地址。這些IP地址的利用是很不充分的,另外大約有70%左右的IP地址被美國分配掉了(誰讓人家發明並且管理Internet呢?)所以對於中國來說,可供分配的IP地址資源非常有限。
既然IP地址有限,又要實現異地lan-lan通訊,包封包,自然是最好的方式了。

2.3.4 安全協議

依然參照上述的通訊模型。
假定老張給老李的信件要通過郵政系統傳遞,而中間途徑有很多好事之徒,很想偷看小張和小李(小張小李作生意,通的是買賣資訊)通訊,或者破壞其好事。
解決這個問題,就要引進安全措施。安全可以讓小李和小張自己來完成,文字用暗號來表示,也可以讓他們的老爸代勞完成,寫好信,交給老爸,告訴他傳出去之前重新用暗號寫一下。
IPSEC協議的加密技術和這個方式是一樣的,既然能夠把資料封裝,自然也可以把資料變換,只要到達目的地的時候,能夠把資料恢復成原來的樣子就可以了。這個加密工作在Internet出口的VPN閘道器上完成。

資料認證
還是以上述通訊模型為例,僅僅有加密是不夠的。
把資料加密,對應這個模型中間,是把信件的文字用暗號表示。
好事之徒無法破解信件,但是可以偽造一封信,或者胡亂把信件改一通。這樣,信件到達目的地以後,內容就面目全非了,而且收信一方不知道這封信是被修改過的。
為了防止這種結果,就要引入資料防篡改機制。萬一資料被非法修改,能夠很快識別出來。這在現實通訊中間可以採用類似這樣的演算法,計算信件特徵(比如統計這封信件的筆劃、有多少字),然後把這些特徵用暗號標識在信件後面。收信人會檢驗這個信件特徵,由於信件改變,特徵也會變。所以,如果修改人沒有暗號,改了以後,資料特徵值就不匹配了。收信人可以看出來。
身份認證
還是假定小張小李通訊模型。
由於老張和老李不在一個地方,他們互相不能見面,為了保證他們兒子通訊的安全。老張和老李必須要相互確認對方是否可信。這就是身份認證問題。
假定老李老張以前見過面,他們事先就約定了通訊暗號,比如1234567890對應abcdefghij, 那麼寫個255,對應就是一個bee。
常見的VPN身份認證可以包括預共享金鑰,通訊雙方實現約定加密解密的密碼,直接通訊就可以了。能夠通訊就是朋友,不能通訊就是壞人,區分很簡單。
其他複雜的身份認證機制包括證照(電子證照比如x509之類的),比較羅裡囉嗦,這裡就不具體展開了,怕有兄弟看了打瞌睡。如果需要,可以找我要更具體的技術白皮書以及相關的身份認證文件。
如果有身份認證機制,金鑰的經常更換就成為了可能。


2.4 IKEv2

因特網金鑰交換(英語:Internet Key Exchange,簡稱IKE或IKEv2)是一種網路協議,歸屬於IPsec協議族之下,用以建立安全聯結(Security association,SA)[1]。它建立在奧克利協議(Oakley protocol)與ISAKMP協議的基礎之上[2]。使用X.509安全認證。

這裡寫圖片描述

V2和V1對比:
這裡寫圖片描述

在 IKEv1 裡,一般都需要 9 個包交換,除了 EZVPN VPN 預共享金鑰 6 個包除外。而在 IKEv2 裡,最少 4 個包就可以完成 VPN 建立了,因此就產生一對的 IPSEC SA 了。由此可以看出,IKEv2 更精簡了。但是事實並不是這樣啵,只是最小的情況下而已,但是如果要加其它的認證什麼的話,包的數量就會增加的。看環境而定。


2.5 iOS VPN

2.5.1 VPN概述

使用成熟的行業標準虛擬專用網路 (VPN) 協議,可在 iOS 和 OS X 中安全地訪問專用公司網路。iOS 和 OS X 原生支援 IKEv2、Cisco IPSec、IPSec 上的 L2TP 和 PPTP。如果您所在的組織支援上述某個協議,則無需額外的網路配置或第三方應用即可將 Apple 裝置連線至虛擬專用網路。

iOS 和 OS X 支援主流 VPN 提供商的 SSL VPN。與 iOS 和 OS X 支援的其他 VPN 協議一樣,SSL VPN 既可在 Apple 裝置上手動配置,也可以使用配置描述檔案或 MDM 解決方案進行配置。

iOS 和 OS X 也支援 IPv6、代理伺服器和隧道分離等技術,可在連線到組織網路時提供靈活的 VPN 體驗。iOS 和 OS X 還相容多種認證方式,包括密碼、雙因子令牌、數字證照以及用於 OS X 的 Kerberos。對於使用基於證照進行認證的環境,iOS 和 OS X 提供了“請求 VPN 域”功能來簡化連線過程,該功能會在需要時發起 VPN 會話來連線到特定域。有關更多資訊,請參閱本章的“請求 VPN 域”概覽小節。

通過 iOS 7 或更高版本以及 OS X Yosemite 或更高版本,可將每個應用配置為獨立於其他應用使用 VPN 連線。這樣可以確保公司資料始終通過 VPN 連線傳輸,而其他資料(例如員工從 App Store 獲得的個人應用)則不然。有關更多資訊,請參閱本參考的“為 App 單獨設定 VPN”小節。

iOS 還提供“始終開啟 VPN”,這要求 iOS 裝置在連線到任何其他網路服務前連線到經過批准的 VPN。您可以在被監督的裝置上為蜂窩行動網路和無線區域網連線配置“始終開啟 VPN”。若要實施此功能,您的 VPN 提供商必須支援“始終開啟 VPN”。有關資訊,請參閱本參考的“始終開啟 VPN”概覽小節。

2.5.2 支援的協議和認證方式

iOS 和 OS X 支援以下協議和認證方式:

IKEv2:支援 IPv4 和 IPv6 以及:

認證方式:共享金鑰、證照、EAP–TLS 和 EAP–MSCHAPv2

Suite B 密碼系統:ECDSA 證照、使用 GCM 的 ESP 加密以及針對 Diffie–Hellman 群組的 ECP 群組

附加功能:MOBIKE、IKE 碎片、伺服器重定向、分離隧道

IPSec 上的 L2TP:使用 MS–CHAP v2 密碼、雙因子令牌、證照進行使用者認證,使用共享金鑰或證照進行機器認證

SSL VPN:使用第三方 VPN 客戶端通過密碼、雙因子令牌和證照進行使用者認證

Cisco IPSec:使用密碼、雙因子令牌進行使用者認證,使用共享金鑰和證照進行機器認證

PPTP:使用 MS–CHAP v2 密碼、證照和雙因子令牌進行使用者認證

OS X 還可以通過共享金鑰或證照(通過“IPSec 上的 L2TP”和“PPTP”)使用 Kerberos 機器認證。

2.5.3 SSL VPN 客戶端

SSL VPN 客戶端

某些 SSL VPN 提供商建立了專門的應用,用來幫助配置 iOS 裝置,以便與他們的解決方案結合使用。要配置裝置以使用特定的解決方案,可從 App Store 安裝供應商的配套應用,也可以提供包含必要設定的配置描述檔案。

iOS 支援以下 SSL VPN 解決方案(可在 App Store 上獲取):

Aruba Networks SSL VPN:Aruba Networks Mobility Controller。若要配置,請安裝 Aruba Networks VIA 應用。

如需獲取聯絡資訊,請訪問 Aruba Networks 網站。

Check Point Mobile SSL VPN:包含完全第 3 層 VPN 隧道的 Check Point Security Gateway。安裝 Check Point Mobile 應用。

Cisco AnyConnect SSL VPN:執行建議的軟體版本 8.2.5 或更高版本的 Cisco Adaptive Security Appliance (ASA)。安裝 Cisco AnyConnect 應用。

F5 SSL VPN:F5 BIG–IP Edge Gateway、Access Policy Manager 和 FirePass SSL VPN 解決方案。安裝 F5 BIG–IP Edge Client 應用。

有關 F5 技術簡介的更多資訊,請參閱保護 iPhone 訪問公司 Web 應用程式時的安全。

OpenVPN SSL VPN:OpenVPN Access Server、Private Tunnel 和 OpenVPN Community。若要配置,請安裝 OpenVPN Connect 應用。

Palo Alto Networks GlobalProtect SSL VPN:Palo Alto Networks 的 GlobalProtect 閘道器。安裝 iOS 版 GlobalProtect 應用。

SonicWALL SSL VPN:10.5.4 或更高版本的 SonicWALL Aventall E–Class Secure Remote Access 裝置、5.5 或更高版本的 SonicWALL SRA 裝置,以及 SonicWALL Next–Generation Firewall 裝置(包括執行 SonicOS 5.8.1.0 或更高版本的 TZ、NSA 和 E–Class NSA)。安裝 SonicWALL Mobile Connect 應用。

有關更多資訊,請訪問 SonicWALL 網站。

AirWatch SSL VPN:有關資訊,請訪問 AirWatch 網站。

Pulse Secure SSL VPN:包含 Pulse Secure IVE package 7.0 或更高版本的 Pulse Secure SA Series SSL VPN Gateway 6.4 或更高版本。

有關更多資訊,請參閱 Pulse Secure 網站上的 Junos Pulse。

Mobile Iron SSL VPN:有關資訊,請訪問 Mobile Iron 網站。

NetMotion SSL VPN:有關資訊,請訪問 NetMotion 網站。

2.5.4 VPN 設定指南

2.5.4.1 代理設定

在進行所有這些配置時,可以指定 VPN 代理:

為所有連線配置單個代理:使用手動設定,提供地址、埠和認證(如有必要)。

使用 PAC 或 WPAD 為裝置提供自動代理配置檔案:使用自動設定。對於 PACS,請指定 PACS 或 JavaScript 檔案的 URL。對於 WPAD,iOS 會請求 DHCP 和 DNS 以進行適當的設定。

要使用 VPN 代理配置,VPN 應提供以下方面:

預設解析器和預設路由:VPN 代理可供系統上的所有 Web 請求使用。

分離隧道:只有連線到與 VPN 的 DNS 搜尋域相匹配的主機時才使用 VPN 代理。

2.5.4.2 證照

設定和安裝證照時:

伺服器身份證照的 SubjectAltName 欄必須包含伺服器的 DNS 名稱或 IP 地址。裝置使用此資訊來驗證證照是否屬於伺服器。為了獲得更高的靈活性,可以使用萬用字元來指定 SubjectAltName,以達到按名稱段匹配的目的,如 vpn.*.mycompany.com。如果未指定 SubjectAltName,則可以將 DNS 名稱放在“通用名稱”欄中。

為伺服器證照籤名的證照頒發機構 (CA) 的證照需要安裝在裝置上。如果該證照不是根證照,請安裝信任鏈的剩餘部分以便證照得到信任。如果使用客戶端證照,請確保為客戶端證照籤名的可信 CA 證照已安裝在 VPN 伺服器上。使用基於證照的認證時,請確保伺服器已設定為根據客戶端證照中的欄位來識別使用者的群組。

【重要事項】證照和 CA 必須有效(例如,可信且未過期)。不支援通過伺服器傳送整個證照信任鏈。

2.5.4.3 IKEv2 設定

以下是受支援的 IKEv2 功能及相應的配置描述檔案鍵。

認證方式
IKEv2 支援以下認證方式。使用 AuthenticationMethod 鍵指定認證級別:

共享金鑰:您建立的預置鍵。

證照:對於證照認證,LocalIdentifier 和 RemoteIdentifier 鍵常用於識別 iOS IKEv2 客戶端和 IKEv2 伺服器。

LocalIdentifier 鍵通常應匹配使用者/裝置證照的身份(SubjectAltName 或 Subject CommonName),因為伺服器實施策略可能要求其匹配以驗證客戶端的身份。

RemoteIdentifier 鍵應匹配伺服器證照的身份(SubjectAltName 或 Subject CommonName)。

【注】如果 RemoteIdentifier 與伺服器證照的身份不匹配,可以使用 ServerCertificateCommonName 鍵來指定伺服器證照的身份。

您還可以使用 ServerCertificateIssuerCommonName 鍵來指定伺服器 CA 的通用名稱。指定此鍵將觸發向伺服器傳送 IKEv2 CERTREQ,這是某些實施策略的要求。

EAP:EAP–MSCHAPv2、EAP–TLS 和 EAP–PEAP

您必須使用 ExtendedAuthEnabled 鍵來啟用 EAP:

指定 EAP–MSCHAPv2 的 AuthName 和 AuthPassword

指定 EAP–TLS 的使用者/裝置證照。EAP–TLS 需要 ServerCertificateIssuerCommonName 鍵

指定 EAP–PEAP 的 AuthName 和 AuthPassword 以及使用者/裝置證照

對於伺服器認證,您也可以使用 AuthenticationMethod 鍵來指定 IKEv2 的認證級別。

IKE 和 Child 提議
適用於 iOS 的 IKEv2 支援一個 IKE 提議和一個 Child 提議。每個提議允許指明一個加密演算法、一個完整性演算法以及一個 Diffie–Hellman 群組。伺服器配置必須允許客戶端 IKE 和 Child 提議。

IKE 和 Child 提議還允許指明客戶端發起的 IKE 和 Child 金鑰更新。此外,伺服器發起的金鑰更新獨立於客戶端發起的金鑰更新,而且可以在您的伺服器上配置。對於“始終開啟 VPN”,建議停用伺服器發起的金鑰更新。

失效對等體檢測
適用於 iOS 的 IKEv2 支援失效對等體檢測。伺服器失效對等體檢測獨立於客戶端失效對等體檢測,並且可以在您的伺服器上配置。對於“始終開啟 VPN”,建議停用伺服器失效對等體檢測。

分離隧道
適用於 iOS 的 IKEv2 支援分離隧道。預設情況下,伺服器通過 IKEv2 流量選擇器將分離隧道路由傳送到客戶端。如果伺服器實施策略需要 INTERNAL_IP4_SUBNET 和 INTERNAL_IP6_SUBNET 屬性來將路由傳送到客戶端,您可以使用 UseConfigurationAttributeInternalIPSubnet 鍵。

【注】IKEv2 不支援從伺服器分離 DNS。但是,iOS VPN 有效負載支援允許分離 DNS 的 DNS 字典。

MOBIKE、伺服器重定向和 PFS
適用於 iOS 的 IKEv2 支援 MOBIKE、伺服器重定向和完全正向保密 (PFS),所有這些都有預設值。要獲得這些選項的完整功能,需要伺服器支援和配置。

MOBIKE:預設啟用。使用 DisableMOBIKE 鍵來停用它。

伺服器重定向:預設啟用。使用 DisableRedirect 鍵來停用它。

PFS(需要 Child Diffie–Hellman 群組):預設停用。使用 EnablePFS 鍵來啟用它。

NAT Keepalive 負載轉移
適用於 iOS 的 IKEv2 支援針對“始終開啟 VPN”連線的 NAT Keepalive 負載轉移,且預設啟用。它可以在裝置處於睡眠狀態時將傳送 NAT Keepalive 到硬體的負載轉移。NATKeepAliveInterval 鍵用來控制 Keepalive 負載轉移的頻率,而 NATKeepAliveOffloadEnable 鍵用來啟用和停用此功能。此功能使裝置在睡眠期間仍保持“始終開啟 IKEv2”連線活躍。

2.5.4.4 Cisco IPSec 設定

參考本節來配置 Cisco VPN 伺服器,以便與 iOS 裝置配合使用。雖然 iOS 7.2 或更高版本支援 Cisco ASA 5500 Security Appliance 和 PIX 防火牆,但建議使用 iOS 8.0 或更高版本。iOS 還支援 IOS v12.4(15)T 或更高版本的 Cisco IOS VPN 路由器。VPN 3000 系列集中器不支援 iOS VPN 功能。

認證方式
iOS 支援以下認證方式:

預共享金鑰 IPSec 認證,通過 xauth 進行使用者認證。

利用客戶端和伺服器證照進行 IPSec 認證,可選擇通過 xauth 進行使用者認證。

混合認證,伺服器提供證照,客戶端提供預共享金鑰,進行 IPSec 認證。要求使用者認證(通過 xauth 提供),包括以下認證方式:

使用者名稱和密碼

RSA SecurID

CRYPTOCard

認證群組
Cisco Unity 協議根據一組常見引數,使用認證群組來分組使用者。應建立一個針對 iOS 使用者的認證群組。對於預共享金鑰認證和混合認證,群組名稱必須在裝置上配置,並且使用群組的共享金鑰(預共享金鑰)作為群組密碼。

使用證照認證時,沒有共享金鑰。使用者的群組根據證照中的欄位來確定。Cisco 伺服器設定可用於將證照中的欄位對應到使用者群組。

在 ISAKMP 優先順序列表中,RSA–Sig 必須擁有最高優先順序。

IPSec 設定和描述
您可以指定這些設定以定義 IPSec 的實施方式:

模式:隧道模式。

IKE 交換模式:“積極模式”(適用於預共享金鑰認證和混合認證)或“主模式”(適用於證照認證)。

加密演算法:3DES、AES–128 或 AES256。

認證演算法:HMAC–MD5 或 HMAC–SHA1。

Diffie–Hellman 群組:預共享金鑰認證和混合認證需要群組 2,證照認證需要配合 3DES 和 AES–128 使用群組 2,以及配合 AES–256 使用群組 2 或群組 5。

完全正向保密 (PFS):對於 IKE 階段 2,如果使用 PFS,則 Diffie–Hellman 群組必須與用於 IKE 階段 1 的群組相同。

模式配置:必須啟用。

失效對等體檢測:推薦。

標準 NAT 遍歷:受支援並且可以啟用(不支援 IPSec over TCP)。

負載均衡:受支援且可以啟用。

階段 1 的金鑰更新:當前不受支援。建議將伺服器上的金鑰更新時間設定為一小時。

ASA 地址掩碼:確保所有裝置地址池掩碼都未設定或都設定為 255.255.255.255。例如:

asa(config-webvpn)# ip local pool vpn_users 10.0.0.1-10.0.0.254 mask 255.255.255.255。

如果使用建議的地址掩碼,則可能會忽略 VPN 配置所採用的某些路由。若要避免發生這種情況,請確保路由表包含所有必要的路由,並且驗證子網地址可以訪問,然後再進行部署。

應用程式版本:客戶端軟體版本會被髮送到伺服器,使伺服器能夠根據裝置的軟體版本接受或拒絕連線。

橫幅:橫幅(如果是在伺服器上配置的)會顯示在裝置上,使用者必須接受它,否則會斷開連線。

分離隧道:支援。

分離 DNS:支援。

預設域:支援。

2.5.5 為 App 單獨設定 VPN

在 iOS 和 OS X 中,VPN 連線可以基於每個應用建立,從而可以更精確地控制哪些資料可以通過 VPN 進行傳輸。而採用裝置級 VPN 時,任何客戶端程式均有可能通過隧道提供的路由傳輸流量。這種在應用級別分離通訊的功能可將個人資料從組織資料分離。因此,“為 App 單獨設定 VPN”可為內部使用的應用提供安全網路,同時保護個人裝置活動的隱私。

通過“為 App 單獨設定 VPN”,可使每個處於移動裝置管理 (MDM) 範圍內的應用使用安全隧道與專用網路通訊,同時禁止未處於管理範圍內的應用使用專用網路。對於處於管理範圍內的每個應用,可以配置不同的 VPN 連線以進一步保護資料安全。例如,銷售報價應用可使用完全不同於應付帳款應用的資料中心。

要使用“為 App 單獨設定 VPN”,應用必須由 MDM 管理並使用標準聯網 API。為任意 VPN 連線啟用“為 App 單獨設定 VPN”後,您需要將該連線與使用該連線的應用進行關聯,以確保這些應用的網路流量的安全性。該過程使用配置描述檔案中的“為 App 單獨設定 VPN”對映有效負載來完成。

在 iOS 9 或更高版本中,“為 App 單獨設定 VPN”可以配置為與 iOS 上內建的 VPN 客戶端配合使用,支援 IPSec (IKEv1) 和 IKEv2 VPN 客戶端。

IKEv2 受 IPSec 客戶端支援。有關“為 App 單獨設定 VPN”支援的資訊,請聯絡第三方 SSL 或 VPN 供應商。

2.5.6 請求VPN域

2.5.6.1 概述

“請求 VPN 域”可使 Apple 裝置在需要時自動建立連線。它要求基於證照的認證,且不論使用何種協議均適用。

“請求 VPN 域”通過配置描述檔案的 VPN 有效負載中的 OnDemandRules 鍵配置。系統分兩個階段應用規則:

網路檢測階段:定義當裝置的主要網路連線發生更改時適用的 VPN 要求。

連線計算階段:定義根據需要向域名發起連線請求時的 VPN 要求。

規則可以用來執行以下操作:

識別因 Apple 裝置連線至內部網路而不需要 VPN 的情況

識別因使用未知無線區域網路而需要對所有網路活動採取 VPN 的情況

在針對指定域名的 DNS 請求失敗後要求使用 VPN

2.5.6.2 階段

“請求 VPN 域”通過兩個階段連線到網路。

網路檢測階段
當裝置的主要網路介面發生變化時,例如當 Apple 裝置切換至不同的無線區域網路或者從無線區域網切換至 iOS 上的蜂窩行動網路或 OS X 上的乙太網時,將對“請求 VPN 域”規則進行計算。如果主要介面為虛擬介面(例如,VPN 介面),將忽略“請求 VPN 域”規則。

只有當每個組(字典)中的匹配規則全部匹配時,才會執行關聯的操作。如果任意一項規則不匹配,將對列表中的下一個字典進行計算,直至抵達 OnDemandRules 列表末尾。

最後一個字典應定義預設配置,即沒有匹配的規則,只有操作。這會找出沒有與之前的規則匹配的所有連線。

連線計算階段
VPN 可基於對某些域的連線請求按需觸發,而不是基於網路介面單方面斷開或連線。

2.5.6.3 規則和操作

規則幫助定義與“請求 VPN 域”相關聯的網路型別。操作幫助定義在匹配規則為真時,所執行的操作。

請求匹配規則
為所有 SSL、IKEv2 和 Cisco IPSec 客戶端指定以下一個或多個匹配規則:

InterfaceTypeMatch:可選。“蜂窩行動網路(對於 iOS)或乙太網(對於 OS X)”或“無線區域網”的字串值。如果指定此規則,則當主要介面硬體為指定的型別時,即與此規則匹配。

SSIDMatch:可選。要基於當前網路匹配的 SSID 列表。如果網路不是無線區域網路,或者其 SSID 未顯示在列表中,則匹配失敗。如果省略此鍵及其列表,將忽略 SSID。

DNSDomainMatch:可選。搜尋域字串列表。如果為當前主要網路配置的 DNS 搜尋域包括在此列表中,將與此屬性匹配。支援萬用字元字首 ();例如 .example.com 將與 anything.example.com 匹配。

DNSServerAddressMatch:可選。DNS 伺服器地址字串列表。如果當前為主要介面配置的所有 DNS 伺服器地址都位於列表中,則將與此屬性匹配。支援萬用字元 ();例如 1.2.3. 將匹配字首為 1.2.3. 的任何 DNS 伺服器。

URLStringProbe:可選。要探查其可訪問性的伺服器。不支援重定向。URL 應當為可信的 HTTPS 伺服器。裝置會傳送 GET 請求來驗證是否可以訪問該伺服器。

Action
此必選鍵定義當指定的所有匹配規則都計算為真時的 VPN 行為。Action 鍵的值包括:

Connect:在下一次嘗試建立網路連線時無條件啟動 VPN 連線。

Disconnect:斷開 VPN 連線,不按需觸發任何新的連線。

Ignore:保留任何現有的 VPN 連線,但不按需觸發任何新的連線。

EvaluateConnection:對每次連線嘗試計算 ActionParameters。使用此值時,需要通過鍵 ActionParameters(見下文)指定計算規則。

Allow:對於執行 iOS 6 或更低版本的 iOS 裝置,請參閱本參考的“向後相容性”小節。

ActionParameters
這是一組字典,包含了以下描述的鍵,按照鍵的顯示順序計算。當 Action 為 EvaluateConnection 時,此為必選鍵。

Domains:必選。定義此計算規則適用的域的字串列表。支援萬用字元字首,例如 *.example.com。

DomainAction:必選。定義 Domains 的 VPN 行為。DomainAction 鍵的值包括:

ConnectIfNeeded:如果對 Domains 的 DNS 解析失敗,將觸發 VPN。例如,DNS 伺服器指示其不能解析域名、DNS 響應遭到重定向或者連線失敗或超時。

NeverConnect:不對 Domains 觸發 VPN。

當 DomainAction 為 ConnectIfNeeded 時,還可以在連線計算字典中指定以下鍵:

RequiredDNSServers:可選。要用於解析 Domains 的 DNS 伺服器的 IP 地址列表。這些伺服器不必是裝置當前網路配置的一部分。如果無法訪問這些 DNS 伺服器,則會觸發 VPN。對於一致的連線,請配置內部 DNS 伺服器或可信的外部 DNS 伺服器。

RequiredURLStringProbe:可選。要使用 GET 請求探查的 HTTP 或 HTTPS(首選)URL。如果對此伺服器的 DNS 解析成功,則探查也一定會成功。如果探查失敗,將觸發 VPN。

2.5.6.4 向後相容性

在 iOS 7 之前,域觸發規則從域的列表中進行配置:

OnDemandMatchDomainAlways

OnDemandMatchDomainOnRetry

OnDemandMatchDomainNever

iOS 7 或更高版本仍然支援 OnRetry 和 Never 情形,但更傾向於 EvaluateConnection 操作。

要建立同時適用於 iOS 7 和更早版本的描述檔案,除了使用 OnDemandMatchDomain 列表外,還要使用新的 EvaluateConnection 鍵。

指定 Allow 操作的舊配置描述檔案仍適用於 iOS 7 或更高版本,但 OnDemandMatchDomainsAlways 域除外。

2.5.7 始終開啟VPN

2.5.6.1 概述

“始終開啟 VPN”可讓您的組織將所有 IP 流量通過隧道返回到組織,從而讓組織完全控制裝置流量。預設隧道協議 IKEv2 通過資料加密保護流量傳輸安全。您的組織現在可以監控和過濾經由裝置的流量、保護網路內的資料安全並限制裝置訪問網際網路。

“始終開啟 VPN”啟用需要裝置監督。“始終開啟 VPN”描述檔案安裝到裝置上後,“始終開啟 VPN”將自動啟用,無需任何使用者互動,並且會保持啟用狀態(包括在重新啟動過程中),除非解除安裝“始終開啟 VPN”描述檔案。

裝置上的“始終開啟 VPN”處於啟用狀態時,VPN 隧道的初啟和清除與介面 IP 狀態有關。當介面可訪問 IP 網路後,則會嘗試建立隧道。當介面 IP 狀態不可用時,隧道會清除。

“始終開啟 VPN”也支援每個介面隧道。對於 iOS 裝置,每一個活躍的 IP 介面都有一個隧道(蜂窩行動網路介面和無線區域網介面各有一個隧道)。只要 VPN 隧道可用,所有的 IP 流量均會經過隧道。流量包括所有 IP 路由流量和所有 IP 範圍流量(來自於第一方應用如 FaceTime 和“資訊”的流量)。如果隧道不可用,則會丟棄所有 IP 流量。

裝置的所有隧道流量會經過 VPN 伺服器。您可以先應用可選過濾和監視處理,然後將流量轉移到組織網路或網際網路中的目的位置。同樣地,可以將裝置流量傳送到組織的 VPN 伺服器,而過濾和監視程式可能會在轉移到裝置前進行應用。

2.5.6.2 配置

iOS 裝置以單使用者模式執行。裝置身份和使用者身份聯絡在一起。當 iOS 裝置建立到 IKEv2 伺服器的 IKEv2 隧道時,該伺服器會將 iOS 裝置識別為單個對等實體。通常,在一臺 iOS 裝置和一臺 VPN 伺服器之間會有一個隧道。由於“始終開啟 VPN”採用的是每個介面隧道,因此單個 iOS 裝置和 IKEv2 伺服器之間可同時建立多個隧道。

“始終開啟 VPN”配置支援以下兩種配置:

僅支援蜂窩行動網路的裝置
如果您的組織選擇在僅支援蜂窩行動網路的 iOS 裝置上部署“始終開啟 VPN”(此時無線區域網介面永久性退出或不啟用),則會在每臺裝置和 IKEv2 伺服器之間通過蜂窩行動網路 IP 介面建立一個 IKEv2 隧道。這與傳統 VPN 模型中類似。iOS 裝置充當一個 IKEv2 客戶端,擁有一個身份(例如,一個客戶端證照或一個使用者和密碼),可使用 IKEv2 伺服器建立 IKEv2 隧道。

蜂窩行動網路裝置和無線區域網裝置
如果您的組織在同時包含蜂窩行動網路和無線區域網介面的 iOS 裝置上部署“始終開啟 VPN”,裝置會同時建立兩個 IKEv2 隧道。使用可通過蜂窩行動網路和無線區域網兩者連線的裝置有以下兩個場景:

蜂窩行動網路隧道和無線區域網隧道在不同的 IKEv2 伺服器上終止。

憑藉“始終開啟 VPN”每個介面隧道配置鍵,組織可以對裝置進行配置,以建立到一臺 IKEv2 伺服器的蜂窩行動網路隧道和到第二臺 IKEv2 伺服器的無線區域網隧道。此模型有一個好處,因為隧道在不同的伺服器上終止,裝置可以對兩個隧道使用相同的客戶端身份(即客戶端證照或使用者/密碼)。藉助不同的伺服器,組織也可在每個介面型別流量(蜂窩行動網路流量對無線區域網流量)的隔離和控制方面擁有更大的靈活性。不足之處在於組織必須擁有客戶端認證策略相同的兩臺不同 IKEv2 伺服器。

蜂窩行動網路隧道和無線區域網隧道在相同的 IKEv2 伺服器上終止。

憑藉“始終開啟 VPN”每個介面隧道配置,組織還可以對裝置進行配置,以建立到同一臺 IKEv2 伺服器的蜂窩行動網路隧道和無線區域網隧道。

每臺裝置有一個客戶端身份:如果 IKEv2 伺服器支援每個客戶端有多個隧道,那麼組織就可為蜂窩行動網路隧道和無線區域網隧道配置相同的客戶端身份(即一個客戶端證照或一個使用者/密碼對)。好處是可以避免為每臺裝置配置其他的客戶端身份,以減輕伺服器上的額外配置/資源負擔。不足之處在於因為裝置不斷進出網路,會建立新的隧道,而舊的隧道會逐漸失效。基於伺服器的實施策略,伺服器可能無法高效、準確地清理失效的隧道。組織必須實施策略來清理伺服器上的失效隧道。

每臺裝置有兩個客戶端身份:組織可以配置兩個客戶端身份(即兩個客戶端證照或兩對使用者/密碼),一個用於蜂窩行動網路隧道,一個用於無線區域網隧道。IKEv2 伺服器會看到建立了自己隧道的兩個不同客戶端。此模型的好處是,由於許多伺服器通過其客戶端身份區分隧道且僅允許一個客戶端有一個隧道,所以它適用於大多數伺服器實現策略。不足之處在於,此模型需要請求兩次伺服器上的客戶端身份、配置和資源管理。

2.5.6.3 配置描述檔案

“始終開啟 VPN”配置描述檔案可以通過使用一種 Apple 配置描述檔案編輯器(如“描述檔案管理器”或 Apple Configurator 2)來手動組成,或使用 MDM 解決方案來建立。有關更多資訊,請參閱“描述檔案管理器幫助”或“Apple Configurator 2 幫助”,或聯絡您的首選 MDM 供應商。

使用者互動鍵
若要防止使用者停用“始終開啟 VPN”功能,可禁止刪除“始終開啟 VPN”描述檔案,方法是將頂層的描述檔案鍵“PayloadRemovalDisallowed”設為“true”。

若要防止使用者安裝其他配置描述檔案來更改“始終開啟 VPN”功能的行為,可禁止安裝 UI 描述檔案。方法是,將“com.apple.applicationaccess”有效負載下方的“allowUIConfigurationProfileInstallation”鍵設為“false”。組織可使用相同有效負載下方的其他支援鍵來實施其他限制。

證照有效負載
證照頒發機構 (CA) 是伺服器證照的頒發者。

伺服器 CA 證照:如果 IKEv2 隧道的認證方式使用證照,則 IKEv2 伺服器會將其伺服器證照傳送到 iOS 裝置,以驗證伺服器身份。為了讓 iOS 裝置驗證伺服器證照,需要伺服器的 CA 證照,該證照可能已經安裝。若未安裝,您的組織可以為伺服器 CA 證照建立證照有效負載來包括該證照。

客戶端 CA 證照:如果 IKEv2 隧道的認證方式使用證照或 EAP–TLS,則 iOS 裝置會將其客戶端證照傳送到 IKEv2 伺服器,以驗證客戶端身份。客戶端可能有一個或兩個客戶端證照,這取決於部署模型。組織需要為客戶端證照建立證照有效負載,才能包括客戶端證照。為了讓 IKEv2 伺服器驗證客戶端身份,IKEv2 伺服器必須已安裝客戶端的 CA 證照。

“始終開啟 VPN”IKEv2 證照支援:目前“始終開啟 VPN”IKEv2 僅支援 RSA 證照。

2.5.6.4 有效負載

以下適用於“始終開啟 VPN”有效負載:

只能在被監督的 iOS 裝置上安裝。

配置描述檔案只能包含一個“始終開啟 VPN”有效負載。

一次只能在 iOS 裝置上安裝一個“始終開啟 VPN”配置描述檔案。

在 iOS 中自動連線
“始終開啟 VPN”提供可選“UIToggleEnabled”鍵,以便在 VPN 設定中啟用自動連線開關。如果此鍵未在描述檔案中指定或被設為 0,“始終開啟 VPN”會嘗試觸發一個或兩個 VPN 隧道。如果此鍵被設為 1,則 VPN“設定”皮膚中會顯示開關,這樣使用者就可以開啟或關閉 VPN。如果使用者關閉 VPN 隧道,系統將不會建立隧道,裝置會丟棄所有的 IP 流量。這在無法訪問 IP 且使用者仍想撥打電話時很有用。使用者可關閉 VPN 隧道以避免意外觸發 VPN 隧道。

每個介面隧道配置列表
“TunnelConfigurations”列表中至少需要一個隧道配置。該配置可應用於蜂窩行動網路介面(針對僅支援蜂窩行動網路的裝置),或應用於蜂窩行動網路和無線區域網介面。但是,可以包括兩個隧道配置(一個用於蜂窩行動網路介面,一個用於無線區域網介面)。

強制流量例外
“始終開啟 VPN”僅支援強制自動登入(自動登入到受支援的強制網路,該網路帶有預分配的憑證,例如來自 SIM 的憑證)。

“始終開啟 VPN”也支援對強制處理的控制,支援以下內容:

AllowCaptiveWebSheet:允許內建的強制 WebSheet(網路表單)應用中的流量從隧道外通過的鍵。WebSheet(網路表單)應用是一個瀏覽器,可在無其他第三方強制應用存在的情況下,處理強制登入。在使用此鍵時,組織應注意其存在的安全風險,因為 WebSheet(網路表單)是功能瀏覽器,能夠渲染來自於響應的強制伺服器的任何內容。允許 WebSheet(網路表單)應用流量會使裝置受到不良行為或惡意強制伺服器的攻擊。

AllowAllCaptiveNetworkPlugins:允許所有滿足條件的第三方強制應用的流量從隧道外通過的鍵。此鍵優先於 AllowedCaptiveNetworkPlugins 字典。

AllowedCaptiveNetworkPlugins:滿足條件的第三方強制應用的捆綁包 ID 列表。允許來自第三方強制應用的流量從隧道外通過。如果還配置了 AllowAllCaptiveNetworkPlugins 鍵,則此列表不適用。

服務例外
“始終開啟 VPN”預設所有 IP 流量通過隧道,包括所有本地流量和蜂窩行動網路運營商服務的流量。因此,預設的“始終開啟 VPN”行為不支援任何本地 IP 服務或 IP 運營商服務。“始終開啟 VPN”的“服務例外”可讓您的組織更改對服務流量的預設處理方法:允許流量從隧道外通過或丟棄流量。當前支援的服務例外為“語音信箱”和“AirPrint”,其允許的操作是允許(允許資料從隧道外通過)或丟棄(不論隧道設定,直接丟棄)。

有關“始終開啟 VPN”IKEv2 協議鍵和屬性的更多資訊,請參閱 Developer Library(開發者資源庫)網站上的《Configuration Profile Key Reference》(配置描述檔案鍵參考)。


2.6 配置VPN三個類:NEVPNProtocol,NEVPNManager,NEVPNConnection

2.6.1 NEVPNProtocol

該NEVPNProtocol類是一個抽象基類,一個子類為每種型別支援的隧道協議。

這個類的例項是執行緒安全的。

通用隧道協議屬性:

VAR serverAddress :String?
隧道伺服器的地址

VAR 使用者名稱:String?
隧道協議認證證照的使用者名稱組成部分。

VAR passwordReference :Data?
永續性鑰匙扣參閱包含隧道協議認證證照的密碼組成一個鑰匙串專案。

VAR 的IdentityReference :Data?
永續性鑰匙扣參閱包含證照和隧道協議認證證照的私鑰元件的鑰匙串項。

VAR identityData :Data?
證照和隧道協議認證證照的私鑰部件,PKCS12格式編碼。

VAR identityDataPassword :String?
密碼被用於解密PKCS12資料中所設定的identityData屬性。

VAR disconnectOnSleep :BOOL
當裝置休眠表示如果VPN的標誌應斷開。

VAR proxySettings :NEProxySettings?
一個NEProxySettings物件含有待用於HTTP代理設定和HTTPS它們通過VPN路由連線。

2.6.2 NEVPNManager

NEVPNManager用於建立和管理VPN的配置和控制所得VPN隧道連線。

每個應用程式被允許建立一個單一的VPN配置。該NEVPNManager類有一個類方法(NEVPNManager),提供訪問單個NEVPNManager例項。這個單一例項對應一個VPN配置,顯示在iOS和網路首選項設定應用的VPN設定皮膚窗格在OS X系統預置的應用程式

由建立的VPN配置NEVPNManager例項被歸類為個人VPN配置。在iOS和Mac OS X的,非個人VPN配置優先於個人的VPN配置。如果兩個個人VPN配置和一個非個人的VPN配置同時連線,並且兩個VPN隧道被配置為充當網路流量需要到達Internet預設路由,則非個人VPN隧道實際上將預設路由到因特網,只要它是連線。

在使用NEVPNManager類要求com.apple.developer.networking.vpn.api權利。您可以通過啟用“個人VPN”能力在Xcode您的應用程式得到這個權利為您的應用程式。

所管理的VPN配置NEVPNManager被儲存在由網路擴充套件的框架管理的網路擴充套件偏好。VPN配置必須明確裝入從網路擴充套件喜好記憶體可以使用它之前,並配置所做的任何更改,必須採取系統的影響之前明確地儲存到網路擴充套件的偏好。

這個類的例項是執行緒安全的。

管理VPN配置:

class func shared()
訪問的單個例項NEVPNManager。

func loadFromPreferences(completionHandler: (NSError?) -> Void)
從網路載入擴充套件喜好VP​​N配置。

func saveToPreferences(completionHandler: ((NSError?) -> Void)? = nil)
儲存在網路擴充套件喜好VP​​N配置。

func removeFromPreferences(completionHandler: ((NSError?) -> Void)? = nil)
從網路擴充套件喜好刪除VPN配置。

設定VPN配置引數:
var onDemandRules: [NEOnDemandRule]?
連線的有序列表按需規則

var isOnDemandEnabled: Bool
用它來開啟按需連線功能的布林值。

var localizedDescription: String?
包含VPN配置的顯示名稱的字串。

VAR isEnabled :BOOL
一個布林值,用來切換VPN配置的啟用狀態。

VAR protocolConfiguration :NEVPNProtocol?
一個NEVPNProtocol包含VPN隧道協議的配置設定物件。

控制VPN連線:
var connection: NEVPNConnection
一個NEVPNConnection用於控制由VPN配置中指定的VPN隧道物件。
通知:
static let NEVPNConfigurationChange: NSNotification.Name
釋出儲存在網路擴充套件偏好的變化VPN配置之後。
例項方法:
FUNC setAuthorization (AuthorizationRef)

2.6.3 NEVPNConnection

概述:NEVPNConnection物件不會直接例項化。相反,每個NEVPNManager物件具有相關聯的NEVPNConnection物件作為只讀屬性。

該NEVPNConnection類提供了啟動和程式設計停止VPN方法。該VPN可以啟動和停止的另一種方式是通過VPN點播。見onDemandRules物業NEVPNManager和NEOnDemandRule。
這個類的例項是執行緒安全的。

控制VPN連線:
FUNC startVPNTunnel ()
開始連線該VPN的過程

func startVPNTunnel(options: [String : NSObject]? = [:])
開始連線該VPN的過程

FUNC stopVPNTunnel ()
開始斷開的VPN的過程。

獲取有關的VPN連線:

VAR 狀態:NEVPNStatus
VPN連線的當前狀態

VAR connectedDate :Date?
的日期和時間時,連線狀態變更為NEVPNStatusConnected。

常量:
NEVPNStatus
VPN狀態碼

通知:
static let NEVPNStatusDidChange: NSNotification.Name
釋出時的VPN連線的狀態發生變化。

例項屬性:
var manager: NEVPNManager (Beta)


參考:
https://help.apple.com/deployment/ios/#/ior69b9b7600
https://developer.apple.com/reference/networkextension/
https://zh.wikipedia.org/wiki/Vpn

相關文章