[Protocol] SSL/TLS
文章平均质量分 62
关于OpenSSL和GmSSL的学习
阿卡基-马
业余马拉松选手
展开
-
gmssl 在Windows下的编译注意事项
如果不加no-sdf,make -j4的时候会报错。原创 2023-11-07 14:00:04 · 214 阅读 · 0 评论 -
EVP_PKEY_cmp
Since OpenSSL private keys contain public key components too the function EVP_PKEY_cmp() can also be used to determine if a private key matches a public key.原创 2022-10-26 11:08:03 · 322 阅读 · 0 评论 -
认识时间戳
时间戳指使用数字签名技术对包含原始文件信息、签名参数、签名时间等信息构成的对象进行数字签名而产生的数据,用以证明原始文件在签名时间之前就已经存在。可信时间戳(TSA)服务的本质是将用户的电子数据的Hash值和权威时间源绑定,在此基础上通过时间戳服务中心数字签名,产生不可伪造的时间戳文件。可信时间戳是解决《中华人民共和国电子签名法》中对数据电文原件形式要求的必要技术保障。一个可信时间戳包括四个部分:1.需加时间戳的文件的摘要;2.时间戳服务中心收到文件的日期和时间;转载 2022-10-19 15:42:41 · 626 阅读 · 0 评论 -
OpenSSL---堆栈
堆栈是一种先进后出的数据结构。是一种只允许在其一端进行插入或者删除的线性表。允许插入或删除操作的一端为栈顶,另一端称为栈底。对堆栈的插入和删除操作称为入栈和出栈。1.1 概述OpenSSL大量采用堆栈来存放数据。它实现了一个通用的堆栈,可以方便的存储任意数据。它实现了许多基本的堆栈操作,主要有:堆栈拷贝(sk_dup)、构建新堆栈(sk_new_null,sk_new)、插入数据(sk_insert)、删除数据(sk_delete)、查找数据(sk_find,sk_find_ex)、入栈(s...转载 2022-05-16 15:08:41 · 416 阅读 · 0 评论 -
RSA_public_encrypt
#include <openssl/rsa.h> int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_private_decrypt(int flen, const unsigned char *from, unsign..原创 2022-01-19 11:30:58 · 4161 阅读 · 0 评论 -
RSA那些坑
(注:因gongji是敏感词,改成拼音或者attack了)1.背景最近生产上出了两个因为RSA加解密导致的性能问题,一个是加密引起的,一个是解密引起的,都是大量线程在进行RSA操作时等锁,线程被block,请求都被堆在Weblogic队列里不能处理。为此,我就研究了一下RSA加解密在Java里的实现,发现加解密的问题都出现在同一个地方。因为RSA加解密使用的方法都是同一个,就是计算ae mod n,也就是模幂运算,在做这个运算的时候,为了防范gongji,需要加入随机因素,寻找一个blinding转载 2022-01-19 09:35:02 · 1078 阅读 · 0 评论 -
调用Openssl库中的RSA_public_encrypt函数成功的概率随机,是什么原因?
作者:whichone链接:https://www.zhihu.com/question/23534026/answer/25539684来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。最近也遇到这个问题,试着回答下。简单的说,RSA算法中密钥与明文、密文都当成大数处理,密钥数值上要大于明文。具体展开,先看看RSA算法的流程。以下摘自维基百科。公钥和私钥的产生1. 随意选择两个大的质数p和q,p不等于q,计算N=pq。2. 根据欧拉函数,求得r.转载 2022-01-14 17:25:39 · 1564 阅读 · 0 评论 -
[SSL] GMSSL 客户端证书验证失败的原因
当使用 ECC_SM4_SM3 算法时,双向认证 客户端发送验证消息时,要使用签名证书的key进行签名,不然 server验证会失败。#ifndef OPENSSL_NO_GMTLSif (SSL_IS_GMTLS(s) && s->cert->pkeys[SSL_PKEY_SM2].privatekey)pkey = s->cert->pkeys[SSL_PKEY_SM2].privatekey;else#endifpkey = s->cert-&原创 2021-12-06 16:56:48 · 3266 阅读 · 0 评论 -
TLS/SSL 协议详解 (19) Encrypted handshake message
目的:这个报文的目的就是告诉对端自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。其次,这个报文作用就是确认秘钥的正确性。因为Encrypted handshake message是使用对称秘钥进行加密的第一个报文,如果这个报文加解密校验成功,那么就说明对称秘钥是正确的。原理:首先,无论是客户端还是服务端,都会在握手完成之后,发送 Encrypted handshake message,且各自收到对端的Encrypted handshake message后会去..转载 2021-12-03 11:22:10 · 696 阅读 · 0 评论 -
openssl X509_verify_cert
#include <openssl/x509.h> int X509_verify_cert(X509_STORE_CTX *ctx);DESCRIPTIONThe X509_verify_cert() function attempts to discover and validate a certificate chain based on parameters inctx. A complete description of the process is containe...原创 2021-12-02 13:42:44 · 4421 阅读 · 0 评论 -
x509_get0_pubkey 和 x509_get_pubkey的区别
X509_get_pubkey() attempts to decode the public key for certificatex. If successful it returns the public key as anEVP_PKEYpointer with its reference count incremented: this means the returned key must be freed up after use. X509_get0_pubkey() is simila...原创 2021-12-01 11:19:44 · 1209 阅读 · 0 评论 -
TLS握手的OpenSSL实现(深度1)
我们跳过握手的总状态机和读写状态机,因为我认为那是OpenSSL架构方案的一个败笔,逻辑非常的不清晰,是程序员思维,而不是正常的逻辑思维。与握手逻辑比较相关的在statem_clnt.c和statem_srv.c中。分别是客户端的握手逻辑和服务端的握手逻辑。我们以服务端为重点来分析。一个简单的函数列表就能看出来其中的大体逻辑。对于服务器来说,是被动的处理消息,响应客户端请求的一方。所以所有的发送都是有接收来触发,接收对应的函数典型的就是tls_process_开头的函数,而发送所对应的函数就是t转载 2021-11-30 17:13:31 · 2412 阅读 · 0 评论 -
openssl state_machine
/* * The main message flow state machine. We start in the MSG_FLOW_UNINITED or * MSG_FLOW_RENEGOTIATE state and finish in MSG_FLOW_FINISHED. Valid states and * transitions are as follows: * * MSG_FLOW_UNINITED MSG_FLOW_RENEGOTIATE * | .原创 2021-11-30 09:07:09 · 2878 阅读 · 0 评论 -
openssl read_state_machine
/* * This function implements the sub-state machine when the message flow is in * MSG_FLOW_READING. The valid sub-states and transitions are: * * READ_STATE_HEADER <--+<-------------+ * | | | * v .原创 2021-11-29 15:18:16 · 2844 阅读 · 0 评论 -
Session会话恢复:两种简短的握手总结SessionID&SessionTicket
目录完整的握手会话恢复Session ID会话恢复流程回退攻击Session ID分布式负载均衡问题SessionTicket恢复过程NewSessionTicket子消息完整的握手当客户端和服务器端初次建立TLS握手时(例如浏览器访问HTTPS网站),需要双方建立一个完整的TLS连接,该过程为了保证数据的传输具有完整性和机密性,需要做很多事情,密钥协商出会话密钥,数字签名身份验证,消息验证码MAC等,整个握手阶段比较耗时的地方是密钥协商,需要密集的CPU处理。当客转载 2021-11-29 14:38:26 · 1077 阅读 · 0 评论 -
tls_process_client_hello
MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt){ int i, al = SSL_AD_INTERNAL_ERROR; unsigned int j, complen = 0; unsigned long id; const SSL_CIPHER *c;#ifndef OPENSSL_NO_COMP SSL_COMP *comp = NULL;#endif STACK_O.原创 2021-11-29 13:55:31 · 593 阅读 · 0 评论 -
openssl 读状态机
/* * Process a message that the client has been received from the server. */MSG_PROCESS_RETURN ossl_statem_client_process_message(SSL *s, PACKET *pkt){ OSSL_STATEM *st = &s->statem; switch (st->hand_state) { case TLS_ST_CR_SRVR_.原创 2021-11-26 16:34:41 · 2066 阅读 · 0 评论 -
openssl write_state_machine
/* * This function implements the sub-state machine when the message flow is in * MSG_FLOW_WRITING. The valid sub-states and transitions are: * * +-> WRITE_STATE_TRANSITION ------> [SUB_STATE_FINISHED] * | | * | v * | .原创 2021-11-26 16:26:18 · 220 阅读 · 0 评论 -
SSL 握手分析
int SSL_connect(SSL *s){ if (s->handshake_func == NULL) { /* Not properly initialized yet */ SSL_set_connect_state(s); } return SSL_do_handshake(s);}原创 2021-11-26 15:48:09 · 2571 阅读 · 0 评论 -
使用 OpenSSL API 建立安全连接 - 双向认证
使用 OpenSSL API 进行安全编程一、概念:1.什么是 SSL?SSL 是一个缩写,全称是 Secure Sockets Layer。它是支持在 Internet 上进行安全通信的标准,并且将数据密码术集成到了协议之中。数据在离开您的计算机之前就已经被加密,然后只有到达它预定的目标后才被解密。证书和密码学算法支持了这一切的运转,使用 OpenSSL,您将有机会切身体会它们。可以将 SSL 和安全连接用于 Internet 上任何类型的协议,...转载 2021-11-18 09:52:28 · 370 阅读 · 0 评论 -
CRL介绍
证书撤销列表(Certificate Revocation List,简称CRL),是一种包含撤销的证书列表的签名数据结构。CRL是证书撤销状态的公布形式,CRL就像信用卡的黑名单,用于公布某些数字证书不再有效。CRL是一种离线的证书状态信息。它以一定的周期进行更新。CRL可以分为完全CRL和增量CRL。在完全CRL中包含了所有的被撤销证书信息,增量CRL由一系列的CRL来表明被撤销的证书信息,它每次发布的CRL是对前面发布CRL的增量扩充。基本的CRL信息有:被撤销证书序列号、撤销时间、撤销原因、原创 2021-11-17 10:46:32 · 5104 阅读 · 0 评论 -
Openssl X509_STORE_CTX系列函数
DESCRIPTIONThese functions initialise anX509_STORE_CTXstructure for subsequent use by X509_verify_cert().X509_STORE_CTX_new() returns a newly initialisedX509_STORE_CTXstructure.X509_STORE_CTX_cleanup() internally cleans up anX509_STORE_CTXstruc...原创 2021-11-16 21:31:16 · 3134 阅读 · 0 评论 -
openssl 官方例子:验证证书
static int check(X509_STORE *ctx, const char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, STACK_OF(X509_CRL) *crls, int show_chain){ X509 *x = NULL; int i = 0, ret = 0; X509_STORE_CTX *csc; STAC.原创 2021-11-16 21:22:51 · 1385 阅读 · 0 评论 -
X509_STORE
TheX509_STOREstructure is intended to be a consolidated mechanism for holding information about X.509 certificates and CRLs, and constructing and validating chains of certificates terminating in trusted roots. It admits multiple lookup mechanisms and eff..原创 2021-11-16 20:39:19 · 401 阅读 · 0 评论 -
X509数字证书
主要函数1) X509_STORE_add_cert将证书添加到X509_STORE中。1)X509_STORE_add_crl将crl添加到X509_STORE中。2)void X509_STORE_set_flags(X509_STORE *ctx, long flags)将flags赋值给ctx里面的flags,表明了验证证书时需要验证哪些项。4) X509_TRUST_set_default设置默认的X509_T...原创 2021-11-16 18:50:26 · 5293 阅读 · 0 评论 -
密码功能实现示例
本节从实现角度,给出实现保密性、完整性、真实性和不可否认性等密码功能的典型方法,也是对密码算法的具体应用和总结。1 保密性实现信息保密性保护的目的是避免信息泄露或暴露给未授权的实体。实现保密性保护有三种基本方法:一是访问控制的方法,防止敌手访问敏感信息;二是信息隐藏的方法,避免敌手发现敏感信息的存在;三是信息加密的方法,允许敌手观测到信息的表示,但是无法从表示中得到原始信息的内容或提炼出有用的信息。加密是数据通信和数据存储中实现保密性保护的一种主要机制,保密性保护也是密码技术最初的目标。对于加密机原创 2021-11-11 15:21:31 · 2210 阅读 · 0 评论 -
走进硬件时代的身份认证(三):网银U盾安全认证原理解析
编者按:你是不是曾经疑惑,开通网银为什么一定要配发U盾呢?今天这篇推送或许可以回答你这个问题。U盾(USBkey),即银行系统在2003年推出并获得国家专利的客户证书USBkey的俗称,是银行提供的办理网上银行业务的高级别安全工具。它外形酷似U盘,像一面盾牌,时刻保护着网上银行资金安全。U盾是用于网上银行电子签名和数字认证的工具,它内置微型智能卡处理器,采用1024位非对称密钥算法对网上数据进行加密、解密和数字签名,确保网上交易的保密性、真实性、完整性和不可否认性。本文节选汪德嘉博士《身份危机》一书中U盾(转载 2021-11-06 19:43:44 · 5828 阅读 · 0 评论 -
ca证书原理以及加密原理
转自:数字证书原理 - 无恙 - 博客园尊重原创文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书。如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出!1、基础知识 这部分内容主要解释一些概念和术语,最好是先理解这部分内容。1.1、公钥密码体制(public-key cr...转载 2021-11-06 10:05:39 · 4176 阅读 · 0 评论 -
服务器密码机的标准和产品应用要点
服务器密码机的服务接口遵循GM/T 0018-2012《密码设备应用接口规范》,其功能、硬件、软件、安全性等遵循GM/T 0030-2014《服务器密码机技术规范》。下面根据上述产品标准给出应用要点。③设备密钥:与用户密钥类似,设备密钥是服务器密码机的身份密钥,包括签名密钥对和加密密钥对,用于设备管理,代表服务器密码机的身份。设备密钥的签名密钥对在设备初始化时通过管理工具生成或者安装,加密密钥由密钥管理系统下发到设备中,设备密钥对存储在服务器密码机内部的安全存储区域。事实上,设备密钥和用户密钥存储在同一原创 2021-11-01 09:17:14 · 3174 阅读 · 0 评论 -
双证书体系
公钥密码的密钥既可以用于加密应用,又可以用于签名应用。然而,一方面,监管和用户自身的密钥恢复需求要求私钥在用户之外得到备份;另一方面,数字签名应用的私钥不能在用户之外再有备份。作为同时满足加密和签名两方面看似矛盾的需求解决方案,能够区分签名证书和加密证书的“双证书体系”得以引入。目前我国PKI系统采用的就是双证书体系。在我国双证书体系中,用户同时具有两个私钥,分别称为签名私钥和加密私钥。签名私钥由用户在本地生成并专有掌握,对应的证书被称为“签名证书”;加密私钥用于解密和密钥交换,由专门的可信机构(如密钥管原创 2021-10-26 16:40:03 · 3533 阅读 · 0 评论 -
密码杂凑算法的应用
密码杂凑算法的直接应用就是产生消息摘要,进一步可以检验数据的完整性,被广泛应用于各种不同的安全应用和网络协议中。例如,用户收到消息后,计算其杂凑值,并与发送方提供的结果做比对,如果二者一致,则基本认为消息在传送过程中没有遭到篡改(由于“抗第二原像攻击”的性质)。需要注意的是,单独使用杂凑算法并不能保证数据的完整性,因为在传输信道不安全的情况下,攻击者可以将消息和杂凑值一同篡改,即在修改或替换消息后重新计算一个杂凑值。因此,用于完整性保护时,杂凑算法常常与密钥一同使用,生成的杂凑值称为MAC,这样的杂凑算法称原创 2021-10-25 16:48:35 · 1462 阅读 · 0 评论 -
啥?双证书?
国密标准对于SSL通信定义得不是很清楚,所能依仗的标准只有《GMT 0024-2014 SSL VPN 技术规范》。在文档中提到,国密TLS需要有签名证书和加密证书。开发伊始并没有注意到这个细节,以至于在后面的联调中吃了很多苦头。现将双证书的概念以及配置方法总结一下,希望对大家有所帮助。何为单证书和双证书?通常情况下,服务器会部署一张证书,用于签名和加密,这就是所谓的单证书:签名时,服务器使用自己的私钥加密信息的摘要(签名),客户端使用服务器的公钥(包含在证书中)进行解密,对比该摘要是否正确,若正转载 2021-10-22 14:08:51 · 1051 阅读 · 0 评论 -
国密技术规范中的“双证书”,你知道多少?
相信了解国密应用的朋友都听说过双证书。那么这个双证书到底是怎么回事呢?但我们今天说的双证书是指国家商用密码体系中的双证书(加密证书+签名证书),而不是站点部署自适应的双证书(SM2算法证书+RSA算法证书),先跟童鞋们讲清楚,以免混淆。好的,今天我们就详细来聊一聊。什么是双证书?首先我们来明确一下双证书到底指的是什么,先来看国家密码管理局颁布的《GMT0024-2014 SSL VPN 技术规范》(以下称“技术规范”)中有关于双证书的描述。在5.2.2章节里就说明了服务端双证书的性质和作转载 2021-10-22 13:51:51 · 8520 阅读 · 1 评论 -
netty实现gmssl_gmssl国密总结
1、gmssl组成分为加密和通信两部分2、加密主要指的是sm2 sm3 sm4加密算法,以及相关的加密组件3、通信指的是gmtls按照一个 GM/T 0024-2014规范实现的,采用双证书,签名证书+加密证书4、生成证书可使用地址https://github.com/jntass/TASSL/tree/master/Tassl_demo/mk_tls_cert 下的SM2certgen.sh生成双证书。注意:生成请求时指定的摘要算法 在用请求生成证书时并不生效,需要重新转载 2021-02-01 17:03:09 · 1567 阅读 · 1 评论 -
Wireshark无法识别SSL/TLS流量
默认只认443端口流量,添加正在使用的端口就可以识别原创 2021-10-21 14:53:34 · 1220 阅读 · 0 评论 -
❤️《GM/T 0024-2014: SSL 技术规范》
GmSSL支持国密《GM/T 0024-2014: SSL VPN技术规范》的新增密码套件: 1 ECDHE-SM1-SM3 0xE001 2 ECC-SM1-SM3 0xE003 3 IBSDH-SM1-SM3 0xE005 4 IBC-SM1-SM3 0xE007 5 RSA-SM1-SM3 0xE009 6 RSA-SM1-SHA1 0xE00A 7 ECDHE-SM4-SM3 0xE011 8 ECC-SM4-SM3 0xE0..原创 2021-10-21 11:09:16 · 3885 阅读 · 1 评论 -
ASN1_TIME
NAMEASN1_TIME_set, ASN1_UTCTIME_set, ASN1_GENERALIZEDTIME_set, ASN1_TIME_adj, ASN1_UTCTIME_adj, ASN1_GENERALIZEDTIME_adj, ASN1_TIME_check, ASN1_UTCTIME_check, ASN1_GENERALIZEDTIME_check, ASN1_TIME_set_string, ASN1_UTCTIME_set_string, ASN1_GENERALIZEDTIME原创 2021-09-29 18:25:19 · 1055 阅读 · 0 评论 -
【OpenSSL / ASN.1】理解ASN.1中的隐式标记
事实上,在ASN.1标记中,有两个目的:打字和命名。键入意味着它告诉en / /解码器是什么类型的数据类型(它是字符串,整数,布尔值,集合等),命名意味着如果有多个相同类型的字段和一些(或者所有这些都是可选的,它告诉en- /解码器该值是哪个字段。如果你比较ASN.1,比如JSON,你看看下面的JSON数据:"Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor"}你会注意到在转载 2021-09-14 11:22:50 · 854 阅读 · 0 评论 -
【OpenSSL / ASN.1】ASN.1 介绍
AboutASN.1 to C compiler takes the ASN.1 module files (example) and generates the C++ compatible C source code. That code can be used to serialize the native C structures into compact and unambiguous BER/OER/PER/XER-based data files, and deserialize the原创 2021-09-01 17:04:38 · 371 阅读 · 0 评论 -
Openssl的ASN.1宏
Openssl中的ASN.1宏用来定义某种内部数据结构以及这种结构如何编码,部分宏定义说明如下: 1) DECLARE_ASN1_FUNCTIONS 用于声明一个内部数据结构的四个基本函数,一般可以在头文件中定义。 2) IMPLEMENT_ASN1_FUNCTIONS 用于实现一个数据结构的四个基本函数。 3) AS...原创 2021-09-13 10:16:22 · 886 阅读 · 0 评论