- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Ionic 4 创建一个 ios webview。我已经构建了 ios 平台,并且正在使用 iphone XR-12 模拟器在 xcode 上进行测试。我的应用程序使用自签名证书调用 iframe 进行 ip https 测试。问题是ios不允许我访问这个ip,因为它是自签名的。我使用 iframe 调用此服务器,并使用从 httpclient ionic 访问它的 Web 服务。我无法访问服务器。
我已经尝试使用 NSAppTransportSecurity 添加异常
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>MI IP</key>
<dict>
<key>NSIncludesSubdomains</key>
<false/>
<key>NSExceptionAllowInsecureHTTPSLoads</key>
<false/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
但是在论坛中我读到它不适用于 ip,并且我需要一个像 www.example.com 这样的域名
所以我尝试修改主机文件,但我必须更改所有重定向,并且 css 和链接无法正常工作所以我排除了编辑主机的可能性另请尝试在模拟器中安装证书。我将证书拖到模拟器中并安装它,并在证书信任设置中激活它。但它不起作用
已经尝试在 AppDelegate.m 中添加此代码
@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
另请尝试在 CDVWKWebViewEngine.m 中添加此代码
- (void)webView:(WKWebView *)webView
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge
*)challenge completionHandler:(void (^)
(NSURLSessionAuthChallengeDisposition
disposition, NSURLCredential *credential))completionHandler {
SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
completionHandler(NSURLSessionAuthChallengeUseCredential,
[NSURLCredential credentialForTrust:serverTrust]);
}
同时在 config.xml 中添加此内容
<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine"/>
但是没有任何作用
在模拟器 ios 的日志中
任务<837DAB71-F2D7-46C1-A29A-D1AD6736493F>。<2>加载失败,出现错误错误域=NSURLErrorDomain代码=-1202“此服务器的证书无效。您可能正在连接到假装的服务器成为“IP 网站”,这可能会使您的 secret 信息面临风险。” UserInfo={NSLocalizedRecoverySuggestion=您是否仍要连接到服务器?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=( ””), NSErrorClientCertificateStateKey=0, NSErrorFailingURLKey= https://IP WEB:4430/domesticas3p/registro, NSErrorFailingURLStringKey= https://WEB IP/domesticas3p/registro,NSUnderlyingError=0x7fa1a8e15650 {错误域=kCFErrorDomainCFNetwork代码=-1202“(空)”UserInfo={_kCFStreamPropertySSLClientCertificateState=0,kCFStreamPropertySSLPeerTrust=,_kCFNetworkCFStreamSSLErrorOriginalValue=-9843,_ kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9843,kCFStreamPropertySSLPeerCer []
并且在 iframe 所在的位置不显示任何内容,并且调用 Web 服务时出现问题
对不起我的英语,谢谢你的帮助:)
最佳答案
我认为您的.plist
文件的顺序是相反的。您首先通过将 NSAllowsArbitraryLoads
设置为 true
来禁用 ATS,然后为您的 IP 创建异常(exception),禁止从此 IP 进行不安全加载。
另请注意,正确的设置应该是 NSExceptionAllowsInsecureHTTPLoads
而不是 NSExceptionAllowsInsecureHTTPSLoads
。
按以下方式更改您的 .plist
文件:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>your.ip.or.domain</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
这将使 ATS 保持开启状态,并仅针对您的单个 IP 或域禁用它。
关于ios - 如何在ios模拟器中禁用ip https验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57731347/
我是一名优秀的程序员,十分优秀!