OpenSSL是一套件开放源代码的安全套接字密码学基础库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL/TLS协议,并提供丰富的API,以供应用程序开发、测试或其它目的使用。它广泛地集成在各种类型的操作系统中,作为其基础组件之一,深爱广大IT爱好者的喜爱。即使用某些操作系统没有将其集成为组件,通过源代码下载,也是十分轻松地构建OpenSSL的开发及应用环境。
尽管OpenSSL的功能十分强大且丰富,然而对于中国商用密码体系的算法及相关应用来说,它距离我们还是十分遥远,因为它仅仅包含的国际通用的密码算法、认证体系及相关协议,却没有将中国商用密码体系中的公开算法SM2、SM3、SM4及祖冲之流密码算法纳入其中,也不支持双证书体系的应用及相关协议。这对于推广及研究中国商用密码体系的广大密码爱好者来说,却是十分无奈的事情。 国内也存在着不少密码界同仁,尝试着将OpenSSL国密化,但其大多都局限于公司内部交流使用,这对于国密SSL的推广不利。针对这种现状,北京江南天安公司经过长时间的研究分析,于2017年上半年推出天安版国密OpenSSL,也就是TaSSL,解决了中国商用密码体系无法构建基于OpenSSL应用的实际问题。现以源码的形式提供出来,供大家参考使用,为促进国密的推广和应用贡献自己的一份力量。
将国密算法SM2、SM3、SM4及祖冲之流密码算法作为OpenSSL的内置算法,并且严格按照《GMT 0006-2012 密码应用标识规范》定义的OID来对相关国密算法进行标识;
将SM2作为EC的内置曲线,可通过ECDSA、ECDH分别完成SM2的签名和密钥协商;
可通过 EVP_DigestSignInit、 EVP_DigestSignUpdate、 EVP_DigestSignFinal EVP_DigestVerifyInit、 EVP_DigestVerifyUpdate、 EVP_DigestVerifyFinal 智能化、自动化完成SM2的签名和验签过程;
实现SM2公钥加密算法的同时,也将ECIES的公钥加密算法添加到OpenSSL中,可完成国际EC曲线的公钥加密;
可通过引擎的方式来实现SM1算法的应用;
实现了《GMT 0024-2014 SSL VPN技术规范》中与SM2相关的国密TLSv1.1的密码套件;
添加了对中国商用密码体系的双证书的支持;
完善了OpenSSL命令行工具对中国商用密码体系算法的支持;
完善了X509对中国商用密码体系的支持。
在openssl-1.1.1d上完成ECC-SM4-SM3的套件移植,参考江南天安的代码 https://github.com/jntass/TASSL.git 和蚂蚁沟通,他们希望我们先在江南天安的openssl上先跑通一个完整的SSL握手过程,再对比CCP的性能。 目前完成基于江南天安的openssl跑通了一个完整的SSL握手过程,下一步在tassl上使能CCP功能给出性能数据。 1,下载代码
#!/bin/bash # Cross-compile environment for Android on ARMv7 # # Contents licensed under the terms of the OpenSSL license # http://www.openssl.org/source/license.html # Set ANDROID_NDK_ROOT to you ND
由于官方都没有相应的编译脚本,自己也摸索了好久,特意记录下来。 源码目录 TASSL-xx 脚本文件 compile-v7.sh compile-v7s.sh compile-arm64.sh 内容如下: #!/bin/bash OUT_DIR=out-v7 rm -rf $OUT_DIR cd TASSL-v7 make clean # 设置编译器 export CC="clang
openssl/gmssl/tassl常用命令整理 整理一波工作中经常用到的openssl/gmssl/tassl命令.省的每次忘了还得上百度查. 查看证书详细内容及结构. openssl x509 -in xxx.pem/xxx.cer -text -inform pem/der 查看私钥详细内容. openssl pkey -in xxx.key -text pkcs7转pem openssl
工程领域从来没有黑科技;密码学不是工程。 密码学在信息技术领域的重要地位无需多言。如果没有现代密码学的研究成果,人类社会根本无法进入信息时代。 密码学领域十分繁杂,本章将介绍密码学领域中跟区块链相关的一些基础知识,包括 hash 算法与摘要、加密算法、数字签名和证书、PKI 体系、Merkle 树、同态加密等,以及如何使用这些技术实现信息的机密性、完整性、认证性和不可抵赖性。
由于PHP语言在建立基于数据库驱动的动态网站所表现的高度灵活性,它已成为最流行的网站开发工具之一。它同时还可以与其它开源软件如MySql数据库和Apache服务器完美结合。但是,随着越来越多的网站使用PHP开发,它们也成为了恶意攻击者的目标,因此,开发者必须要做到应对攻击的准备。
问题内容: 我正在尝试在两个Java项目之间建立安全连接,但是却遇到了SSLHandshakeException(没有通用密码套件)的问题。这是在两侧创建套接字的方法: 客户: 服务器: 我有一个用keytool生成的RSA密钥。此代码从磁盘加载它。 我做错了什么? 更新: 我在此数组的两侧添加了对setEnabledCipherSuites的调用: 我得到相同的结果。 问题答案: 在服务器端,你
我试图在两个Java项目之间建立安全连接,但我得到了一个SSLHandshakeException(没有共同的密码套件)。这是在双方创建套接字的方法: 客户: 服务器: 我有一个使用keytool生成的RSA密钥。此代码从磁盘加载它。 我做错了什么? 更新:我用这个数组在两边添加了对setEnabledCipherSuites的a调用: 我得到同样的结果。
问题内容: 如果我有多个Java线程同时写入同一Socket实例,这会影响从同一套接字读取的对象的完整性吗?即,对象的内容是否会被弄乱等等。对象的顺序可以是随机的。 问题答案: 通常,没有任何保证。一点点不同的对象很可能最终会在电线上交错,使结果难以辨认。 因此,您需要提供外部同步。 有趣的是,即使在OS级别进行单个套接字写入也不一定是原子操作。有关进一步的讨论,请参见注意sendmsg()系列函
问题内容: 我是Go的新手,正在为一个项目进行评估。 我正在尝试编写一个自定义处理程序来为提供文件。我无法使用默认处理程序,因为我需要访问基础套接字(内部),因此可以在其上执行一些信息平台特定的“ syscall”调用(主要是)。 更确切地说:我需要在处理程序函数中访问的基础套接字: 用在 有没有办法做到这一点。我看了看这是怎么做的,但是它使用了“太多”的内容,因为然后我必须在获得的原始tcp套接
本节总结了本书中涉及的有关线性代数、微分和概率的基础知识。为避免赘述本书未涉及的数学背景知识,本节中的少数定义稍有简化。 线性代数 下面分别概括了向量、矩阵、运算、范数、特征向量和特征值的概念。 向量 本书中的向量指的是列向量。一个$n$维向量$\boldsymbol{x}$的表达式可写成 $$\boldsymbol{x} = \begin{bmatrix} x{1} \ x{2} \ \vdot
字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概念。本文主要分以下几个部分介绍: 基本概念 常见字符编码简介 Python 的默认编码 Python2 中的字符类型 UnicodeEncodeError & UnicodeDecodeError 根源 基本概念 字符(Character)