【安全贴士】私钥分片和管道口令读取
通过一个私钥分片和管道口令读取的脚步来自动签发数字证书
通过一个私钥分片和管道口令读取的脚步来自动签发数字证书
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证书,以及对于已有的证书生成服务证书库和信任证书库。
本篇文章就是来个大家普及一下证书的格式。
根据不同的服务器以及服务器的版本,我们需要用到不同的证书格式,就市面上主流的服务器来说,大概有以下格式:
.DER .CER文件是二进制格式,只保存证书,不保存私钥。
.PEM,一般是文本格式,可保存证书,可保存私钥。
.CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。
.PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。
.JKS,二进制格式,同时包含证书和私钥,一般有密码保护。
DER该格式是二进制文件内容,Java 和 Windows 服务器偏向于使用这种编码格式。
首先通过PyQt5来创建一个GUI程序,比如我写的一个简单的计算器程序目录如下:
运行效果如下:
需要将这个GUI打包成windows上面的exe文件。发现了2个都能对python项目打包的工具:pyintaller和nuitka。
这2个工具同时都能满足项目的需要,两者都具备的优点: