openssl 学习之SSL/TLS

openssl实现双向认证教程(服务端代码+客户端代码+证书生成) 一、背景说明 1.1 面临问题 最近一份产品检测报告建议使用基于pki的认证方式,由于产品已实现https,商量之下认为其意思是使用双向认证以处理中间人形式攻击。 《信息安全工程》中接触过双向认证,但有两个问题。 第一个是当时最终的课程设计客户端是浏览器,服务端是tomcat双向认证只需要对两者进行配置并不需要自己真的实现代码。 第二个是虽然课程也有接近双向认证的实现代码,但当时是Jav... 阅读详情

之前在微博上看到一个分享,关于HTTPS的,原文链接The First Few Milliseconds of an HTTPS Connection,加上最近也在学习openssl 的相关知识。所以也进行简单的实验,并整理一些资料,以加深对SSL、TLS的了解。

一,基本概念

SSL是安全套接层(Secure Socket Layer)的缩写,而TLS表示传输层安全(Transport Layer Security)的缩写。SSl最初由网景公司提出,最初目的是为了保护web安全,然而现在用来提高传输层的安全。TLS是IETF基于SSLv3制定的标准,两者基本一致,只有少许的差别。首先我们来看一下SSLv3 /TLS协议在TCP/IP协议栈中的位置,通常我们认为SSLv3 /TLS处于传输层和应用层之间。而将SSLv3/TLS通常又分为握手层和记录层,如下图所示:


1,Handshake 握手协议的基本功能

(1)服务器认证

(2)客户端认证(可选)

(3)算法协商

(4)密钥生成

2,Change Cipher Spec 更改密码规范协议

在安全协商后,服务器和客户端会交互这条消息,来提示使用协商好的安全参数

3,Alert 警告协议

(1)提供报错机制

(2)安全断连机制

二,WireShark 实验

首先来了解一下SSLv3/TLS协议流程,如下图所示,而4,6这两个过程通常不会出现在我们的浏览器访问过程中。下面我们以WireShark来分析浏览器访问https://github.com 来了解一下TLS建链路的过程。


1 Client  Hello  

从下图中,可以看出,采用的TLS协议版本为1.1,握手协议为Client hello,主要包含以下信息:32字节的随机数random;Session ID;客户端支持的密码套件Cipher Suites 以及压缩算法Compression Methods。

  1. //RFC 中Random的定义        
  2. struct  
  3.  {  
  4.          uint32 gmt_unix_time; //格林威治时间  
  5.          opaque random_bytes[28];  
  6.   } Random;  
  7. //RFC 中Client Hello的定义  
  8. <pre class="newpage" style="font-size:1em; margin-top:0px; margin-bottom:0px; page-break-before:always" name="code"> struct {  
  9.           ProtocolVersion client_version;  
  10.           Random random;  
  11.           SessionID session_id;  
  12.           CipherSuite cipher_suites<2..2^16-1>;  
  13.           CompressionMethod compression_methods<1..2^8-1>;  
  14.   } ClientHello;</pre>  

2 Server Hello

服务器端消息定义如下同clientHello的区别是,服务器端选择双方支持的密码套件及压缩算法,在下图中可以看到选择的密码套件为:TLS_RSA_WITH_RC4_128_SHA,而压缩算法为NULL即不支持压缩。

  1. struct {  
  2.     ProtocolVersion server_version;  
  3.     Random random;  
  4.     SessionID session_id;  
  5.     CipherSuite cipher_suite;  
  6.     CompressionMethod compression_method;  
  7. } ServerHello;  


3~6  Send certificate and Server Hello Done

服务气短讲证书链发送给客户端。证书链中证书的顺序是每个证书的签名都由随后证书的公钥进行验证。紧接着是一个Sever Hello Done的消息,因为这边包含可选的认证,发送Server Hello Done表明服务器端hello 信息结束。因为服务器没有要求验证客户端身份故4和6步骤没有。


7~13 key exchange and change cipher spec

至此链路建立


三,Openssl 中相关函数

SSL协议源码位于ssl目录下。它实现了sslv2、sslv3、TLS以及DTLS(Datagram TLS,基于UDP的TLS实现)。ssl实现中,对于每个协议,都有客户端实现(XXX_clnt.c)、服务端实现(XXX_srvr.c)、加密实现(XXX_enc.c)、记录协议实现(XXX_pkt.c)、METHOD方法(XXX_meth.c)、客户端服务端都用到的握手方法实现(XXX_both.c),以及对外提供的函数实现(XXX_lib.c)。


四,Polarssl 中的SSL实例

Polarssl是一个轻量级的ssl 适合用于嵌入式平台中,我简单看了一下其中的代码结构,感觉非常清晰。看其中的代码也便于理解SSL。具体代码可以查看polarssl/programs/ssl 下的几个文件。下面列出一些客户端关键的代码,服务器端可以自己查看代码,理解如何自己建立SSL链路。

  1. //客户端   
  2.    /* 
  3.      * 1.1. Load the trusted CA 
  4.      */  
  5. #if defined(POLARSSL_CERTS_C)  
  6.         ret = x509parse_crt( &cacert, (const unsigned char *) test_ca_crt,strlen( test_ca_crt ) );  
  7. #endif  
  8.   
  9.     /* 
  10.      * 1.2. Load own certificate and private key 
  11.      * 
  12.      * (can be skipped if client authentication is not required) 
  13.      */  
  14.     printf( "  . Loading the client cert. and key..." );  
  15. #if defined(POLARSSL_CERTS_C)  
  16.         ret = x509parse_crt( &clicert, (const unsigned char *) test_cli_crt,strlen( test_cli_crt ) );  
  17. #endif  
  18.   
  19. #if defined(POLARSSL_CERTS_C)  
  20.         ret = x509parse_key( &rsa, (const unsigned char *) test_cli_key,strlen( test_cli_key ), NULL, 0 );  
  21. #endif  
  22.   
  23.     /* 
  24.      * 2. Start the connection 
  25.      */  
  26.     printf( "  . Connecting to tcp/%s/%-4d...", opt.server_name, opt.server_port );  
  27.     if( ( ret = net_connect( &server_fd, opt.server_name,opt.server_port ) ) != 0 )  
  28.     {  
  29.     ....  
  30.     }  
  31.     /* 
  32.      * 3. Setup stuff 
  33.      */  
  34.     printf( "  . Setting up the SSL/TLS structure..." );  
  35.     if( ( ret = ssl_init( &ssl ) ) != 0 )  
  36.     {  
  37.     ....  
  38.     }  
  39.     ssl_set_endpoint( &ssl, SSL_IS_CLIENT );  
  40.     ssl_set_authmode( &ssl, opt.auth_mode );  
  41.     ssl_set_rng( &ssl, ctr_drbg_random, &ctr_drbg );  
  42.     ssl_set_dbg( &ssl, my_debug, stdout );  
  43.     ssl_set_bio( &ssl, net_recv, &server_fd,  
  44.                        net_send, &server_fd );  
  45.     if( opt.force_ciphersuite[0] != DFL_FORCE_CIPHER )  
  46.         ssl_set_ciphersuites( &ssl, opt.force_ciphersuite );  
  47.     ssl_set_renegotiation( &ssl, opt.renegotiation );  
  48.     ssl_legacy_renegotiation( &ssl, opt.allow_legacy );  
  49.     ssl_set_ca_chain( &ssl, &cacert, NULL, opt.server_name );  
  50.     ssl_set_own_cert( &ssl, &clicert, &rsa );  
  51.     ssl_set_hostname( &ssl, opt.server_name );  
  52.   
  53.     if( opt.min_version != -1 )  
  54.         ssl_set_min_version( &ssl, SSL_MAJOR_VERSION_3, opt.min_version );  
  55.     if( opt.max_version != -1 )  
  56.         ssl_set_max_version( &ssl, SSL_MAJOR_VERSION_3, opt.max_version );  
  57.     /* 
  58.      * 4. Handshake 
  59.      */  
  60.     printf( "  . Performing the SSL/TLS handshake..." );  
  61.     fflush( stdout );  
  62.   
  63.     while( ( ret = ssl_handshake( &ssl ) ) != 0 )  
  64.     {  
  65.         if( ret != POLARSSL_ERR_NET_WANT_READ && ret != POLARSSL_ERR_NET_WANT_WRITE )  
  66.         {  
  67.         ....  
  68.         }  
  69.     }  
  70.     /* 
  71.      * 5. Verify the server certificate 
  72.      */  
  73.     printf( "  . Verifying peer X.509 certificate..." );  
  74.   
  75.     if( ( ret = ssl_get_verify_result( &ssl ) ) != 0 )  
  76.     {  
  77.         printf( " failed\n" );  
  78.          ...  
  79.         printf( "\n" );  
  80.     }  
  81.   
  82.     printf( "  . Peer certificate information    ...\n" );  
  83.     x509parse_cert_info( (char *) buf, sizeof( buf ) - 1, "      ",ssl_get_peer_cert( &ssl ) );  
  84.     /* 
  85.      * 6. Write the GET request 
  86.      */  
  87.     len = sprintf( (char *) buf, GET_REQUEST, opt.request_page );  
  88.     while( ( ret = ssl_write( &ssl, buf, len ) ) <= 0 )  
  89.     {  
  90.      ...  
  91.     }  
  92.     /* 
  93.      * 7. Read the HTTP response 
  94.      */  
  95.     printf( "  < Read from server:" );  
  96.     fflush( stdout );  
  97.   
  98.     do  
  99.     {  
  100.         ret = ssl_read( &ssl, buf, len );  
  101.         ....  
  102.     }while(1);  
  103.     ssl_close_notify( &ssl );  
  104. }  

关键握手协议在ssl_handshake函数中,循环调用ssl_handshake_step,直至握手过程完成。

  1. int ssl_handshake( ssl_context *ssl )  
  2. {  
  3.     int ret = 0;  
  4.   
  5.     SSL_DEBUG_MSG( 2, ( "=> handshake" ) );  
  6.   
  7.     while( ssl->state != SSL_HANDSHAKE_OVER )  
  8.     {  
  9.         ret = ssl_handshake_step( ssl );  
  10.   
  11.         if( ret != 0 )  
  12.             break;  
  13.     }  
  14.   
  15.     SSL_DEBUG_MSG( 2, ( "<= handshake" ) );  
  16.   
  17.     return( ret );  
  18. }  

client端最后调用的是ssl_handshake_client_step函数,在library/ssl_cli.c中,代码注释非常清晰,不再复述。

  1. int ssl_handshake_client_step( ssl_context *ssl )  
  2. {  
  3.     int ret = 0;  
  4.   
  5.     if( ssl->state == SSL_HANDSHAKE_OVER )  
  6.         return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );  
  7.   
  8.     SSL_DEBUG_MSG( 2, ( "client state: %d", ssl->state ) );  
  9.   
  10.     if( ( ret = ssl_flush_output( ssl ) ) != 0 )  
  11.         return( ret );  
  12.   
  13.     switch( ssl->state )  
  14.     {  
  15.         case SSL_HELLO_REQUEST:  
  16.             ssl->state = SSL_CLIENT_HELLO;  
  17.             break;  
  18.   
  19.        /* 
  20.         *  ==>   ClientHello 
  21.         */  
  22.        case SSL_CLIENT_HELLO:  
  23.            ret = ssl_write_client_hello( ssl );  
  24.            break;  
  25.   
  26.        /* 
  27.         *  <==   ServerHello 
  28.         *        Certificate 
  29.         *      ( ServerKeyExchange  ) 
  30.         *      ( CertificateRequest ) 
  31.         *        ServerHelloDone 
  32.         */  
  33.        case SSL_SERVER_HELLO:  
  34.            ret = ssl_parse_server_hello( ssl );  
  35.            break;  
  36.   
  37.        case SSL_SERVER_CERTIFICATE:  
  38.            ret = ssl_parse_certificate( ssl );  
  39.            break;  
  40.   
  41.        case SSL_SERVER_KEY_EXCHANGE:  
  42.            ret = ssl_parse_server_key_exchange( ssl );  
  43.            break;  
  44.   
  45.        case SSL_CERTIFICATE_REQUEST:  
  46.            ret = ssl_parse_certificate_request( ssl );  
  47.            break;  
  48.   
  49.        case SSL_SERVER_HELLO_DONE:  
  50.            ret = ssl_parse_server_hello_done( ssl );  
  51.            break;  
  52.   
  53.        /* 
  54.         *  ==> ( Certificate/Alert  ) 
  55.         *        ClientKeyExchange 
  56.         *      ( CertificateVerify  ) 
  57.         *        ChangeCipherSpec 
  58.         *        Finished 
  59.         */  
  60.        case SSL_CLIENT_CERTIFICATE:  
  61.            ret = ssl_write_certificate( ssl );  
  62.            break;  
  63.   
  64.        case SSL_CLIENT_KEY_EXCHANGE:  
  65.            ret = ssl_write_client_key_exchange( ssl );  
  66.            break;  
  67.   
  68.        case SSL_CERTIFICATE_VERIFY:  
  69.            ret = ssl_write_certificate_verify( ssl );  
  70.            break;  
  71.   
  72.        case SSL_CLIENT_CHANGE_CIPHER_SPEC:  
  73.            ret = ssl_write_change_cipher_spec( ssl );  
  74.            break;  
  75.   
  76.        case SSL_CLIENT_FINISHED:  
  77.            ret = ssl_write_finished( ssl );  
  78.            break;  
  79.   
  80.        /* 
  81.         *  <==   ChangeCipherSpec 
  82.         *        Finished 
  83.         */  
  84.        case SSL_SERVER_CHANGE_CIPHER_SPEC:  
  85.            ret = ssl_parse_change_cipher_spec( ssl );  
  86.            break;  
  87.   
  88.        case SSL_SERVER_FINISHED:  
  89.            ret = ssl_parse_finished( ssl );  
  90.            break;  
  91.   
  92.        case SSL_FLUSH_BUFFERS:  
  93.            SSL_DEBUG_MSG( 2, ( "handshake: done" ) );  
  94.            ssl->state = SSL_HANDSHAKE_WRAPUP;  
  95.            break;  
  96.   
  97.        case SSL_HANDSHAKE_WRAPUP:  
  98.            ssl_handshake_wrapup( ssl );  
  99.            break;  
  100.   
  101.        default:  
  102.            SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) );  
  103.            return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );  
  104.    }  
  105.   
  106.     return( ret );  
  107. }  
转自http://blog.youkuaiyun.com/kkxgx/article/details/12868181
SSL/TLS 介绍以及如何利用openssl生成证书 TLS:Transport layer Security 传输层安全性,是一种加密协议。本文比较详细的介绍了TLS的基本工作流程。 阅读详情

相关推荐

基于OpenSSL的SSL TLS加密套件全解析_openssl使用进行tls测试

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!

m0_60607245的博客 1326

mbedTLS(PolarSSL)简单思路和函数笔记(Client端)

OpenSSL一直以来各种被诟病,具体挑了哪些刺,本文就不深究。作为OpenSSL有很多替代,我了解到的有cyaSSL(WolfSSL)和PolorSSL。其中PolarSSL已经被ARM收购了,改名为mbedTLS。本文列举了作为一个SSL client端,应该如何使用mbedTLS。本文可以搭配我上一篇文章OpenSSL一起看;单独看...

weixin_33698823的博客 1818

开源项目SMSS发开指南(四)——SSL/TLS加密通信详解

本文将详细介绍如何在Java端、C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程。本文也涵盖了在Ubuntu系统上利用OpenSSL和Libevent如何创建一个支持SSL的服务端。文章中介绍的知识点并未全部在SMSS项目中实现,因此笔者会列出所有相关源码以方便读者查阅。提醒:由于知识点较...

聚娃科技开发者博客 729

WebRTC学习进阶之路 --- 四、WebRTC网络知识详解(二)(加解密/SSL/OpenSSL/TLS/DTLS/SRTP)

DTLS主要用于数据的安全传输, WebRTC学习进阶之路系列总目录:https://blog.youkuaiyun.com/xiaomucgwlmx/article/details/103204274 一、加解密 简介 加密技术包括两个元素:算法和密钥。算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解密的一种算法。在安全...

SmallBottle-CGWLMX的博客 2874

如何使用OpenSSL读取RSA、X509和PKCS12证书?

如何使用OpenSSL读取RSA、X509和PKCS12证书?

sqqqqq77的博客 3078

用openSSL实现TLS双向认证

TLS(传输层安全性)双向认证,也称为客户端认证或互相认证,是一种网络安全协议的扩展,用于建立在传输层上的安全连接。传统的TLS认证只需要服务器验证客户端的身份,而双向认证则要求客户端也验证服务器的身份。在TLS双向认证中,客户端和服务器都必须拥有数字证书。数字证书由可信的第三方证书颁发机构(CA)签发,用于证明实体(如服务器)的身份。以下是TLS双向认证的基本步骤:1. 服务器配置:服务器需要配置受信任的数字证书,该证书由CA签发。配置包括私钥和公钥。

新时代农民工 1929

OpenSSL编写SSL,TLS程序***

一、简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是IETF的TLS 工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246.SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输 不 被监听,伪造和窜改. openssl(www.openssl.org) 是sslv2,sslv3,tlsv1的一份完整实现,内部包含了大量加

u010068160的博客 1052

Crystal语言编写的高效SSL/TLS扫描工具:sslscanner

Crystal语言是一种新兴的编程语言,它以Ruby语法为蓝本,旨在提供接近Ruby的易用性和表达力,同时加入静态类型系统以增强性能。它是在2012年由Lucky Gayevskiy发起,目的是创建一个静态类型但又不牺牲Ruby语言的简洁和可读性的编程环境。随着项目的发展,Crystal逐渐吸引了许多希望在保持Ruby开发体验的同时获得更高性能的开发者。Crystal利用LLVM作为后端,编译成高效的机器码,使得它在执行速度上可以与C语言媲美。

weixin_36427956的博客 1043

OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析

最近在学习安全协议,大多数实验都是基于Windows下IIS,或者Linux下nginx搭建的Web服务,搭建环境和编写配置文件比较麻烦。而且我有多个不同环境的设备,折腾起来也比较麻烦,最好是开箱即用。所以我就用nodejs + express写了个的项目专门用于对比没有使用SSL/TLS的http与使用了的https协议。如果你对代码不感兴趣,仅是想要分析协议,可以到文章末尾的Github仓库中去下载该项目运行即可。

CairBin的博客 1002

深入浅出OpenSSL库:从理论到实践

OpenSSL是一个强大的、开源的加密库,它广泛应用于互联网安全通信的各个领域。自从SSLv2以来,OpenSSL经历了数个版本的演进,形成了现在广泛使用的SSL/TLS协议的坚实基础。OpenSSL不仅提供了各种加密算法的实现,还包括了密钥和证书管理工具,以及用于安全通信的SSL/TLS协议库。它在保护数据传输过程中的隐私性和完整性方面起着关键作用,使得网络通信不仅快速而且安全。OpenSSL的作用不仅仅限于网络通信。它也提供了一系列的命令行工具,允许用户进行加密操作、密钥生成以及证书管理等任务。

weixin_35755640的博客 540

条码打印工具-Bartender的使用

文章目录1、安装Bartender1.解压安装包,可获得bartender2021版本和破解文本2. 双击“BarTender_2021_R1_Full_x64.exe”文件运行,勾选协议及软件安装设置3. 选择安装选项,自行选择勾选,点击Browser可更换软件安装路径4. 耐心等待软件安装完成,直接点击完成退出5. 此时会弹出提示需要激活许可证,先点击取消6. 接着将Crack夹中的“BarTend.exe”破解文件复制到软件安装目录中替换7. 再双击“serial.reg”导入注册,点击确定即可8.

暮紫的笔记本 1万+

openssl的运用

Openssl的学习入门

ndjnddjxn的博客 1748

通俗易懂的图解二叉搜索树、AVL树和红黑树

搜索是一种很常见的需求,当数据较多时,如何找到目标对象时,即需要搜索查找。 那么如何快速找到目标呢,最朴素的思想就是暴力查找,一个一个对比。 显然,当数据量增大时,我们需要优化查找方法获取更快的查找速度,我们可以通过维护一个有序数组,从而实现二分查找,查找速度从O(n)降为O(longn)。 但是数组并不便于插入和删除,链表便成为了最好的选择。 既然是采用二分查找,那么不如直接按照查找的步骤维护一种数据结构,于是二叉搜索树出现了。 二叉搜索树的性质为: 若左子树不为空,则左子树上所有节点值都小于根结点值;

暗色光的博客 758

openssl SSL/TLS例子

【代码】openssl创建tls服务端。

要把所有那些负面的信息当做对自身行为的评价,而不是对自身价值的评判。 465

不用加速器!Google Earth Pro登录失败自救手册:从服务器连接到地图加载的完整排错流程

本文详细解析了Google Earth Pro登录失败的常见问题及解决方案,包括服务器连接失败、地图加载异常等。通过基础排查、内置修复工具使用和高级配置调整,帮助用户无需加速器即可解决启动问题、黑屏和转圈圈等困扰,提升软件使用体验。

weixin_29227425的博客 482

关于HC32F460 输出可调占空比PWM波遇到的问题记录

文章目录问题记录一、问题分析二、解决方法总结 问题记录 芯片:HC32F460系列 功能:PWM电机调速 最近产品开发,需要用到HC32的PWM输出来控制电机的转速。参考官方的例程很快就完成了相关的功能,但是,后面在测试,重复开关电机的时候,发现电机的转速时大时小。 一、问题分析 一开始,怀疑是相关寄存器的设置出错导致的问题。因此在设置PWM输出时加上LOG打印,上机测试并没有发现问题。 用示波器抓取波形,这是正常状态下的波形(上电默认配置成5kHz,70%占空比输出) 这是转速较小时的波形输出 .

Top0_0lll的博客 6165

OpenSSL命令手册

正文共:999 字 10 图,预估阅读时间:1 分钟我们前面编译安装了OpenSSL命令工具(CentOS编译安装OpenSSL 3.3.1),这是一个强大的安全套接字层密码库,可以用于实现各种加密和认证协议,如 SSL/TLS;当然也可以生成证书。要使用openssl命令行工具,我们就得了解一下相关命令,使用man命令,我们可以看到命令指导,但是是基于2019年8月9日发版的1.0.2k版本的,...

衡水铁头哥的博客 1692

VMware 安装 Windows11

一、下载win11的镜像文件 可以在MSDN网站下载: MSDN系统库-致力于原版windows生态服务 二、创建虚拟机 1.双击打开VMware虚拟机,点击创建新的虚拟机 2.选择典型(推荐),然后点击下一步 3.在安装程序光盘映像文件下,点击浏览按钮,选择Windows 11ISO镜像文件所在的路径,在Windows 11安装文件路径中不要有中文或其他特殊符号,否则有可能引起错误。然后点击下一步 4.在选择客户机操作系统界...

m0_56015193的博客 7016

mosquitto 使用ssl/tls加密通信

1. ubuntu@han:~/test/ssl\tls$ openssl genrsa -out client.key 1024 Generating RSA private key, 1024 bit long modulus (2 primes) ..+++++ ....+++++ e is 65537 (0x010001) 2.这步挺重要 把本机ip设置为第3步的commom name ubuntu@han:~/test/ssl\tls$ ifconfig cscotun0: flags

weixin_39577288的博客 1114

PostgreSQL使用 pg_rman物理备份搭建流复制备库(streaming replication standby)

摘要:使用pg_rman备份搭建PostgreSQL流复制备库 本文详细介绍了利用pg_rman工具快速搭建PostgreSQL流复制备库的完整流程。该方法结合物理备份的高效性和流复制的实时性,特别适合大型数据库环境。主要内容包括:主库上的pg_rman安装配置、全量备份操作;备份文件传输至备库;备库数据目录准备及恢复;流复制参数配置;以及最终的启动验证步骤。文章还提供了架构示意图和关键配置示例,并包含常见问题排查建议,如备库无法启动或复制卡顿情况的处理方法。整个流程强调通过.pgpass文件管理密码的安全

liumangtuzi888的博客 1169

Python 爬虫实战:Twitter 数据定向抓取(特定话题 + 用户推文爬取与分析)

在社交媒体研究、舆情监测和市场分析等领域,Twitter 数据具有极高的价值。本文将详细介绍如何使用 Python 构建一个完整的 Twitter 数据爬取系统,包括特定话题和用户推文的爬取与分析。我们将涵盖从认证到数据存储、清洗、分析和可视化的全流程。

u014481728的博客 1038

02.openssl编程——简介

2.1 openssl简介 openssl是一个功能丰富且自包含的开源安全工具箱。他提供的主要功能有: SSL协议实现(SSLv2 SSLv3和TLSv1) 大量的软算法(对称/非对称/摘要) 大数运算 非对称算法密钥生成 ASN.1编解码库 证书请求(PKCS10)编解码 数字证书编解码 CRL编解码 数字证书验证 PKCS7标准

艾小小雨的博客 441

RT-DETR改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU等)

本文记录的是改进RT-DETR的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1922

OPENSSL-2023/10/31学习记录(base系列编码/单向散列函数/可信树)

概述·二进制转字符串·应用场景·邮件编码(base64)· xml或者json存储二进制内容。网页传递数据URL·数据库中以文本形式存放二进制数据·可打印的比特币钱包地址base58Check(hash校验,后面再讲)·比特币地址 bech32 (base32)·基本学习目标:·从0编写base16编解码算法·理解base64原理·使用OpensSL BIO接口完成base64编解码·高级目标·理解比特币钱包地址base58原理并读懂源码抽取比特币base58代码并测试。

书山有路勤为径,学海无涯苦作舟 1072

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OpenSSL

一、简介 OpenSSL是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。   二、安装 ...

weixin_33962621的博客 109

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: linux上面ssl证书生成方法(转)
下一篇: 利用OpenSSL库对Socket传输进行安全加密(RSA+AES)
coo1fish
博客等级 码龄14年 22粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值