什么是自签名SSL证书?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是自签名SSL证书?相关的知识,希望对你有一定的参考价值。

自己生成的SSL证书,不是CA机构颁发的SSL证书,称之为自签名证书。

解释原因:

     受信任的SSL证书:会被浏览器信任认可,安全加密服务与安全扫描相关CA配套服务。

    自签署的SSL证书:不会被浏览器信任,数据被泄漏级劫持安全漏洞安全风险较高。

自签名主要风险:

    浏览器的地址栏会提示风险不安全网站。

    小程序或APP无法应用与支持。

    无法实现信用与接口交易行为。

    网页会被劫持,被强制插入广告或跳转到其它网页。

    用户数据明文传输,隐私信息被中间劫持。

    极容易被劫持和钓鱼攻击。

自签名安全隐患:

    自签证书最容易受到SSL中间人攻击

    自签证书支持不安全的SSL通信重新协商机制

    自签证书支持非常不安全的SSL V2.0协议

    自签证书没有可访问的吊销列表

    自签证书使用不安全的1024位非对称密钥对

    自签证书证书有效期太长

    自签证书普遍存在严重的安全漏洞,极易受到攻击

解决方法:Gworg申请可信SSL证书。

参考技术A 自签名SSL证书即自己给自己颁发的SSL证书,不受任何第三方监督,是不被任何浏览器信任的。自签名SSL证书的缺点如下:

1、容易遭受黑客攻击

因为自签名SSL证书不是由CA机构进行颁发的,所以CA机构是无法识别签名者并且不会信任它,因此私钥也形同虚设,网站的安全性会大大降低,很容易就会遭受黑客的攻击,没有任何安全保障。

2、大大降低用户体验度

自签名SSL证书是自己可以给自己签发的,没有任何可信度,所以是不受任何浏览器信任的,即使安装了自签名SSL证书,当用户在访问时浏览器依然会弹出“不安全”的警告,大大降低了用户体验度。

3、超长有效期,容易被破解

自签名SSL证书的有效期特别长,短则几年,长则几十年,想签发多少年就多少年。而由受信任的CA机构签发的SSL证书有效期不会超过2年,因为时间越长,就越有可能被黑客破解。所以超长有效期是它的一个弊端。

4、安装容易,吊销难

自签名SSL证书是没有可访问的吊销列表的,所以它不具备让浏览器实时查验证书的状态,一旦证书丢失或者被盗而无法吊销,就很有可能被用于非法用途从而让用户蒙受损失。同时,浏览器还会发出“吊销列表不可用,是否继续?”的警告,不仅降低了网页的浏览速度,还大大降低了访问者对网站的信任度。
参考技术B

谷歌已宣布自签名SSL证书不会被视为HTTPS信号。2014年8月,谷歌宣布使用HTTPS / SSL的网站将获得SERP的排名提升,但谷歌调查自签名证书由于其较低的安全性和信任因素而不值得作为HTTPS排名信号。最后,他们决定从HTTPS排名信号中标记它。

自签名SSL证书是使用openssl等工具创建的证书,而不是从第三方证书颁发机构(CA)获取的,它不使用信任链。一般自签名SSL证书适合用于测试目的和内部LAN服务,通常不建议在公众可访问的任何网站上使用自签名SSL证书。

参考技术C 自签名的SSL证书,顾名思义就是不是受到受信任的机构颁发的SSL证书,自己签发的证书。这种证书随意签发,不受监督也不会受任何浏览器以及操作系统信任。
自签名的证书容易被黑客伪造用来攻击或者劫持站点流量,如果使用自签名的SSL证书,就容易被钓鱼网站利用,这是其一。一旦你使用这种随意签发的,不受监督、信任的证书,黑客同样也会进行伪造,用在钓鱼网站从而对所有信任你网站的人造成损失。
自签名的SSL证书有哪些风险?
1、自签SSL证书最容易被假冒和伪造,被欺诈网站利用;
2、部署自签SSL证书的网站,浏览器会持续弹出警告;
3、自签SSL证书最容易受到SSL中间人攻击;
4、自签SSL证书没有可访问的吊销列表;
5、自签SSL证书支持超长有效期,时间越长越容易被破解。

如何使用 Ionic Cordova 框架和自签名证书绕过 iOS 11 中的 SSL 检查

【中文标题】如何使用 Ionic Cordova 框架和自签名证书绕过 iOS 11 中的 SSL 检查【英文标题】:How to Bypass SSL check in iOS 11 using Ionic Cordova framework and self signed certificate 【发布时间】:2017-10-16 19:30:47 【问题描述】:

在我的应用程序中,我需要调用一些 REST API 服务调用。部署 REST API 服务的目标开发服务器上的证书是自签名的。因此,当我运行应用程序时,我收到如下错误:

加载资源失败:此服务器的证书无效。您可能正在连接到假装“192.168.10.20:8080”无效的服务器......这可能会使您的机密信息面临风险。

由于此服务器仅用于开发/测试目的,所以我只想忽略 ssl 检查...我该如何实现?我尝试了以下方式: [AppDelegate.m 文件] 但没有成功,因为下面的代码在 iOS 11 中不起作用...

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host

    return YES;

@end

我在我的应用中使用 ionic 3 和 Cordova 7。

【问题讨论】:

不幸的是,“allowsAnyHTTPSCertificateForHost”在 iOS 11 中不再适用于 cordova (WKWebView)。 【参考方案1】:

感谢@peter,我找到了另一种解决方法,用于在 ios11 中检查应用程序,以测试 API 是否正确命中。您可以通过在 config.xml 中添加以下标签来强制将 webview 从 WKWebView 更改为 UIWebview

<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" />

现在在 Appdelegate.m 文件中添加以下代码

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host

    return YES;

@end

它对我有用..!

注意:仅用于开发/测试目的。不推荐用于生产部署

【讨论】:

这个变通办法的问题是你在使用有点过时的 iOS 网页视图。苹果推荐使用 WKWebView:developer.apple.com/documentation/webkit/wkwebview。这有很多原因(例如,您有触摸延迟,这确实是糟糕的用户体验)。问题是您是否可以让您的用户负担得起?【参考方案2】:

有趣的是,我只是在研究同样的问题。看起来在 iOS 11 中,事情受到了更多限制。我在这里为 WKWebView 回答。

本质上你需要做的:

将自定义身份验证代码放入 WKWebView 插件代码 直接从 Cordova 加载资源(然后正确触发 WKWebView 事件) 禁用 ATS (NSAppTransportSecurity)

详细说明

你应该做的细节如下(如果你使用的是WKWebView):

您需要修改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]);

但是,请注意 - 这仅在 WKWebView 初始化时有效(即通过 cordova 框架加载)。

所以您还需要从 API 所在的 URI 加载您的应用程序。我想你有本地网络(自签名证书),所以这应该不是问题。如果您将在本地加载应用程序(即从 index.html),那么这将不起作用!

此外,您需要在应用程序 *.plist 设置文件中禁用 iOS ATS,例如:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

这对我有用。

其他资源:

非常适合不同 SSL 场景(包括自签名)的测试站点:https://badssl.com/ 苹果论坛讨论这个话题:https://forums.developer.apple.com/message/269452#269452

免责声明:应避免禁用证书检查,仅当您有充分的理由或其他限制时才使用此功能。你仍然有通信安全,但你没有信任。因此,中间人攻击是可能的!如果您决定使用此选项,您还应该使用证书固定来使事情更安全。

【讨论】:

@Peter..你能和我分享完整的 CDVWKWebViewEngine.m 文件吗..我已经将这段代码集成到我的中,但没有成功.. @KamleshKumar:我当然可以分享,这里是:gist.github.com/PeterStegnar/63cb8c9a39a13265c3a855e24a33ca37 @PeterStegnar didReceiveAuthenticationChallenge 方法在我的 ionic 4 应用程序中没有被调用 仅在视图初始化时调用。那么你第一次使用或重定向/重新加载它。 @r1webs:按照 Apple 的限制,是的。但是,我强烈建议您不要将其投入生产。这应该仅用于测试目的。【参考方案3】:

我最近遇到了与服务器上的无效 SSL 证书相关的问题。

在我的应用程序中,我正在使用 WKWebView 插件,这已成为将应用程序发送到 App Store 的要求。正是在这个插件中,需要进行调整以忽略无效的 SSL 证书,在文件“plugins/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m”中,包括:

- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler 

    NSLog(@"Allow all");

    SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
    CFDataRef exceptions = SecTrustCopyExceptions (serverTrust);

    SecTrustSetExceptions (serverTrust, exceptions);
    CFRelease (exceptions);
    completionHandler (NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:serverTrust]);



因此,应用程序不会考虑无效的 SSL 证书。

https://developer.apple.com/forums/thread/15610的引用

请记住,不建议在生产应用程序中执行此操作,因为无效的 SSL 证书会危及应用程序的安全性。

【讨论】:

以上是关于什么是自签名SSL证书?的主要内容,如果未能解决你的问题,请参考以下文章

确定 SSL 证书是不是使用 Python 自签名

免费SSL证书和付费SSL证书有哪些区别?

SSL证书出了啥问题?

SSL证书代码签名证书文档签名证书及邮件签名证书有什么区别

怎样的ssl证书才能被信任?

Plesk Panel 默认 ssl 证书