自签名的https证书是不安全的,签名https证书

by admin on 2020年1月5日

一、网站安全证书过期原因分析:

苹果默认只允许https认证的网站,而且证书过期的网站也不允许访问,下面介绍一种通过代理来修改信任的方式让它能够跳过验证去访问.

1.建立一个下载任务

-httpsWith12306{ NSURL *url = [NSURL URLWithString:@"https://kyfw.12306.cn/otn/"]; // NSURL*url = [NSURL URLWithString:@"https://www.taobao.com/"]; NSURLSessionDataTask*dataTask = [self.seesion dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSString*string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",string); }]; [dataTask resume]; }

它比较特殊,它的证书已经过期,苹果是不允许低版本证书的,所以运行的话控制台会打印出现这种结果:

图片 1测试1

原因是苹果的官方资料说首先必须要基于TLS
1.2版本协议。然后证书的加密的算法还需要达到SHA256或者更高位的RSA密钥或ECC密钥,如果不符合,请求将被中断并返回nil.

这个时候要怎么去解决呢?我们可以通过代理去解决这个问题:

最近项目全部换成了https,并且项目进度很急,遇到了一些问题,okhttp默认情况下是支持https协议的网站的(有些情况不行,手机系统时间不对如何解决,就是下面要讲问题),比如常用的网址:https://www.baidu.com,

…你可以直接通过okhttp请求.不过要注意的是,支持的https的网站基本都是CA机构颁发的证书,默认情况下是可以信任的。
还有一些自签名证书,需要自己通过keytool去生成一个证书,然后使用,并不是CA机构去颁发的。使用自签名证书的网站,浏览器访问的时候,都会提示风险警告,比如:https://kyfw.12306.cn。
今天主要我思考的CA证书的使用。

前几年开始浏览器厂商就要求网站挂载https证书,说是安全反正随便一找都是说证书工作原理,告诉你如何让如何安全。证书站长都知道好的证书很贵,都带企业名称这类证书专门有机构在做这样的生意。

自签名的https证书是不安全的,签名https证书

一、项目内的需求

我们做的app都是企业级的应用,而企业级的应用的下载需要遵循itms协议,itms协议下需要https链接,这就需要你的服务器支持https的协议,该协议需要申请SSL证书,我们测试时用的是自签名的证书,而自签名的证书本来就就存在不安全行,自从ios10.3更新以来即使安装了自签名的证书也报错,说无法下载app,是因为苹果阻止了不受信任的证书

二、解决方案

1、自签名的证书,需要手动的为证书打开信任,通用->关于本机->证书信任设置->证书打开信任

2、申请可信任的证书像StartCom的证书,当然会很贵,关于ios中可用的受信任的根证书列表,可以参考苹果的官方的文档

三、自签名的证书为什么是不安全的

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

自签证书是不会被浏览器所信任的证书,用户在访问自签证书时,浏览器会警告用户此证书不受信任,需要人工确认是否信任此证书。所有使用自签证书的网站都明确地告诉用户出现这种情况,用户必须点信任并继续浏览!这就给中间人攻击造成了可之机。

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

几乎所有使用自签SSL证书的服务器都存在不安全的SSL通信重新协商安全漏洞,这是SSL协议的安全漏洞,由于自签证书系统并没有跟踪最新的技术而没有及时补漏!此漏洞会被黑客利用而截获用户的加密信息,如银行账户和密码等,非常危险,一定要及时修补。

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

而目前几乎所有自签证书都是1024位,自签根证书也都是1024位,当然都是不安全的。还是那句话:由于部署自签SSL证书而无法获得专业SSL证书提供商的专业指导,根本就不知道1024位已经不安全了

4、自签证书证书有效期太长

自签证书中还有一个普遍的问题是证书有效期太长,短则5年,长则20年、30年的都有,并且还都是使用不安全1024位加密算法。可能是自签证书制作时反正又不要钱,就多发几年吧,而根本不知道PKI技术标准中为何要限制证书有效期的基本原理是:有效期越长,就越有可能被黑客破解,因为他有足够长的时间(20年)来破解你的加密。

 

一、项目内的需求
我们做的app都是企业级的应用,而企业级的应用的下载需要遵循itms协议,…

1、当前电脑系统时间错误,所有的http安全证书都有颁发日期和截止日期,电脑系统时间在证书有效时间区间之外有可能导致浏览器提示网站安全证书已过期或还未生效。

1、先遵循代理

图片 2测试2

简单了解Https

HTTPS:HTTP协议 + SSL(SSL位于TCP/IP和HTTP协议之间进行安全保护).
SSL有什么作用:

  • 认证用户和服务器,确保数据发送到正确的客户机和服务器;(验证证书)
  • 加密数据以防止数据中途被窃取;(加密)
  • 维护数据的完整性,确保数据在传输过程中不被改变。(摘要算法)

HTTPS的工作原理(对应SSL):
HTTPS在传输数据之前,客户端与服务端之间会进行一次握手(确立双方加密传输数据的密码信息),握手过程:

  1. 客户端将自己支持的一套加密算法、HASH算法发送给服务端。
  2. 服务端从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给客户端。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
  3. 客户端获得网站证书之后,开始验证证书的合法性,如果证书合法,则生成一串随机数字作为通讯过程中对称加密的秘钥。然后取出证书中的公钥,将这串数字以及HASH的结果进行加密,然后发给服务端。
  4. 服务端接收客户端发来的数据之后,通过私钥进行解密,然后HASH校验,如果一致,则使用客户端发来的数字串使加密一段握手消息发给客户端。
  5. 客户端解密,并HASH校验,没有问题,则握手结束。接下来的传输过程将由之前客户端生成的随机密码并利用对称加密算法进行加密。

握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。

图片 3

2、网站的安全证书确实已经过期,根据安全证书签发国际标准,安全证书颁发不能超过39个月。

2、代理方法

- URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler{ /* 1.challenge 包含了公钥等需要校验的信息 2.completionHandler 把验证的结果告诉外部的block */ //判断认证方式 验证是否需要信任服务器 if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) { //当前选择信任服务器,并且12306的证书是自己生成的,没有在权威机构认证 //调用外部传来的completionHandler,2个参数,第一个参数枚举,包含了使用正是,取消,拒绝认证,第二个参数,日过选择信任,那么需要客户端生成一个NSURLCredential给block使用 //12306由于使用了过期的加密处理,所以apple还是认为不安全,SSL版本低,期待12306升级 NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; //高度外部校验的结果 completionHandler(0,credential); }}

这样的话再次运行就能通过了:

图片 4测试3.png

楼主在整理笔记,有不足之处请大家指出来,一起交流~.

okhttp(https)使用中出现的问题

之前也说了okhttp默认情况下是支持https协议的网站的,我用的是CA颁发的证书。在系统时间正确的时候正常访问,在系统时间不准确的时候将会报错:

javax.net.ssl.SSLHandshakeException: 
com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorExcepti
on: Could not validate certificate: Certificate not valid until Wed Dec 16 
09:00:05 GMT+08:00 2015 (compared to Sun Oct 12 16:20:03 
GMT+08:00 2003)

这个错误是证书过期导致的,如何修改这个错误?
创建一个自定义X509Certificate,让它忽略证书验证.

public static OkHttpClient.Builder addLogClient(OkHttpClient.Builder builder) {
  builder.addInterceptor(logging)
                .addNetworkInterceptor(NetWorkInterceptor.REWRITE_CACHE_CONTROL_INTERCEPTOR)
                .addInterceptor(NetWorkInterceptor.REWRITE_CACHE_CONTROL_INTERCEPTOR)
                .cache(cache)
                .cookieJar(cookieJar)
                .sslSocketFactory(createSSLSocketFactory());
        return builder;
}
 @SuppressLint("TrulyRandom")
    private static SSLSocketFactory createSSLSocketFactory() {

        SSLSocketFactory sSLSocketFactory = null;

        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, new TrustManager[]{new TrustAllManager()},
                    new SecureRandom());
            sSLSocketFactory = sc.getSocketFactory();
        } catch (Exception e) {
        }

        return sSLSocketFactory;
    }

    private static class TrustAllManager implements X509TrustManager {
        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {

        }

        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {

        }


        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }

通过SSL和https的介绍,使用这段代码违背了https不建议使用(公司和一个车机公司有合作,每次开机会重置时间导致接口无法使用,正在努力想其他方式解决)

你细细品味就知道这就是整个行业给挖的一个大坑,大家其实都在促进一门生意成交。随着这些年互联网发展,证书越来越引起搜索引擎重视,都觉得这是个大趋势,百度在自己的站长平台里放了https证书验证,你的网站如果加载了证书就会给你一些权重加分,我觉得就是个心理上图一个安稳。

3、站点引用其它部署了安全证书的外链,如果这个外链的证书过期了也会提示相应的错误。
能检测出外链有证书错误的终端设备有:手机浏览器、PC端IE6
(IE6以上的不提示)。

图片 5

二、网站安全证书过期的解决方法:

但是毕竟市场就是这个导向,很多小站站长苦恼,选择什么样的证书,证书安装之类是不是很麻烦,这里给你们推荐一个捷径。你的服务器如果是linux
centos系统,推荐使用云端化管理平台旗鱼云梯,能够实现一键化管理网站,一键化建站和一键化部署证书,自动化运维方面做得比较完善,非常推荐使用。

1、 电脑系统时间不对:将电脑系统的时间调整至安全证书有效期之内。

图片 6

2、 安全证书过期:需要网站所有者到安全证书签发机构CA续签证书。

旗鱼云梯不光在建站上做得一键化自动化,证书是国际承认的赛门铁克办法,关键是免费证书,你部署和使用都是免费,到期后能够实现自动续签功能。旗鱼云梯在网站seo优化上也做得很到位,网站关键设置比如404页面,301跳转,robots.txt文件,sitemap地图创建。

3、
当前站点外链网站的证书过期:联系SSL盾及时办理续费:把到期的网址发送给SSL盾机构,进行办理续费手续。

图片 7

续费完毕后,将新证书安装到服务器,替换服务器过期证书。

总结:使用linux centos
7.6系统,让服务器安全稳定,建站旗鱼云梯采用一键化,https也是自动化挂载。想要网站做的好,就要旗鱼云梯找。

安装完毕后的证书,网站可正常访问,如果使用的是泛域名证书,查看一下旗下是否有二级域名漏掉的,确保所有域名已经续费完成。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图