【安全贴士】设置代理的时候保护个人密码
一般设置代理方式是vi /etc/profile
,然后添加下面内容
1 | export http_proxy = http://username:password@yourproxy.com:8080/ |
但是这种直接在配置文件里面写自己域账号的明文密码很不安全,如果是几个人共享一台机器,其他人可以直接看到你的密码。
一般设置代理方式是vi /etc/profile
,然后添加下面内容
1 | export http_proxy = http://username:password@yourproxy.com:8080/ |
但是这种直接在配置文件里面写自己域账号的明文密码很不安全,如果是几个人共享一台机器,其他人可以直接看到你的密码。
生成签名用的公私钥对
1 | # 生成私钥 |
通过一个私钥分片和管道口令读取的脚步来自动签发数字证书
Essentially, get hold of the default trust manager, create a second trust manager that uses your own trust store. Wrap them both in a custom trust manager implementation that delegates call to both (falling back on the other when one fails).
SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书。 服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书。但是,如果服务器需要对客户端进行身份验证, 该怎么办?这就需要双向认证证书。
为什么需要另一种认证方式的证书?因为当同时使用两种认证方式的证书时,有助于双方(即客户端和服务器端)之间的相互认证。 另外,与标准SSL证书不同的是,双向认证的SSL证书实际上被称作为个人认证证书(PAC)。
双向认证流程图如下:
本篇直接通过代码演示如何在Java实现证书的双向认证。
密码学领域有对称加密和非对称加密算法,本篇将使用Java语言来实现几种常见的加解密算法。
完整源码请参考 GitHub源码
对称加密算法概念
加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆。
特点:算法公开、(相比非对称加密)计算量小、加密速度快、效率高。
弱点:双方都使用同样的密钥,安全性得不到保证。
常用对称加密算法
这里只列出最常用的AES算法实现,也是安全等级最高,推荐使用的对称加密算法,其他实现请参考我的GitHub上的源码。
1.修改openssl配置文件
通过vi编辑文件/etc/pki/tls/openssl.cnf
,更新内容如下,有的部分是更新,有的是增加。
1 | [ CA_default ] |
**强烈提醒:**如果是要做客户端证书认证,证书类型一定要选v3_server_client
X.509 v3证书定义的扩展为用户或公钥以及在CA间的管理提供了额外的功能。X.509 v3证书的格式允许组织使用私有的扩展。 证书中的扩展被定义为critical
或non-critical
。
一个使用证书的系统在接收到设置为critical但无法识别或无法处理的证书时,必须拒绝处理该证书。 一个non-critical
的证书在无法识别时可能会被忽略。
生成自签名证书命令
1 | keytool -genkey -v -alias oauth2 -keyalg RSA -validity 3650 -keystore server.jks |
导出证书命令
1 | keytool -exportcert -rfc -alias oauth2 -file server.crt -keystore server.jks -storepass 123456 |
CipherSuite
这个名词目前没看到有好的中文翻译,个人觉得翻译成加密算法套件
比较合适。 Cipher泛指是密码学的加密算法,例如 aes
, rsa
, ecdh
等。
tls是由各类基础算法作为原语组合而成,一个CipherSuite是4个算法的组合:
比如一个例子TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
。 表示的含义是TLS_ECDHE(密钥交换算法)_RSA(身份认证算法)_WITH_AES_128_GCM(AES128GCM对称加密算法)
_SHA256(完整性包含的MAC算法)。
这里演示如何通过命令行一键生成自签名CA证书,以及对于已有的证书生成服务证书库和信任证书库。