只需 2 步,定位集成融云时的崩溃与错误 - iOS 篇

在集成融云 iOS SDK 时候,多多少少都会遇到一些问题,可能是崩溃,也可能是功能接口错误回调,对于刚接触 SDK 的开发者,难免束手无策,下面分享一个快速定位问题的方法,只需 2 步哟~#####方法的中心思想就是“快速拿到 log,通过分析 log 定位...
继续阅读 »

在集成融云 iOS SDK 时候,多多少少都会遇到一些问题,可能是崩溃,也可能是功能接口错误回调,对于刚接触 SDK 的开发者,难免束手无策,下面分享一个快速定位问题的方法,只需 2 步哟~

#####方法的中心思想就是“快速拿到 log,通过分析 log 定位问题“

#####步骤 1:

添加下面代码,将 log 写入沙盒

- (BOOL)application:(UIApplication *)application

    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

          //重定向 log 到本地问题

          //在 info.plist 中打开 Application supports iTunes file sharing

      if (![[[UIDevice currentDevice] model] isEqualToString:@"iPhone Simulator"]) {

          [self redirectNSlogToDocumentFolder];

      }

    //设置Log级别,开发阶段打印详细log

    [RCIMClient sharedRCIMClient].logLevel = RC_Log_Level_Info;

}


- (void)redirectNSlogToDocumentFolder {

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

  NSString *documentDirectory = [paths objectAtIndex:0];

  NSDate *currentDate = [NSDate date];

  NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

  [dateformatter setDateFormat:@"MMddHHmmss"];

  NSString *formattedDate = [dateformatter stringFromDate:currentDate];

  NSString *fileName = [NSString stringWithFormat:@"rc%@.log", formattedDate];

  NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];

  freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);

  freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);

}

#####步骤 2:

加入第 1 步代码后运行项目,复现问题后,从”沙盒/Documents“路径下导出 rc 开头的 log 文件,使用文本编辑工具打开该文件。

  • 如果是崩溃,在 log 中能找到对应的崩溃信息,例如:

    * 找不到方法 unrecognized selector sent to instance 
    * 数组越界 [__NSArrayM objectAtIndex:]: index4beyond bounds [0..1] 等等。
  • 如果是 SDK 功能接口错误,可以在 log 中搜索到错误码,融云的错误码基本都是五位数字,以 ”3“开头,例如:

    * 31004:“Token 无效”,是使用的 token 和 appkey 不匹配。
    * 33001:“SDK 没有初始化”,是需要先初始化 SDK 才能调用其他接口。
    * 33003:“开发者接口调用时传入的参数错误”,是调用接口时候传入的参数有误,有空对象的可能性比较大。

    更多错误码链接:https://docs.rongcloud.cn/v4/views/im/ui/code/ios.html

总结,通过上面简单的 2 个步骤,就可以定位大部分问题,只是错误码解释如果不够明确的话,就还得提工单问,但是也能节省一部分交流成本,毕竟如果创建工单就把 log 贴身,得到针对性回复去解决问题的效率也会高很多。希望今天的分享可以帮助到大家。


收起阅读 »

升级融云 4.0 及以上版本的兼容方案

从 2.10.6 版本升级到 4.0 版本时候,遇到了一些坑,也从中总结了些经验,希望对看到这篇文章的人有帮助。升级 SDK 和,会报错的方法基本只有一个,就是 connectWithToken 这个连接方法,因为 4.0 及以上版本中此方法的回调形式改变了,...
继续阅读 »

从 2.10.6 版本升级到 4.0 版本时候,遇到了一些坑,也从中总结了些经验,希望对看到这篇文章的人有帮助。

升级 SDK 和,会报错的方法基本只有一个,就是 connectWithToken 这个连接方法,因为 4.0 及以上版本中此方法的回调形式改变了,所以需要“删除连接接口 token 非法的回调,并将该回调中的处理逻辑,移动至 error 回调中”

 示例代码:

以下代码以 IMKit 为例,IMLib 修改对应的核心类即可。

  • iOS 端

    [[RCIM sharedRCIM] connectWithToken:token
                dbOpened:^(RCDBErrorCode code) {
                    //如果消息数据库打开,可以进入到主页面
                }
                success:^(NSString *userId) {
                    //连接成功
                }
                error:^(RCConnectErrorCode status) {
                    if (status == RC_CONN_TOKEN_INCORRECT) {
                        //将旧版本 token 非法的回调处理代码写到这里
                        //从 APP 服务获取新 token,并重连
                    } else {
                        //无法连接 im 服务器,请根据相应的错误码作出对应处理
                    }
                }];
  • Android 端

    RongIM.connect(token, new RongIMClient.ConnectCallback() {
            @Override
            public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
                //如果消息数据库打开,可以进入到主页面
            }

            @Override
            public void onSuccess(String s) {
                //连接成功
            }

            @Override
            public void onError(RongIMClient.ErrorCode e) {
                if(e.equals(RongIMClient.ErrorCode.RC_CONN_USER_OR_PASSWD_ERROR)) {
                    //将旧版本 token 非法的回调处理代码写到这里
                    //从 APP 服务获取新 token,并重连                  
                }else {
                    //无法连接 im 服务器,请根据相应的错误码作出对应处理
                }
            }
    });

注意

4.0 及以上版本的 SDK 中,会出现一些错误码不走 error 回调的情况,建议分情况进行处理:

* 用户第一次登录,设置 timeLimit 为有效值,网络极差情况下超时回调 error。
* 用户后续登录,调用没有 timeLimit 的接口,SDK 就会保持旧版本的自动重连。


收起阅读 »

融云 iOS 常见问题总汇

之前在给融云提工单时候,知道了他们有“知识库”这么个东东,就是一些问题解答的归纳总结库,可以通过搜索关键字,来找到问题描述和具体解答,其中有一篇汇总了 iOS 端的一些常见问题,搬运分享,原地址:https://support.rongcloud.cn/ks/...
继续阅读 »

之前在给融云提工单时候,知道了他们有“知识库”这么个东东,就是一些问题解答的归纳总结库,可以通过搜索关键字,来找到问题描述和具体解答,其中有一篇汇总了 iOS 端的一些常见问题,搬运分享,原地址:https://support.rongcloud.cn/ks/NjUx

log 和数据库:

log 重定向(重定向后导出 log,用于排查问题):http://[support.rongcloud.cn/kb/NDI0](http://support.rongcloud.cn/kb/NDI0)

导出数据库:https://support.rongcloud.cn/kb/MzYx

远程推送:

远程推送文档:https://docs.rongcloud.cn/v3/views/im/ui/guide/private/notify/push/ios.html

远程推送和本地通知的区别:http://support.rongcloud.cn/kb/Mjk4

收不到远程推送的排查步骤:http://support.rongcloud.cn/kb/MzEy

点击本地通知和远程推送通知栏跳转方法:http://support.rongcloud.cn/kb/NTYy

推送证书检查:http://support.rongcloud.cn/kb/NDI4 http://support.rongcloud.cn/kb/MzY2

自定义远程推送声音:http://support.rongcloud.cn/kb/NjQ2

本地通知重复弹出:http://support.rongcloud.cn/kb/Njc5

接收本地通知时,不弹通知栏的排查步骤:https://support.rongcloud.cn/ks/Mzky

适配 iOS 13 设置 deviceToken:https://support.rongcloud.cn/ks/MTAwMw==

用户如何实现接收推送撤回通知栏指定通知:https://support.rongcloud.cn/ks/ODcx

CocoaPods:

使用 CocoaPods 搜索不到最新版本的 SDK:http://support.rongcloud.cn/kb/NjUy

清除 cocoaPods 缓存及 Xcode 配置:https://support.rongcloud.cn/ks/OTky

会话列表:

会话列表为空时的背景图设置:http://support.rongcloud.cn/kb/MzA2

自定义会话列表 cell:http://support.rongcloud.cn/kb/MjUz

会话列表过滤某个特定会话:https://support.rongcloud.cn/ks/OTc4

点击会话列表 Cell,跳转到 @ 自己的消息:https://support.rongcloud.cn/ks/MTAyNw==

在会话列表 Cell 上,显示当前会话最后一条消息的状态是“已读”或“未读”:https://support.rongcloud.cn/ks/MTAyOQ==

聊天界面:

长按 cell 弹出功能:http://support.rongcloud.cn/kb/NTY3

长按消息 cell 的多选功能:http://support.rongcloud.cn/kb/NzI4

进入聊天界面为空,需要下拉才能显示数据:http://support.rongcloud.cn/kb/NTU4

聊天页面发送图片消,将图片传到指定服务器的处理方法:http://support.rongcloud.cn/kb/Njc2

在聊天页面输入框上方添加自定义 view:https://support.rongcloud.cn/ks/ODg1

刷新聊天页面消息 cell 的高度:https://support.rongcloud.cn/ks/OTMz

继承并重写位置页面:http://support.rongcloud.cn/kb/NDIy

撤回文本消息后,增加“重新编辑”功能:https://support.rongcloud.cn/ks/OTU2

隐藏输入框方法:https://support.rongcloud.cn/ks/OTY5

设置聊天页面导航栏按钮的处理方法:https://support.rongcloud.cn/ks/OTc5

“翻译”、“语音转文字”功能时,对于消息 cell 的处理:https://support.rongcloud.cn/ks/OTg2

没有音视频通话按钮:https://support.rongcloud.cn/ks/NTgx

去掉输入框和扩展板中间的白线:https://support.rongcloud.cn/ks/MTAyMA==

将会话页面中文本消息已读 UI 修改为文本“已读”、“未读”: https://support.rongcloud.cn/ks/MTAyOA==

为输入框添加 Placeholder 效果:https://support.rongcloud.cn/ks/MTA3NA==

输入工具栏:

自定义表情:http://support.rongcloud.cn/kb/NTY2

自定义功能板:http://support.rongcloud.cn/kb/MzAy

讯飞语音输入集成:http://support.rongcloud.cn/kb/NTc2

发送 iCloud 中的文件:https://support.rongcloud.cn/ks/OTY0

用户信息(头像和昵称的显示):

用户信息提供者函数(推荐使用此方法):http://support.rongcloud.cn/kb/MjYx

消息中携带用户信息(聊天室会话推荐此方法):http://support.rongcloud.cn/kb/Mzgw

自定义消息:

自定义消息:https://docs.rongcloud.cn/v4/views/im/ui/guide/private/conversation/msgsend/ios.html#createcustom

改变自定义消息样式:https://support.rongcloud.cn/ks/OTU5

UI 自定义:

设置导航栏和导航栏字体颜色:http://support.rongcloud.cn/kb/Mzg2

IMKit SDK 中按钮颜色的修改:https://support.rongcloud.cn/ks/OTUy

音视频通话:

音视频升级注意事项:http://support.rongcloud.cn/kb/NzY0

点击音视频推送后没有弹出音视频通话页面:http://support.rongcloud.cn/kb/NTI1

获取音视频原始数据(实现美颜):http://support.rongcloud.cn/kb/NjMx

客服:

客服后台发送表情显示有误处理:https://support.rongcloud.cn/ks/MTA1Mw==

客服后台发送富文本消息中 html 标签处理:https://support.rongcloud.cn/ks/MTA1Mg==

iOS适配问题:

iOS11 红包音视频:http://support.rongcloud.cn/kb/NjI4

适配 iOS10: http://support.rongcloud.cn/kb/NTI5

适配 iOS 13 设置 deviceToken:https://support.rongcloud.cn/ks/MTAwMw==

与第三方库冲突:

解决与 BlocksKit 冲突:http://support.rongcloud.cn/kb/MzI1

解决与 Monsary 冲突:http://support.rongcloud.cn/kb/NjAy

解决与 UIButton+NMCategory 冲突:http://support.rongcloud.cn/kb/NDA5

解决与 IQKeyboardManager冲突:http://support.rongcloud.cn/kb/MzM0

错误码查询:

iOS 端错误码的相关注释:http://support.rongcloud.cn/kb/Njc3


收起阅读 »

女朋友为我写了一个防猝死插件

对于程序员来说,经常会遇到项目周期短的状况。白天开会讨论需求,晚上加班写代码,熬夜发版本,上线改 Bug。工作日就是:开会、写代码、倒水、上厕所、抽烟、改 Bug,一天最开心的时刻就是带薪拉屎。好不容易到了周末,有时还会通宵玩游戏,半个月也不运动一次。再好的身...
继续阅读 »

对于程序员来说,经常会遇到项目周期短的状况。白天开会讨论需求,晚上加班写代码,熬夜发版本,上线改 Bug。工作日就是:开会、写代码、倒水、上厕所、抽烟、改 Bug,一天最开心的时刻就是带薪拉屎。

好不容易到了周末,有时还会通宵玩游戏,半个月也不运动一次。再好的身体,也会被这种高强度的工作,无规律的生活所击垮。随着年龄越来越大,加上每天久坐不起来运动运动,这样下去身体真的顶不住,久坐有挺多危害的: 

1、久坐可能会导致心脑血管疾病增加

2、久坐可能会导致免疫力低下

3、久坐可能会导致损脑伤胃

4、久坐可能会得痔*

为了我身体健康,女朋友开发了一款插件,这插件可以 40 分钟提醒一次该起来起来运动啦,并且展示一些骚骚的动图。12 个经典小动作让你肩不痛,腰不酸,腿不麻!

下面是插件的介绍:

插件介绍

工具栏 Tools 点击,找到 Assistant setting,就能设置提醒时间了。

微信图片_20210311115324.png过了半小时,弹出来一个胖胖的「打工人」动图,提醒你该休息了。动图下方配上了一句话:原地踏步的时候,手掌向上朝天花板的方向推出去,手掌收回来的时候大拇指差不多要碰到你的肩膀,通过同时托举水瓶可以加大难度。这插件不仅仅能提醒你该休息了,而且还提示你需要做哪些动作来缓解疲劳。微信图片_20210311115324.png

女朋友说这个插件装备了 12 种缓解疲劳的动作,让我自己去解锁  。。。我看了一下源码,女朋友在代码中加入了鼠标监听的功能,如果鼠标十分钟没有移动过,那就认为我在休息了。这时候会把定时任务取消,只有下一次移动鼠标时才会重新启动定时任务。

好了,大家对这个插件感兴趣的可以装一装,体验一下。这只是第一个版本,后面还会不断更新。

转载于公众号“码个蛋”


收起阅读 »

无意中发现了当代程序员焦虑的秘密……

最近有不少人在后台留言:0基础怎么学好 Java?提问的人里有在校大学生、也有工作了一段时间想转行的职场人。(其中一个提问截图)交流下来,他们都有同一个行为模式:刚开始劲头十足,上网找了一堆资料,收藏,然后学习一段时间(甚至就没开始学),就放弃了。然后再重新开...
继续阅读 »

最近有不少人在后台留言:0基础怎么学好 Java?提问的人里有在校大学生、也有工作了一段时间想转行的职场人。(其中一个提问截图)
交流下来,他们都有同一个行为模式:刚开始劲头十足,上网找了一堆资料,收藏,然后学习一段时间(甚至就没开始学),就放弃了。然后再重新开始,过一段时间又放弃了。

某Java视频教程下方的留言

微信图片_20210311114933.png

为什么?我们从三方面分析一下,然后对症下药。

▌首先,目标问题。你学习Java的目的是什么?是热爱编程?是想通过编程实现自己的一些想法,做一些有意思的工具?还是听说IT行业好,Java工程师工资高想往这方面发展?无论哪一种动机,试着让它具体起来。比如,去查一下Java工程师的入门工资,给自己定个目标,找到一份Java岗位的实习或者工作,薪资是多少,在什么时间达成。越是具体,实现的可能性越大。

微信图片_20210311114940.jpg

▌第二,想想自己的学习方式,是不是以看为主?特别是看视频的时候,基本是被老师的思路带着走,没有自己的思考。感觉自己听懂了,第二天再去看的时候,就忘得差不多了。Java是一门编程语言,是要敲代码的,没有实际项目和练习的支撑,难以掌握。

▌第三,大家找的视频/教程,往往大而全,动辄几百集,或者巨厚的一本书。这些教程讲得细致且全面,可问题就出现在这里,大家刚开始学习 Java 的时候,太注重细节而不知全貌,太注重技术而不注重应用,很容易被浩瀚的内容劝退。


收起阅读 »

小米造车?年轻人的第一辆电动车?

素来有着价格屠夫称号的 小米 终于要对电动车出手了!事件简讯昨天下午,据《晚点LatePost》爆料 小米 已确定造车,并视其为战略级决策,不过具体形式和路径还未确定,或许仍有变数。一位知情人士称,小米造车或将由小米集团...
继续阅读 »

素来有着价格屠夫称号的 小米 终于要对电动车出手了!

事件简讯

昨天下午,据《晚点LatePost》爆料 小米 已确定造车,并视其为战略级决策,不过具体形式和路径还未确定,或许仍有变数。一位知情人士称,小米造车或将由小米集团创始人雷军亲自带队。

消息传出后,小米集团就造车传闻向媒体回应,给出的说法是“等等看看,暂时没有”,更多消息则暂不回应。
换句话说,小米其实并没有把话说死,给出的结论是“暂时没有”。仍存在小米下场造车的可能。

微信图片_20210311114234.jpg

事件分析

其实早在几年前,雷布斯就对造车领域进行过布局。
2014年,小米投资了地图厂商凯立德。2015年、2016年,雷军通过顺为资本先后对国内造车新势力蔚来和小鹏汽车进行投资,但都是以跟投为主。

此后,顺为资本又在2019年对小鹏汽车进行了投资。
另外在2019年,梅赛德斯-奔驰乘用车中国研发中心与小米智能语音助手“小爱同学”达成合作。

这之后,小米在汽车领域还参与到车载系统服务厂商博泰的B轮融资中,并注册了“小米车联”的商标。

当前,智能电动汽车大势已至,特斯拉和新造车公司风头正盛,苹果、谷歌、亚马逊、百度等科技和互联网巨头都在积极布局,以制造业起家的小米更是很难不为所动,所以才会不时传出小米造车的消息。
当然,也有“专业人士”称:小米造车完全没有理由。

  1. 华为芯片断供后手机产量不足,给国内空出了不小的市场。小米在手机市场还有大把机会。

  2. 小米与百度不同,在自动驾驶没有积累,没有核心竞争力。

  3. 手机制造跟汽车制造不是一个体量,短时间内小米很难入局。

  4. 就算是小米造车也很可能是跟现有车企进行合作而不是从头开始。

雷布斯曾说过:“站在风口,猪都能飞”虽然现在是造车的新风口,但是造车时机的第一波机遇已过,小米到底要不要亲自下场,还需要雷军和小米高层们仔细揣摩。


收起阅读 »

在国企当程序员是怎么样的体验?

2017年初,我通过一整天的笔试及面试加入一家(某一线城市国资委全资控股)某集团的研究机构(中央研究院),任职高级软件工程师;在这边工作了整整一年,目前已经跳槽到一家互联网公司,在回头看看这一整年,感受颇深,只好一吐为快,以便对想进入国企的程序员帮助及借鉴。入...
继续阅读 »

2017年初,我通过一整天的笔试及面试加入一家(某一线城市国资委全资控股)某集团的研究机构(中央研究院),任职高级软件工程师;在这边工作了整整一年,目前已经跳槽到一家互联网公司,在回头看看这一整年,感受颇深,只好一吐为快,以便对想进入国企的程序员帮助及借鉴。微信图片_20210311112145.png

入职考试

笔试部分:国企面试与其他企业并没有太大区别,首先是笔试,一般都是前面50道选择题,后面两道是开放性的大题,大题没有固定答案,只要符合社会主义核心价值观就可以拿到满分,选择题是关键,全部都是技术题,需要答对40题以上,才有可能进入下一轮面试。

面试部分:面试分三轮,首轮是程序员面你(你未来的同事),他们会问你一些技术相关问题,例如:选举算法,redis的应用场景,如何处理高并发,如何保证高可用,是否关心Nodejs新发布的版本,deno是什么;诸如此类的问题很多很杂。

第二轮面试是由副院长来面(也就是你未来的直属上司)。他会问你项目相关的问题,例如:做过哪些项目,解决了什么问题,你在项目中的角色,项目是如何管理的,又是如何进展的,使用了哪些技术栈,为什么挑选这样的技术栈,遇到哪些问题,如何解决的这些问题。

第三轮面试是由HR来面,这个面试就很简单了,简单说一下你的情况,聊聊家常,然后他会向你说明组织结构,与一些待遇问题。

PS:进国企最重要的素质是文凭,我们研究院硕士以上学历人数比本科要多,而且大部分毕业于国内一流院校(交大生是整个研究院的主体)。

工作压力

工作压力还是蛮大的,产品并不像私企由市场导向,而是政策导向;国家说人工智能热,那我们就去做人工智能的项目,说区块链热,我们就去搞区块链的项目,反正我在研究院一年以来,搞过云计算,人工智能,大数据,区块链。好处就是你能学到很多东西,而且紧跟市场热度。坏处就是什么都会,但是什么都不精。

吐槽: 为了迎合政策做一些不具市场价值的产品(这里面不存在腐败,现在国企很难贪腐,30万RMB以上的项目就要求公共招标)。

举个两个例子,我们也开发OCR AI图片识别系统,在市场上已经有很完善的产品,而且很廉价,我们依然花钱去开发这种产品,市场价值基本没有,因为直到目前为止,我们产品的识别率依然不如市场上的几个主流产品(阿里,百度)。

第二个例子,便是私有云,这个我们做得真的还不错,但是市面上最强的是华为,他们是卖服务器送私有云,也就是传统的卖硬件送软件,与他们相比,我们的产品就不具竞争力了。

微信图片_20210311112139.png

工作强度

工作强度真的还好,一般都不需要加班,至少我是不加班的。

这就意味着可以放羊了吗?当然不是,我加入的项目组,大多都是以2个星期为周期进行开发的,每两个星期要举行一次组内讨论会,如果完不成任务或者bug太多是需要加班处理的,因为国企是不可以出错的,一次出错可能直接招致点名批评(包括这个项目的所有相关人员),一次kpi黑记录,会直接影响你以后的升迁前途。

组内都是协同工作,可能因为你的原因导致项目没法按时上线,发生一两次你就会被边缘化,最终要么离职,要么下放到子公司。就算是副院长级别,如果完成不了集团的KPI,也是会被下放的。

但是相比互联网公司,国企的压力相对小一些,互联网公司实行的是不能胜任就走人的策略,所以每个人几乎都没有什么安全感,只有拼命的工作来争取自己有安全感。国企,特别是大国企,公司的人事权一般都在公司总部手里。

工作环境

国企办公环境一般都是比较好的,我们有自己的园区,自己的办公楼,空间很大,硬件配置都是很不错的,有健身器材,有空气净化器,有自己的食堂,有自动售货机。

有自己的产品展厅,有自己的公司纪念馆。

晋升空间

这部分只剩下吐槽了,一个萝卜一个坑,萝卜不走,也不会让出这个坑。在国企表现是没有意义的,除了口头表扬,你获得不了任何实际好处。

好的人脉要比努力重要,如果上面没人认识你,就算你的领导大力推荐你,你也不会得到提拔,空降长官在国企是一件司空见惯的事。

PS:组织人员要比群众晋升快(群众进不了总部)。

福利待遇

如果说国企15年前的待遇是一流的,那么如今的国企待遇最多只能算是二流的,特别是对于IT行业来说。以我所在公司为例,待遇采用工资+福利(洗漱产品,电影票,接近1500RMB的补助等)的方式,工资增长比较慢,相对于互联网公司来说,待遇至少是被腰斩的,鄙人也是迫于生活压力,为了生计而离开国企,跳槽去了互联网公司。

吐槽 :国企没有奖金,国企没有奖金,国企没有奖金,重要的事情说三遍。

工作稳定性

国企的稳定性应该是最被人人称道的,特别是中字头企业。一方面是国企的社会责任感几乎不太可能会裁员;另一方面公司的人事权几乎都是在公司总部手中,下面的分部门是没有权利做出裁员决定的。以研发为例,如果有人不能胜任工作或者和其他人工作合不来,部门领导会想总部申请调岗,调到行政人力或其他部门,不会出现领导向总部申请把你开除的事,所以国企给了员工很大的安全感。互联网公司则不同,裁员是家常便饭,领导一高兴或一生气甚至一拍脑袋就裁员,经常一年就会裁员几次,员工几乎是没有安全感的。互联网公司很多都是靠融资生存,一旦融资间隔比较大或融不到资就会裁员,生存的压力巨大,让它们没有能力或者没有职业道德感或无耻去考虑员工的感受。国企则不同,国企的业务本来波动就很少,国企营收相对稳定,再说也不差钱,没有生存的压力。

技术栈

实际大部分国企使用的技术一般都是商用的,比如Oracle,SQL server等,极少使用网上的开源框架。

一方面是因为商业软件系统稳定,有大公司做技术支持;另一方便开源软件稳定性有待加强,到了线上因为开源框架的bug导致的系统故障可以说是得不偿失,毕竟对于国企来说不差这些钱。

但是我们不同,我们毕竟是研究院,以研发为主,所以更多地使用开源技术。

PS:国企软件开发版本迭代比较慢,系统测试时间比较长,毕竟对于国企来说,不怕慢,就怕系统出现问题,系统出了问题比系统开发不出来更严重。


收起阅读 »

知乎热议:计算机专业钱景究竟如何?

近日,知乎上掀起一番大讨论:计算机专业毕业生,工资真的高吗?有网友表示,高不高因人而异,就业面是真的广,也有人表示绝对是虚高,所谓的百万年薪是被行业内的佼佼者洗脑了。在996,007这些骇人数字面前,首先得有挣钱的身体。根据猎聘的统计数据,2019年,20-3...
继续阅读 »

近日,知乎上掀起一番大讨论:计算机专业毕业生,工资真的高吗?有网友表示,高不高因人而异,就业面是真的广,也有人表示绝对是虚高,所谓的百万年薪是被行业内的佼佼者洗脑了。在996,007这些骇人数字面前,首先得有挣钱的身体。

u=3459720424,2125514627&fm=26&gp=0.jpg

根据猎聘的统计数据,2019年,20-35岁的程序员占比超过90%。35岁~40岁的程序员仅为7%左右,40岁以上的程序员不足2%。还没等前浪跑到沙滩,后浪已在身后了。

程序员长期以来被公认是一个多金的职业,但是开始有后浪质疑这个说法,在知乎掀起了一场激烈的讨论:

计算机专业,真的工资高吗?

计算机专业有三高:高收入,高就业率,高强度

一位计算机硕士在读的网友表示,对于其他专业的同学来说,的确工资很高。

以名校的计算机/软件工程专业毕业生薪资来说,中国科学院大学计算所,2019年硕士毕业生平均年薪34万,博士53万!

看来,博士相比于硕士,虽然毕业难,工作量大,薪资还是增加了不少。

据了解,现在计算机专业名校,清华大学,哈工大,上海交大,浙大,北航等,近两年的硕士毕业生薪资待遇大都在30万/年以上,可谓待遇丰厚。

放开高不高且不论,就业广是真的,计算机、编程、软件等等各行各业都离不开。

网友表示,任何行业的薪酬都不会脱离二八法则,挣大钱的都是少数人。但计算机行业的二八效应目前更弱一些,就是中间人群收入占更大头。

这也是为什么:「人人都想学计算机」。当不了大厂首席工程师,拿个不错的收入还是可以的。

前瞻产业研究院根据中国高等教育数据权威公司麦可思发布的中国本科生就业数据,评选出2019年中国高考热门报考本科专业类别TOP30榜单。其中,计算机类排在第1名。

因为数据显示,我国计算机类本科毕业生毕业半年后就业率高于全国水平。

在全国本科毕业生毕业半年后的水平下滑,2015-2017届全国计算机类本科生毕业半年后就业率仍呈波动上升趋势,2017届就业率提升至95.2%;而其中2017届软件工程本科生毕业半年后就业率为96.7%,高于计算机大类专业的整体平均水平。

另外,我国计算机类本科毕业生毕业半年后月收入也同样高于全国水平。

在细分专业上,2017届信息安全和软件工程本科生毕业半年后月收入均高于大类专业的整体平均水平,分别为6386元、6259元。

根据猎聘网数据,2018全国互联网行业程序员平均月薪18153元,高于全国全行业中高端人才平均月薪17153元。

国内计算机硕士纷纷投身互联网,游戏公司给的更多!

不同就业方向,薪资也差别很大。

关于计算机专业硕博就业的情况,一位加州大学伯克利分校计算机留美博士告诉新智元,「对于计算机专业国内硕士,一般就业于国内互联网和科技公司。我周围在国内读硕士的同学毕业后薪资一般都在20万以上(17年毕业),好的25到28,我记得游戏公司会更高,35万左右。一般国内公司能解决北京户口的话,工资比较低一些20万,或者多一点儿。」

「去国内互联网和科技公司主要从事软件工程师,算法工程师,运维,也包括做硬件的。当然也有去银行及其他国企的。」

「对于计算机专业国外硕士,一般是去工业界,去国外的大厂比较多。」

对于国内的博士,一般会很多人选择学术界,当然去工业界的也不少,学术界工资很低,工业界工资比较高。

「还有对自己期望比较高,有学术要求的国内博士,很多都会做博后,尤其是去国外做博士后,这样一来,选择就更多了:国内学术界(拿人才计划),国外学术界,国外工业界。」

国外博士和国内博士的选择差不多。「如果在美国工业界工作的话,每年有10几万到20几万美元。如果在国外学校工作的话,也就10万美元左右。」留美计算机博士告诉新智元,「阿里在加州的达摩院,实习工资在7000美元,另外有3000左右房补。」

2019年全球技术工人平均薪资为,美国从业者月平均薪资为129000,美国从业者年平均薪资为135000

平均薪资不代表所有人,知乎网友:首先得有挣钱的身体

行业的光鲜背后,却充斥着个体的艰辛。「工作996,生病 ICU!」是IT从业者经常拿来调侃自己的一句话。

每年都会发生很多起程序员猝死事件。

大疆25岁硕士毕业生因过劳在家中猝死;36岁的华为工程师22月没有休息,在肯尼亚劳累过度而死,这样的案例比比皆是。

程序员每天对着电脑,在电脑前处理大量的数据,经常加班,精神压力大。而且加班狂魔还要面临秃头的风险。

也有人表示,前十年很热门,现在计算机专业领域的人才基本处于饱和状态。

有网友说,最合适的答案是「虚高」,给你洗脑入行的人都是行业内的佼佼者。

也有网友从周围同学入手分析,总体薪资水平在5k到3万之间,本科毕业同学(14年),月薪5k左右,少部分1.2w左右;硕士毕业(17年)大部分1w左右,少部分月薪2w左右。

毕竟一份辛苦一份钱,生存还是生活?这是一个问题!

所以,尽管很多人说计算机专业入行以后,工资也并没有网上说的那么高,而这点儿钱还是冒着「生命危险」挣来的,仍然挡不住后浪们对IT行业的狂热。

根据智联招聘的数据,2020年毕业生期望的行业榜首就是计算机专业相关的IT、互联网等行业,甚至比第二名、第三名、第四名加起来还要高。

从本科生毕业期望从业方向来看,以硬/软件工程师为主,游戏设计/开发更是近几年的大热就业趋势。另外,很多应届生还期望往市场方向转,比如:IT项目经理。

目测这种IT热大概率还会持续下去。

来源于公众号“程序猿DD”


收起阅读 »

国内首个比特币勒索病毒制作者落网,但过程有点好笑…

所谓比特币勒索病毒,就是某一天你突然开机后却无法打开任何文件,同时电脑上会弹出勒索对话框:若要恢复文件,需支付XXX个比特币的赎金。近年来,这类网络勒索病毒十分猖獗,防不胜防。全球各地企业、公共机构、甚至高校都会遭遇勒索病毒攻击。光是在今年,国内就已经发生了数...
继续阅读 »

所谓比特币勒索病毒,就是某一天你突然开机后却无法打开任何文件,同时电脑上会弹出勒索对话框:

若要恢复文件,需支付XXX个比特币的赎金。

近年来,这类网络勒索病毒十分猖獗,防不胜防。全球各地企业、公共机构、甚至高校都会遭遇勒索病毒攻击。

光是在今年,国内就已经发生了数起大规模的勒索病毒传播事件。

一款名为WannaRen的病毒,它在入侵电脑后,会加密系统中几乎所有文件,加密后的文件后缀为.WannaRen。

勒索团队扬言,3天内用户若不支付0.05个比特币(约2500元人民币)的赎金,价格将会翻倍,一个星期之内不付款就会永远无法恢复被加密的文件。

微信图片_20210311141530.jpg

由于难以查找其隐匿的踪迹,很多被攻击的企业为了息事宁人尽快恢复运营,都直接选择向黑客支付赎金视的方式。

这种一贯妥协的方式无疑助长了犯罪分子的嚣张气焰。

近期,在“净网2020”专项行动中,江苏南通警方便成功侦破使用勒索病毒实施网络敲诈勒索的案件,在山东威海市抓获比特币勒索病毒制作者巨某和其它嫌疑人。

据悉,这是全国公安机关抓获的首名比特币勒索病毒的制作者。

截至案发,巨某已作案百余起,非法获利的比特币折合人民币500余万元。
据南通公安微信公众号消息,今年4月,启东某大型超市的收银系统遭到攻击,被黑客植入勒索病毒,造成系统瘫痪无法正常运转。

接到报案后,南通市公安局的专案组对该超市的服务器进行数据勘验,发现黑客锁定的服务器中所有文件均被加密,文件的后缀名都变成了 “lucky”。
黑客还留下了比特币收款地址和邮箱联系方式,要求受害人必须支付1比特币(时价约合人民币47000元)作为破解费用。

随后,专案组做了大量工作,案情却始终没有进展,线索无处可寻,侦查陷入僵局。

这时,有意思的事情出现了。
据受害超市负责人反映,由于被锁服务器中有重要工作数据,格式化将带来巨大损失,于是他们还联系了外地一家数据恢复公司,以更低价格(少于1比特币)委托解锁加密文件,后来这家公司成功地对服务器数据进行了解密。
但专案组成员表示,没有病毒制作者的秘钥,几乎不可能完成解密。
因此专案组判断,这个所谓的数据恢复公司背后,肯定还有隐情。

经过走访调查,这家数据恢复公司的负责人最终吐露实情——原来,他们的解密方式,是通过邮箱直接与黑客取得联系,最终花了0.5比特币的代价得到解锁工具,从而顺利完成任务,赚取差价。

最后,专案组经过分析调查排除了数据恢复公司的作案嫌疑,成功锁定犯罪嫌疑人的真实身份为巨某。
5月7日,专案组在山东威海将巨某抓获归案,并在其居住地hai查获作案用的电脑。
民警在其电脑中还找到相关邮件记录、比特币交易记录以及相关勒索病毒工具的源代码。

微信图片_20210311141556.png

经查,巨某今年36岁,自幼喜好并自学钻研计算机知识,精通编程、网站攻防等技术,后成立工作室,利用自己开发的软件炒股,起初赚了不少钱,后亏损300多万元。
2017年下半年的某天,巨某偶然间得知有黑客用勒索病毒将他人电脑文件加密锁定后敲诈钱财,于是尝试自行开发病毒程序,通过研究 “永恒之蓝”工具以及 “撒旦”等勒索病毒,巨某编写了 “satan_pro”病毒程序用于作案。
为避免破解和逃避公安机关的追查,巨某又陆续升级开发了 4款勒索病毒,除了索要难以追查的比特币作为赎金。
巨某先后向400多家网站和计算机系统植入敲诈勒索病毒,受害单位涉及企业、医疗、金融等行业。
在相关案件中,苏州某上市科技公司的系统被巨某植入病毒,导致停产停工3天,损失巨大。

但在巨某的勒索过程中,总有那么一些企业“吃软不吃硬”,不愿意那么直接地交出赎金。
这时候,商机又来了。
数家数据恢复公司主动联系巨某寻求合作:一个负责“唱黑脸”植入病毒,一个“唱白脸”负责假装解密。
最终,巨某与谢某、谭某经营的一家数据恢复公司谈妥,到手后双方按比例分成。
6月4日,谢某、谭某也在广州落网了。目前,3名涉案犯罪嫌疑人均因涉嫌敲诈勒索罪被执行逮捕。

勒索软件,作为目前影响最大、发展最快、最受关注的网络安全威胁形式之一,其危害不容小觑。

这对财大气粗资金雄厚的大公司来说,支付赎金虽然肉疼,但也能接受。
但有的企业可能会因为被勒索后数据丢失而直接倒闭,甚至有的行业也会因为某一个勒索病毒直接洗牌。

2019年圣诞节前,就有一家公司因为勒索软件而倒闭,造成300多人失业。
并且,这样的勒索事件已经蔓延到政府、医疗、教育等网络防御能力较低的基础设施单位。
轻则导致这些单位门口办事的群众排起长龙,重则直接导致关门整顿。

对于一名普通人来说,我们能做的,就是及时修复系统漏洞、采用高强度密码、定期备份重要资料。
最重要的是,提高安全意识,千万千万千万不要点击来源不明的邮件,不要从不明网站下载软件!

转载于公众号“程序猿DD”


收起阅读 »

透视HTTPS建造固若金汤的城堡

为什么有 HTTPS?因为 HTTP 不安全! 现在的互联网已经不再是 “田园时代”,“黑暗森林” 已经到来。上网的记录会被轻易截获,网站是否真实也无法验证,黑客可以伪装成银行网站,盗取真实姓名、密码、银行卡等敏感信息,威胁人身安全和财产安全。上网的...
继续阅读 »

为什么有 HTTPS?因为 HTTP 不安全! 现在的互联网已经不再是 “田园时代”,“黑暗森林” 已经到来。上网的记录会被轻易截获,网站是否真实也无法验证,黑客可以伪装成银行网站,盗取真实姓名、密码、银行卡等敏感信息,威胁人身安全和财产安全。

上网的时候必须步步为营、处处小心,否则就会被不知道埋伏在哪里的黑客所“猎杀”。

HTTPS 如何实现安全通信?如何构建出固若金汤的网络城堡?主要涉及的知识点如下:

  • 了解什么是 HTTPS

  • 什么样的才是安全的通信

  • 对称加密与非对称加密、摘要算法、数字签名、完整性校验到底是什么

  • 迁移 HTTPS 的必要性

什么是安全

做事要稳,老司机【码哥字节】开车要安全!不管是戴杜蕾斯还是安全气囊,“安全至关重要”!

在通信过程中,具备以下特性则认为安全:机密性、完整性、不可否认、身份认证

机密性

数据必须保密,只能有信任的人读取,其他人是不可见的秘密。诸葛亮的密报总不能让司马懿知道呀,不然还玩个蛋。通俗的说:就是不能让不相关的人看到不该看的东西。

完整性

也叫作一致性,也就是数据在传输过程中没有被非法篡改,内容不能多也不能少,一五一十的保持原状。

打个比方,原本张无忌说:“赵敏,么么哒。”,传信的飞鸽被周芷若抓到了,截取了消息,改成了 “赵敏,去死吧!”。这么子搞,倚天屠龙记可能就会被改写了。

不可否认

也就做不可抵赖,不能否认已经发生过的事情。所谓 “君子一言,驷马难追”。“老懒” 这种事情不能发生。

就像尹志平亲密接触了小龙女,事后一直隐瞒否认,装作不知道,这是万万不可的。所以最终就嗝屁了。

身份验证

也就是确认对方的真实身份,“证明你是真的是你”,保证消息发送到可信的人,而不是非法之徒。

比如令狐冲写了一份情书给任盈盈:“盈盈,冲哥哥爱你哟”,但是岳不群看到快递小哥,冒充是令狐冲,截取了情书后回复:“傻逼,白日做梦”。令狐冲不知道这是岳不群的回复,以为是任盈盈的,笑傲江湖又要重写了……

所以同时具备了机密性、完整性、身份认证、不可否认四个特性,通信双方的安全才有保证,才是真正的安全。

什么是 HTTPS

到这里,终于轮到 HTTPS 上台了,也就是它为 HTTP 增加了刚刚说的四大安全特性。

HTTPS 其实是一个“非常简单”的协议,规定了新的协议名“https”,默认端口号 443,至于其他的什么请求 – 应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP,没有任何新的东西。唯一的差别就是端口号不同、去掉明文传输。

微信图片_20210311113558.png

那 HTTPS 凭啥就变得安全了呢?

就是因为他在 TCP/IP 与 HTTP 之间加上了 SSL/TLS ,从原来的 HTTP over TCP/IP 变成了HTTP over SSL/TLS,让 HTTP 运行在 安全的 SSL/TLS 协议上,安全开车。http与https

所以重点就是去掌握 SSL/TLS 到底是什么玩意成就了安全。

SSL/TLS

SSL 即安全套接层(Secure Sockets Layer),在 OSI 模型中处于第 5 层(会话层),由网景公司于 1994 年发明,有 v2 和 v3 两个版本,而 v1 因为有严重的缺陷从未公开过。

SSL 发展到 v3 时已经证明了它自身是一个非常好的安全通信协议,于是互联网工程组 IETF 在 1999 年把它改名为 TLS(传输层安全,Transport Layer Security),正式标准化,版本号从 1.0 重新算起,所以 TLS1.0 实际上就是 SSLv3.1。

TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。

浏览器与服务器在使用 TLS 建立连接的时候实际上就是选了一组加密算法实现安全通信,这些算法组合叫做 “密码套件(cipher suite)”。

套件命名很有规律,比如“ECDHE-RSA-AES256-GCM-SHA384”。按照 密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法”组成的.

所以这个套件的意思就是:使用 ECDHE 算法进行密钥交换,使用 RSA 签名和身份验证,握手后使用 AES 对称加密,密钥长度 256 位,分组模式 GCM,消息认证和随机数生成使用摘要算法 SHA384。

对称加密与非对称加密

前面提到四个实现安全的必要条件,先说 机密性,也就是消息只能给想给的人看到并且看得懂。

实现机密性的手段就是 加密(encrypt),也就是将原本明文消息使用加密算法转换成别人看不懂的密文,只有掌握特有的 密钥 的人才能解密出原始内容。就好像是诸葛亮将发给关二爷密报的内容通过一种转换算法转成其他的内容,司马懿看不懂。关二爷持有解密该内容的关键钥匙。

钥匙也就是 密钥(key),未加密的消息叫做 明文 (plain text/clear text),加密后的内容叫做 密文(cipher text),通过密钥解密出原文的过程叫做 解密(decrypt),而加解密的整个过程就是 加密算法。

由于 HTTPS、TLS 都运行在计算机上,所以“密钥”就是一长串的数字,但约定俗成的度量单位是“位”(bit),而不是“字节”(byte)。比如,说密钥长度是 128,就是 16 字节的二进制串,密钥长度 1024,就是 128 字节的二进制串。

加密算法通常有两大类:对称加密和非对称加密。

对称加密

加密和解密使用的密钥都是同一个,是 “对称的”。双方只要保证不会有泄露其他人知道这个密钥,通信就具有机密性。

对称加密算法常见的有 RC4、DES、3DES、AES、ChaCha20 等,但前三种算法都被认为是不安全的,通常都禁止使用,目前常用的只有 AES 和 ChaCha20。

AES 的意思是“高级加密标准”(Advanced Encryption Standard),密钥长度可以是 128、192 或 256。它是 DES 算法的替代者,安全强度很高,性能也很好,而且有的硬件还会做特殊优化,所以非常流行,是应用最广泛的对称加密算法。

加密分组模式

对称算法还有一个 “分组模式”的概念,目的是通过算法用固定长度的密钥加密任意长度的明文。

最新的分组模式被称为 AEAD(Authenticated Encryption with Associated Data),在加密的同时增加了认证的功能,常用的是 GCM、CCM 和 Poly1305。

非对称加密

有对称加密,为何还搞出一个非对称加密呢?

对称加密确实解决了机密性,只有相关的人才能读取出信息。但是最大的问题是:如何安全的把密钥传递对方,专业术语 “密钥交换”。

这个很容易理解,对称加密的密钥在飞鸽传书过程中被打鸟的敌军捕获窃取,那么就能随意加解密收发作战密报数据了,诸葛亮的密报没有机密可言。

所以非对称加密诞生了。

由两个密钥组成,分别是 公钥(public key) 和 “私钥(private key)”,两个密钥是不一样的,这也就是不对称的由来,公钥可以任何人使用,私钥则自己保密。

这里需要注意的是:公钥和私钥都可以用来加密解密,公钥加密的密文只能用私钥解密,反之亦然。

服务端保存私钥,在互联网上分发公钥,当访问服务器网站的时候使用授予的公钥加密明文即可,服务端则使用对应的私钥来解密。敌军没有私钥也就无法破解密文了。非对称加密

TLS 中常见的加密算法有 DH、RSA、ECC、DSA 等。其中的 RSA 最常用,它的安全性基于“整数分解”的数学难题,使用两个超大素数的乘积作为生成密钥的材料,想要从公钥推算出私钥是非常困难的。

ECC(Elliptic Curve Cryptography)是非对称加密里的“后起之秀”,它基于“椭圆曲线离散对数”的数学难题,使用特定的曲线方程和基点生成公钥和私钥,子算法 ECDHE 用于密钥交换,ECDSA 用于数字签名。

比起 RSA,ECC 在安全强度和性能上都有明显的优势。160 位的 ECC 相当于 1024 位的 RSA,而 224 位的 ECC 则相当于 2048 位的 RSA。因为密钥短,所以相应的计算量、消耗的内存和带宽也就少,加密解密的性能就上去了,对于现在的移动互联网非常有吸引力。

现在我们为了机密性从对称加密到非对称加密,而非对称加密还解决了密钥交换不安全的问题。那么是否可以直接使用非对称加密来实现机密性呢?

答案是否定的!

因为非对称加密运算速度比较慢。所以需要两者结合,混合模式实现机密性问题,同时又有很好的性能。

加密流程如下所示:

  1. 先创建一个随机数的对称加密密钥,会话密钥(session key);

  2. 使用会话密钥加密需要传输的明文消息,因为对称加密性能较好,接着再使用非对称加密的公钥对会话密钥加密,因为会话密钥很短,通常只有 16 字节或 32 字节,所以加密也不会太慢。这里主要就是解决了非对称加密的性能问题,同时实现了会话密钥的机密交换。

  3. 另一方接收到密文后使用非对称加密的私钥解密出上一步加密的 会话密钥,接着使用会话密钥解密出加密的消息明文。

混合加密

总结一下就是使用非对称加密算法来加密会话密钥,使用对称加密算法来加密消息明文,接收方则使用非对称加密算法的私钥解密出会话密钥,再利用会话密钥解密消息密文。

这样混合加密就解决了对称加密算法的密钥交换问题,而且安全和性能兼顾,完美地实现了机密性。

后面还有完整性、身份认证、不可否认等特性没有实现,所以现在的通信还不是绝对安全。

摘要算法与完整性

摘要算法的主要目的就是实现完整性,通过常见的散列函数、哈希函数实现。

我们可以简单理解成这事一种特殊的压缩算法,将任意长度的明文数据处理成固定长度、又是独一无二的“摘要”字符串,就是该数据的指纹。

同时摘要算法是单向加密算法,没有密钥,加密后的数据也无法解密,也就是不能从“摘要”推导出明文。

比如我们听过或者用过的 MD5(Message-Digest 5)、SHA-1(Secure Hash Algorithm 1),它们就是最常用的两个摘要算法,能够生成 16 字节和 20 字节长度的数字摘要。

完整性实现

有了摘要算法生成的数字摘要,那么我们只需要在明文数据附上对应的摘要,就能保证数据的完整性。

但是由于摘要算法不具有机密性,不能明文传输,否则黑客可以修改消息后把摘要也一起改了,网站还是鉴别不出完整性。

所以完整性还是要建立在机密性上,我们结合之前提到的混合加密使用 ”会话密钥“ 加密明文消息 + 摘要,这样的话黑客也就无法得到明文,无法做修改了。这里有个专业术语叫“哈希消息认证码(HMAC)”。哈希消息认证码(HMAC)

比如诸葛亮使用上面提到的混合加密过程给关二爷发消息:“明天攻城” + “SHA-2 摘要”,关二爷收到后使用密钥将解密出来的会话密钥解密出明文消息,同时对明文消息使用解密出来的摘要算法进行摘要计算,接着比对两份“摘要”字符串是否一致,如果一致就说明消息完整可信,没有被敌军修改过。

消息被修改是很危险的,要以史为鉴,比如赵高与李斯伪造遗诏,直接把扶苏给送西天了,这太可怕了。

总结下就是通过摘要比对防止篡改,同时利用混合加密实现密文与摘要的安全传输。

数字签名和 CA

到这里已经很安全了,但是还是有漏洞,就是通信的两头。黑客可以伪装成网站来窃取信息。而反过来,他也可以伪装成你,向网站发送支付、转账等消息,网站没有办法确认你的身份,钱可能就这么被偷走了。

现在如何实现身份认证呢?

现实生活中,解决身份认证的手段是签名和印章,只要在纸上写下签名或者盖个章,就能够证明这份文件确实是由本人而不是其他人发出的。

非对称加密依然可以解决此问题,只不过跟之前反过来用,使用私钥再加上摘要算法,就能够实现“数字签名”,同时实现“身份认证”和“不可否认”。

就是把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是私钥加密、公钥解密。但又因为非对称加密效率太低,所以私钥只加密原文的摘要,这样运算量就小的多,而且得到的数字签名也很小,方便保管和传输。

重点就是使用非对称加密的“私钥”加密原文的摘要,对方则使用非对称加密的公钥解密出摘要,再比对解密出的原文通过摘要算法计算摘要与解密出的摘要比对是否一致。这样就能像签署文件一样证明消息确实是你发送的。签名验签

只要你和网站互相交换公钥,就可以用“签名”和“验签”来确认消息的真实性,因为私钥保密,黑客不能伪造签名,就能够保证通信双方的身份。

CA

到这里似乎已经大功告成,可惜还不是。

综合使用对称加密、非对称加密和摘要算法,我们已经实现了安全的四大特性,是不是已经完美了呢?

不是的,这里还有一个“公钥的信任”问题。因为谁都可以发布公钥,我们还缺少防止黑客伪造公钥的手段,也就是说,怎么来判断这个公钥就是你或者张三丰的公钥呢?

这个“第三方”就是我们常说的CA(Certificate Authority,证书认证机构)。它就像网络世界里的公安局、教育部、公证中心,具有极高的可信度,由它来给各个公钥签名,用自身的信誉来保证公钥无法伪造,是可信的。

CA 对公钥的签名认证也是有格式的,不是简单地把公钥绑定在持有者身份上就完事了,还要包含序列号、用途、颁发者、有效时间等等,把这些打成一个包再签名,完整地证明公钥关联的各种信息,形成“数字证书”(Certificate)。

OpenSSL

它是一个著名的开源密码学程序库和工具包,几乎支持所有公开的加密算法和协议,已经成为了事实上的标准,许多应用软件都会使用它作为底层库来实现 TLS 功能,包括常用的 Web 服务器 Apache、Nginx 等。

由于 OpenSSL 是开源的,所以它还有一些代码分支,比如 Google 的 BoringSSL、OpenBSD 的 LibreSSL,这些分支在 OpenSSL 的基础上删除了一些老旧代码,也增加了一些新特性,虽然背后有“大金主”,但离取代 OpenSSL 还差得很远。

总结下就是:OpenSSL 是著名的开源密码学工具包,是 SSL/TLS 的具体实现。

迁移 HTTPS 必要性

如果你做移动应用开发的话,那么就一定知道,Apple、Android、某信等开发平台在 2017 年就相继发出通知,要求所有的应用必须使用 HTTPS 连接,禁止不安全的 HTTP。

在台式机上,主流的浏览器 Chrome、Firefox 等也早就开始“强推”HTTPS,把 HTTP 站点打上“不安全”的标签,给用户以“心理压力”。

Google 等搜索巨头还利用自身的“话语权”优势,降低 HTTP 站点的排名,而给 HTTPS 更大的权重,力图让网民只访问到 HTTPS 网站。

这些手段都逐渐“挤压”了纯明文 HTTP 的生存空间,“迁移到 HTTPS”已经不是“要不要做”的问题,而是“要怎么做”的问题了。HTTPS 的大潮无法阻挡,如果还是死守着 HTTP,那么无疑会被冲刷到互联网的角落里。

顾虑

阻碍 HTTPS 实施的因素还有一些这样、那样的顾虑,我总结出了三个比较流行的观点:“慢、贵、难”。

而“慢”则是惯性思维,拿以前的数据来评估 HTTPS 的性能,认为 HTTPS 会增加服务器的成本,增加客户端的时延,影响用户体验。

其实现在服务器和客户端的运算能力都已经有了很大的提升,性能方面完全没有担心的必要,而且还可以应用很多的优化解决方案

所谓“贵”,主要是指证书申请和维护的成本太高,网站难以承担。

这也属于惯性思维,在早几年的确是个问题,向 CA 申请证书的过程不仅麻烦,而且价格昂贵,每年要交几千甚至几万元。

但现在就不一样了,为了推广 HTTPS,很多云服务厂商都提供了一键申请、价格低廉的证书,而且还出现了专门颁发免费证书的 CA,其中最著名的就是“Let’s Encrypt”。

所谓的“难”,是指 HTTPS 涉及的知识点太多、太复杂,有一定的技术门槛,不能很快上手。

总结

从什么是安全我们延展出 HTTPS,解释了什么是 HTTPS,以及与 HTTP 的区别。HTTPS 主要就是通过 SSL/TLS 实现安全,而安全我们又接触了什么是对称加密与非对称加密,非对称加密性能较弱,所以我们使用非对称加密来加密对称加密的“会话密钥”,利用会话密钥加密明文解决了性能问题。

通过混合加密实现了机密性,利用摘要算法实现了完整性,通过数字签名使用非对称加密的“私钥”加密原文的摘要,对方则使用非对称加密的公钥解密出摘要,再比对解密出的原文通过摘要算法计算摘要与解密出的摘要比对是否一致实现了身份认证与不可否认。

转载于公众号“码个蛋”

收起阅读 »