gpt4 book ai didi

ios - 使用证书连接到 VPN - iOS/Swift

转载 作者:行者123 更新时间:2023-12-01 15:28:49 34 4
gpt4 key购买 nike

我正在建立需要证书进行身份验证的 VPN 连接。

下面的代码是我如何设置 VPN 所需的配置。参数 identityData 是我将证书作为数据放置的位置。

func setupVPN(){
guard let vpnManager = NEVPNManager.shared() else { return }

vpnManager.loadFromPreferences { error in

var hasProtocolConfig = false;

if #available(iOS 9, *) {
hasProtocolConfig = self.vpnManager.protocolConfiguration != nil
} else {
hasProtocolConfig = self.vpnManager.`protocol` != nil
}

if hasProtocolConfig == true {

let p = NEVPNProtocolIKEv2()
// All preferences here
if let vpnData = self.vpnData {
p.serverAddress = vpnData.getePDGAddress() // "X.X.X.X"
p.localIdentifier = vpnData.getlocalIdentifier() // "XXXYYYZZWWWWWWWWWW@pppp.ppp.pppppp.pppppp.ppppppppppp.org"
p.remoteIdentifier = vpnData.getAPN() // "gggggg.uuuuuuuuuuu"
p.identityData = vpnData.getUserCertificateData() // User Certificate as Data
}

p.ikeSecurityAssociationParameters.integrityAlgorithm = NEVPNIKEv2IntegrityAlgorithm.SHA256
p.ikeSecurityAssociationParameters.encryptionAlgorithm = NEVPNIKEv2EncryptionAlgorithm.algorithmAES128
p.ikeSecurityAssociationParameters.diffieHellmanGroup = NEVPNIKEv2DiffieHellmanGroup.group14
p.serverCertificateIssuerCommonName = "TEST SubCA"
p.serverCertificateCommonName = "TEST SubCA"
p.authenticationMethod = NEVPNIKEAuthenticationMethod.certificate

if #available(iOS 9, *) {
self.vpnManager.protocolConfiguration = p
} else {
self.vpnManager.`protocol` = p
}
self.vpnManager.isEnabled = true

self.vpnManager.saveToPreferences { error in
if let e = error{
print("[VPN] error saving: " + e.localizedDescription)
} else {
print("[VPN] vpn saved")
Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.connectVPN), userInfo: nil, repeats: false)
}
return
}
}
}

}

该证书以 base 64 编码的一个示例:
MIIFqTCCA5GgAwIBAgIQKLf5dlFRabt3cAe9ax2kXjANBgkqhkiG9w0BAQsFADBgMRwwGgYDVQQDDBNURVNUIFZGQ1ogRVBDIFN1Yk ... wdWJsaWMgYS5zLjELMAkGA1UEBhMCQ1owggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNgTmc6uQ9Md

然后对数据的解析是这样完成的:
CaCertificateData = Data(base64Encoded: "Base64StringEncoded_Here")

一切就绪后,我以这种方式启动 VPN 隧道:
do {
try vpnManager.connection.startVPNTunnel()
} catch let error {
print("Error starting VPN Connection \(error.localizedDescription)");
}

我可以看到 VPN 的状态,VPN 开始连接,然后变为断开连接。我们在上面看到的 3 种算法是正确的。

有人可以注意到我做错了什么吗?我有一些来自我所做的一些不同测试的 .pcap 文件。在所有 .pcap 文件中,我不会发送所需的消息“Client Hello”。我认为问题出在证书上。

最佳答案

您可以使用 .ovpn 文件。您可以轻松地将证书集成到 ovpn 文件中。
看这篇文章 https://medium.com/better-programming/how-to-build-an-openvpn-client-on-ios-c8f927c11e80

关于ios - 使用证书连接到 VPN - iOS/Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47032511/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com