使用mac 也有一年多了, 个人喜爱倒腾, 见到很棒的软件就跃跃欲试。 目前使用了几款不错的软件,分享出来。

Alfred

这软件基本算是每天都会用的软件, 解决了macos 开软件困难的问题。 这款软件非常实用,适合各类实用mac 人群,极大的提高了mac 使用效率

关于Alfred 使用方法,下面这篇文章中有详细说明

Alfred 效率神器全攻略

Artpip

这款软件非常有味道,会每天推送一幅画作当做电脑桌面, 画幅高清而细腻,有时候是莫奈、梵高此类如雷贯耳的大师之作,有时候是冷门而别有趣味的佳作;工作之余,细细品味,可以说是非常惊喜而满足了。

每天遇到一个新的灵魂

Magnet

Maget是Mac平台众多窗口管理应用中极为优秀的一款,使用它可以很方便地调整窗口的大小全屏半屏。 只需把要显示的内容拖拽到边或角,它就能根据窗口数量自动将其排布为 1/2 屏、1/4 屏或全屏。拖拽过程中有阴影提示,可以防止误操作。正在使用的窗口突出显示,便于快速识别。

这款软件可以让你方便的一边写代码,一边调试,方便的多任务切换,大大调高工作效率

magnet软件介绍

ParallelsDesktop

Parallels Desktop 在其实就是一款运行在苹果Mac电脑上安装Windows系统的虚拟机软件,这样就能够在Mac下非常方便的运行Widows操作系统的应用,并且可以轻松切换到苹果的Mac系统,对于苹果电脑用户来说还是很实用的。通过虚拟机(Parallels Desktop MAC版)你可以Mac OS X 下非常方便运行 Windows,Linux 等操作系统及应用,并能轻松在Win与Mac等不同系统之间切换,用户不必繁琐重复地重启电脑即可在 Win 与 Mac 之间切换。

这款软件也是一款神器, 安装虚拟机是十分方便。

Parallel Desktop 虚拟机安装教程

为了方便大家, 我将这些软件的安装包都上传到百度云上

百度云链接:

链接: https://pan.baidu.com/s/1gfMY9ov 密码: crft

在家里上网总是有很多网站不能上,很郁闷,以前的翻墙利器,xxnet也不能使用了,正好 最近在公司抢到100元腾讯云代金券,于是租了一台香港的服务器,准备搭建一个自己的vpn。 说干就干,整个过程不到半小时就完成了,下面将自己搭建vpn 服务器的过程记录如下.

作用

虚拟专用网络的功能是:在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。 简单说,对于我们最直观的功能就是可以翻墙,访问境外网站。

搭建VPN 服务器

在腾讯云上安装的系统是ubuntu 16.04, 这里是在ubuntu 下,安装PPTP VPN 服务 点对点隧道协议(PPTP)是VPN服务的一种最简单的实现协议,其它常见的VPN类型还有:使用IPsec的第2层隧道协议(L2TP/IPsec)、安全套接字隧道协议(SSL VPN)。 这里主要讨论PPTP VPN服务在Ubuntu上的安装和配置

第一步, 连接到server

第二步,使用 apt 源服务来安装pptpd 服务

pptpd 是一个vpn 服务端软件

$ sudo apt-get update

$ sudo apt-get install pptpd

安装完成后,进行第三步

第三步, 修改文件 /etc/pptpd.conf

$ sudo vi /etc/pptpd.conf

找到# TAG: localip一行,在后面添加以下2行:

localip 192.168.0.1

remoteip 192.168.0.234-238,192.168.0.245 

保存退出

第四步,设置dns, 修改文件/etc/ppp/pptpd-options

$ sudo vi /etc/ppp/pptpd-options

找到 #ms-dns这行,去掉前面的#号,修改成google提供的DNS server或其他DNS:

ms-dns 8.8.8.8 
ms-dns 8.8.4.4 

ms-dns 这一行代表dns 服务器地址。

第五步,设置账号密码, 修改文件 /etc/ppp/chap-secrets

$ sudo vi /etc/ppp/chap-secrets

按一行四列添加账号、服务器名、密码和IP限制。服务器名(默认 写pptpd 即可,务必与pptpd-options 文件的name一行一样)。如创建一个名为user,密码为userpasswd,不限制登录IP的VPN账号:

user pptpd userpasswd * 

例如:

test pptpd 123456 *

第六步,设置IP转发 修改文件 /etc/sysctl.conf

$ sudo vi /etc/sysctl.conf

去掉这一行 #net.ipv4.ip_forward=1 的#号,开启ipv4 forward,然后运行命令:

$ sudo sysctl –p

运行后会显示 net.ipv4.ip_forward = 1,就表示修改生效了。

第七步,使用iptables 建立一个NAT

首先安装iptables

$ sudo apt-get install iptables 
$ iptables -t nat -A POSTROUTING -s 192.168.0.1/24 -o eth0 -j MASQUERADE 

上面的24表示子网掩码,代表24个1. eth0是网卡名字,可以通过命令 ifconfig 查看自己的网卡.

为防止重启服务器后iptables丢失,先运行

$ iptables-save > /etc/iptables-rules

然后修改文件 /etc/network/interfaces ,在eth0/eth1.. 下面加入

pre-up iptables-restore < /etc/iptables-rules 

第八步,重启pptd 服务

$ sudo /etc/init.d/pptpd restart 

现在应该已经大功告成了。

第九步, 在client 端设置vpn 进行测试

注意client 中填写的server 地址是服务器的外网地址, 别弄成内网地址了。

下面是macos的vpn 配置

参考链接

Ubuntu14.04下搭建VPN服务

HTTPS 是最常见的HTTP安全版本, 以前常常使用,只明白HTTPS中的S是 SSL/TLS意思,而对其技术原理却不是很清晰。 在查阅一定的书籍和文章后,总结如下。

互联网的通信安全,建立在SSL/TLS协议之上。

作用

不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

  1. 窃听风险(eavesdropping):第三方可以获知通信内容。
  2. 篡改风险(tampering):第三方可以修改通信内容。
  3. 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

  1. 所有信息都是加密传播,第三方无法窃听。
  2. 具有校验机制,一旦被篡改,通信双方会立刻发现。
  3. 配备身份证书,防止身份被冒充。

HTTP与HTTPS的区别

  1. HTTP使用80 端口, HTTPS 使用443 端口
  2. HTTPS 使用的URL 以https:// 开头, 而http使用的URL 为http:// 开头
  3. HTTPS 在HTTP下面提供了一个传输级的密码安全层(SSL/TLS)

HTTPS中运用的加密算法

在完全理解HTTPS之前,有必要弄清楚一些密码学的相关概念,比如明文、密文、密码、密钥、对称加密、非对称加密、摘要、数字签名、数字证书。

密码(cipher)

密码学中的密码(cipher)和我们日常生活中所说的密码不太一样,计算机术语『密码 cipher』是一种用于加密或者解密的算法,而我们日常所使用的『密码 password』是一种口令,它是用于认证用途的一组文本字符串,这里我们要讨论的是前者:cipher。

密钥(key)

密钥是一种参数,它是在使用密码(cipher)算法过程中输入的参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。很多知名的密码算法都是公开的,密钥才是决定密文是否安全的重要参数,通常密钥越长,破解的难度越大,比如一个8位的密钥最多有256种情况,使用穷举法,能非常轻易的破解,知名的DES算法使用56位的密钥,目前已经不是一种安全的加密算法了,主要还是因为56位的密钥太短,在数小时内就可以被破解。密钥分为对称密钥与非对称密钥。

明文/密文

明文(plaintext)是加密之前的原始数据,密文是通过密码(cipher)运算后得到的结果成为密文(ciphertext)

对称密钥

对称密钥(Symmetric-key algorithm)又称为共享密钥加密,对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES、3DES、AES、RC5、RC6。对称密钥的优点是计算速度快,但是他也有缺点,密钥需要在通讯的两端共享,让彼此知道密钥是什么对方才能正确解密,如果所有客户端都共享同一个密钥,那么这个密钥就像万能钥匙一样,可以凭借一个密钥破解所有人的密文了,如果每个客户端与服务端单独维护一个密钥,那么服务端需要管理的密钥将是成千上万,这会给服务端带来噩梦

非对称加密

非对称密钥(public-key cryptography),又称为公开密钥加密,服务端会生成一对密钥,一个私钥保存在服务端,仅自己知道,另一个是公钥,公钥可以自由发布供任何人使用。客户端的明文通过公钥加密后的密文需要用私钥解密。非对称密钥在加密和解密的过程的使用的密钥是不同的密钥,加密和解密是不对称的,所以称之为非对称加密。与对称密钥加密相比,非对称加密无需在客户端和服务端之间共享密钥,只要私钥不发给任何用户,即使公钥在网上被截获,也无法被解密,仅有被窃取的公钥是没有任何用处的。常见的非对称加密有RSA,非对称加解密的过程:

  1. 服务端生成配对的公钥和私钥
  2. 私钥保存在服务端,公钥发送给客户端
  3. 客户端使用公钥加密明文传输给服务端
  4. 服务端使用私钥解密密文得到明文

数字签名(Digital Signature)

数据在浏览器和服务器之间传输时,有可能在传输过程中被冒充的盗贼把内容替换了,那么如何保证数据是真实服务器发送的而不被调包呢,同时如何保证传输的数据没有被人篡改呢,要解决这两个问题就必须用到数字签名,数字签名就如同日常生活的中的签名一样,一旦在合同书上落下了你的大名,从法律意义上就确定是你本人签的字儿,这是任何人都没法仿造的,因为这是你专有的手迹,任何人是造不出来的。那么在计算机中的数字签名怎么回事呢?数字签名就是用于验证传输的内容是不是真实服务器发送的数据,发送的数据有没有被篡改过,它就干这两件事,是非对称加密的一种应用场景。不过他是反过来用私钥来加密,通过与之配对的公钥来解密。

第一步:服务端把报文经过Hash处理后生成摘要信息Digest,摘要信息使用私钥private-key加密之后就生成签名,服务器把签名连同报文一起发送给客户端。

第二步:客户端接收到数据后,把签名提取出来用public-key解密,如果能正常的解密出来Digest2,那么就能确认是对方发的。

第三步:客户端把报文Text提取出来做同样的Hash处理,得到的摘要信息Digest1,再与之前解密出来的Digist2对比,如果两者相等,就表示内容没有被篡改,否则内容就是被人改过了。因为只要文本内容哪怕有任何一点点改动都会Hash出一个完全不一样的摘要信息出来

数字证书(Certificate Authority)

数字证书简称CA,它由权威机构给某网站颁发的一种认可凭证,这个凭证是被大家(浏览器)所认可的,为什么需要用数字证书呢,难道有了数字签名还不够安全吗?有这样一种情况,就是浏览器无法确定所有的真实服务器是不是真的是真实的,举一个简单的例子:A厂家给你们家安装锁,同时把钥匙也交给你,只要钥匙能打开锁,你就可以确定钥匙和锁是配对的,如果有人把钥匙换了或者把锁换了,你是打不开门的,你就知道肯定被窃取了,但是如果有人把锁和钥匙替换成另一套表面看起来差不多的,但质量差很多的,虽然钥匙和锁配套,但是你却不能确定这是否真的是A厂家给你的,那么这时候,你可以找质检部门来检验一下,这套锁是不是真的来自于A厂家,质检部门是权威机构,他说的话是可以被公众认可的(呵呵)。

同样的, 因为如果有人(张三)用自己的公钥把真实服务器发送给浏览器的公钥替换了,于是张三用自己的私钥执行相同的步骤对文本Hash、数字签名,最后得到的结果都没什么问题,但事实上浏览器看到的东西却不是真实服务器给的,而是被张三从里到外(公钥到私钥)换了一通。那么如何保证你现在使用的公钥就是真实服务器发给你的呢?我们就用数字证书来解决这个问题。数字证书一般由数字证书认证机构(Certificate Authority)颁发,证书里面包含了真实服务器的公钥和网站的一些其他信息,数字证书机构用自己的私钥加密后发给浏览器,浏览器使用数字证书机构的公钥解密后得到真实服务器的公钥。这个过程是建立在被大家所认可的证书机构之上得到的公钥,所以这是一种安全的方式。

基本运行过程

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。 但是,这里有两个问题。

  • 如何保证公钥不被篡改

解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

  • 公钥加密计算量太大,如何减少消耗的时间

解决方法:每一次对话(session),客户端和服务器端都生成一个”对话密钥”(session key),用它来加密信息。由于”对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密”对话密钥”本身,这样就减少了加密运算的消耗时间。

因此,SSL/TLS 协议的基本过程是这样的:

  1. 客户端向服务器端索要并验证公钥。
  2. 双方协商生成”对话密钥”。
  3. 双方采用”对话密钥”进行加密通信。

上面过程的前两步,又称为SSL的“握手阶段”。

在HTTPS中,客户端首先打开一条到web 服务器端口443 的连接。一旦建立了TCP连接, 客户端和服务器就会初始化SSL层, 对加密参数进行沟通,并交换密钥,握手完成之后,SLL初始化就完成了, 客户端就可以将请求报文发送给安全层了,在将这些报文发送给TCP之前,要先对其进行加密。

握手的详细过程如下:

握手阶段”涉及四次通信,我们一个个来看。需要注意的是,”握手阶段”的所有通信都是明文的。

客户端发出请求(ClientHello)

首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。 在这一步,客户端主要向服务器提供以下信息。

  1. 支持的协议版本,比如TLS 1.0版。
  2. 一个客户端生成的随机数,稍后用于生成”对话密钥”。
  3. 支持的加密方法,比如RSA公钥加密。
  4. 支持的压缩方法。

服务器回应(ServerHello)

服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容。

  1. 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
  2. 一个服务器生成的随机数,稍后用于生成”对话密钥”。
  3. 确认使用的加密方法,比如RSA公钥加密。
  4. 服务器证书

除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供”客户端证书”。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书

客户端回应

客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。 如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

  1. 一个随机数。该随机数用服务器公钥加密,防止被窃听。
  2. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称”pre-master key”。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把”会话密钥”。

此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

服务端的最后回应

服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的”会话密钥”。然后,向客户端最后发送下面信息。

  1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  2. 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用”会话密钥”加密内容。

参考链接

SSL/TLS协议运行机制的概述

HTTPS中运用的加密算法

我猜你十岁开始恋爱,

还兼任大队长和不良少女;

我猜你是摸头也是娇娃,

叱咤职场,所向披靡;

我猜你爱品红酒,

也不放过黑暗料理;

我猜你乐于素面朝天,

也享受红杉绿衣。

我喜欢你,

因为你只为真心喜爱的生活付出悲喜。


我偏爱写诗的荒谬,

胜过不写诗的荒谬。

我也有偏爱,

我偏爱沉默;

偏爱距离;

偏爱笨拙的善良;

偏爱各不相欠;

偏爱慌张的破绽,

胜过圆滑的完美;

偏爱,小部分人。