企业网站建设个人博客济南建设网站的公司吗

bicheng/2026/1/24 23:06:11/文章来源:
企业网站建设个人博客,济南建设网站的公司吗,做一个这样的网站应该报价多少,如何构建自己的网站Server Name Indication#xff08;SNI#xff09;是一种TLS扩展#xff0c;用于在TLS握手过程中传递服务器的域名信息。在未使用SNI之前#xff0c;客户端在建立TLS连接时只能发送单个IP地址#xff0c;并且服务器无法知道客户端请求的具体域名。这导致服务器需要使用默认…Server Name IndicationSNI是一种TLS扩展用于在TLS握手过程中传递服务器的域名信息。在未使用SNI之前客户端在建立TLS连接时只能发送单个IP地址并且服务器无法知道客户端请求的具体域名。这导致服务器需要使用默认证书进行握手无法正确选择合适的证书。 使用SNI扩展后客户端在发送ClientHello消息时会包含所请求的服务器的域名。服务器根据该域名来选择对应的证书进行握手从而实现了多个域名共享同一个IP地址并使用不同证书的能力。 SNI对于虚拟主机或者CDN等场景特别有用因为这些场景下多个网站可能共享同一个IP地址。通过使用SNI服务器能够正确地选择与域名匹配的证书提高了安全性和灵活性。 SNI产生解决什么问题 Server Name IndicationSNI的产生背景与互联网发展和IPv4地址短缺有关。 在互联网发展初期每个网站通常拥有自己独立的IP地址。但随着网站数量的迅速增长和IPv4地址资源的有限IP地址短缺问题变得日益严重。 为了解决IPv4地址短缺问题一种解决方案是引入虚拟主机技术。虚拟主机是指在同一台物理服务器上托管多个不同域名的网站。通过共享同一个IP地址多个网站能够减少IP地址的使用并降低运维成本。 然而这种虚拟主机技术在使用TLSTransport Layer Security协议时遇到了问题。TLS协议是用于加密和保护网络通信的协议它在握手过程中需要使用正确的证书来验证服务器身份。但在使用虚拟主机时服务器无法根据传统的握手方式正确选择合适的证书因为无法获知客户端请求的具体域名。 为了解决这个问题SNI扩展被引入TLS协议中。它允许客户端在握手时发送所请求的服务器域名信息使服务器能够正确选择并使用对应的证书实现了多个域名共享同一个IP地址并使用不同证书的能力。SNI的引入为虚拟主机和CDN等场景提供了更好的支持进一步促进了IPv4地址资源的有效利用。 抓包分析http握手过程 触发http请求 curl www.baidu.comtcpdump抓包 tcpdump -i any port 80 -nnnvvvv -w http.pcapHTTP (Hypertext Transfer Protocol) 的握手过程如下 1.建立TCP连接客户端通过向服务器发送一个SYN包来发起与服务器的TCP连接。 2.服务器回应服务器接收到客户端的SYN包后返回一个SYN-ACK包表示同意建立连接。 3.客户端确认客户端接收到服务器的SYN-ACK包后发送一个ACK包给服务器表示连接已建立成功。 4.发送HTTP请求客户端与服务器建立了TCP连接后客户端可以发送HTTP请求。HTTP请求包括HTTP方法GET, POST等、URIUniform Resource Identifier和HTTP协议版本等信息。 5.服务器响应服务器接收到HTTP请求后根据请求的内容进行处理并返回HTTP响应。HTTP响应包括响应状态码例如200表示成功404表示未找到等、响应头和响应体等信息。 6.关闭连接客户端接收到服务器的HTTP响应后根据需要继续发送其他请求或者关闭TCP连接。 这是一个简化的HTTP握手过程实际上还有更多的细节和可选项例如在建立TCP连接时可能需要进行三次握手以确保连接的可靠性还有可能使用持久连接Keep-Alive机制来减少握手的次数等。HTTP握手过程中的这些步骤保证了客户端和服务器之间的通信顺利进行并确保数据在网络传输时的可靠性和完整性。 抓包分析TLS握手过程 触发https请求 curl -k --insecure https://www.baidu.comtcpdump -i any port 443 -nnnvvvv -w https.pcapWireShark抓包验证SNI TLS握手过程是一个复杂的过程包括以下步骤 1.客户端发送ClientHello报文客户端发送一个ClientHello报文该报文包含客户端支持的协议版本、会话ID、密码组和压缩方法。客户端提交的ClientHello所包含的密码组是客户支持的密码算法列表按优先级降序排列压缩方法是客户支持的压缩方法列表。2.服务器返回ServerHello报文服务器发送一个ServerHello报文该报文包含服务器建议的协议版本、服务器选择的密码组和压缩方法以及两个随机数ClientHello.random和ServerHello.random。3.服务器返回CA证书和请求客户端证书服务器发送自己的证书CertificateCertificate 报文包含一个X.509证书或者一条证书链。除了匿名DH之外的密钥交换方法都需要发送Certificate报文。如果服务器需要被认证的话服务器会发送自己的证书。同时服务器可能会发送一个ServerKeyExchange报文例如当服务器没有自己的证书或者证书仅用于签名时。4.客户端提交证书并发送ClientKeyExchange报文客户端将自己的证书上报给服务器同时会发送一个ClientKeyExchange报文该报文包含密钥协商后的秘钥给服务器。5.客户端验证服务器的证书客户端会验证服务器的证书的有效性。如果服务器的证书是有效的客户端会发送一个ChangeCipherSpec报文和一个EncryptedHandshake消息。6.服务器发送ChangeCipherSpec报文和EncryptedHandshake消息服务器也会发送ChangeCipherSpec报文和EncryptedHandshake消息表示握手协商已经完成。7.应用层面交互完成握手协商后客户端和服务器会开始进行应用层面的交互通过之前协商的秘钥来加密通信内容。 以上就是TLS握手过程的详细步骤。 Linux C/C解析 Server Name IndicationSNI字段 这是一个类似tcpdump的程序用于在实时或捕获的流量中打印TLS SNI和HTTP/1.1主机字段。 char *tls_ContentType(uint8_t n) {switch (n) {/* 20*/case SSL3_RT_CHANGE_CIPHER_SPEC:return change_cipher_spec;/* 21 */case SSL3_RT_ALERT:return alert;/* 22 */case SSL3_RT_HANDSHAKE:return handshake;/* 23 */case SSL3_RT_APPLICATION_DATA:return application_data;default:return UNKNOWN;}return ; }char *tls_AlertLevel(uint8_t n) {switch(n) {/* 1 */case SSL3_AL_WARNING:return warning;/* 2 */case SSL3_AL_FATAL:return fatal;default:return UNKNOWN;}return ; }char *tls_AlertDescription(uint8_t n) {switch(n) {/* 0 */case SSL3_AD_CLOSE_NOTIFY:return close_notify;/* 10 */case SSL3_AD_UNEXPECTED_MESSAGE:return unexpected_message;/* 20 */case SSL3_AD_BAD_RECORD_MAC:return bad_record_mac;case 21:return decryption_failed_RESERVED;case 22:return record_overflow;case 30:return decompression_failure;case 40:return handshake_failure;case 41:return no_certificate_RESERVED;case 42:return bad_certificate;case 43:return unsupported_certificate;case 44:return certificate_revoked;case 45:return certificate_expired;case 46:return certificate_unknown;case 47:return illegal_parameter;case 48:return unknown_ca;case 49:return access_denied;case 50:return decode_error;case 51:return decrypt_error;default:return UNKNOWN;}return ; }char *tls_HandshakeType(uint8_t n) {switch(n) {/* 0 */case SSL3_MT_HELLO_REQUEST:return hello_request;/* 1 */case SSL3_MT_CLIENT_HELLO:return client_hello;/* 2 */case SSL3_MT_SERVER_HELLO:return server_hello;/* 11 */case SSL3_MT_CERTIFICATE:return certificate;/* 12 */case SSL3_MT_SERVER_KEY_EXCHANGE:return server_key_exchange;/* 13 */case SSL3_MT_CERTIFICATE_REQUEST:return certificate_request;/* 14 */case SSL3_MT_SERVER_DONE:return server_hello_done;/* 15 */case SSL3_MT_CERTIFICATE_VERIFY:return certificate_verify;/* 16 */case SSL3_MT_CLIENT_KEY_EXCHANGE:return client_key_exchange;/* 20 */case SSL3_MT_FINISHED:return finished;default:return UNKNOWN;}return ; } ... int tls_set_callback_handshake_clienthello_servername(int (*handler)(uint8_t *, uint16_t)); int tls_process_Handshake_ClientHello_Extensions_ServerName(); int tls_process_Handshake_ClientHello_Extensions(); int tls_process_Handshake_ClientHello(); uint32_t tls_process_record(uint8_t *payload, uint32_t payload_length); int http_set_callback_request_host(int (*handler)(uint8_t *host_name, uint16_t host_name_length)); int http_init(); uint16_t http_process_request(uint8_t *payload, uint16_t payload_length); void http_cleanup(); int sni_handler (uint8_t *host_name, uint16_t host_name_length);int main (int argc, char *argv[]) { ...while ((i getopt(argc, argv, hf:pi:r:w:)) ! -1) {switch(i) {case h:fprintf(stderr,Use: %s [-h] [-f bpf] [-p] -i interface [-w dump.pcap]\n, argv[0]);fprintf(stderr,Use: %s [-h] [-f bpf] [-p] -r trce.pcap [-w dump.pcap]\n, argv[0]);return -1;break;case f:bpf_s optarg;opt_flags | OPT_BPF;break;case p:opt_flags | OPT_PROMISCUOUS;break;case i:device_name optarg;opt_flags | OPT_DEVICE;break;case r:trace_fname optarg;opt_flags | OPT_TRACE;break;case w:dump_fname optarg;opt_flags | OPT_DUMP;break;default:break;}}...fprintf(stdout, [*] PID: %u\n, getpid());if (opt_flags OPT_DEVICE) {fprintf(stdout, [*] Device: %s\n, device_name);fprintf(stdout, [*] Promiscuous: %d\n, PROMISCUOUS);if (!(pcap_handle pcap_open_live(device_name, SNAPLEN, PROMISCUOUS, PCAP_TIMEOUT,errbuf))) {fprintf(stderr, [FATAL] %s\n, errbuf);return -1;}}if (opt_flags OPT_TRACE) {fprintf(stdout, [*] Trace: %s\n, trace_fname);if (!(pcap_handle pcap_open_offline(trace_fname, errbuf))) {fprintf(stderr, [FATAL] %s\n, errbuf);return -1;}}...if (!(opt_flags OPT_BPF)) {bpf_s bpf_default;opt_flags | OPT_BPF;}fprintf(stdout, [*] BPF: %s\n, bpf_s);if (pcap_compile(pcap_handle, bpf, BPF, BPF_OPTIMIZE,PCAP_NETMASK_UNKNOWN) -1) {fprintf(stderr, [FATAL] Couldnt parse filter. %s\n,pcap_geterr(pcap_handle));pcap_close(pcap_handle);return -1;}if (pcap_setfilter(pcap_handle, bpf) -1) {fprintf(stderr, [FATAL] Couldnt install filter. %s\n,pcap_geterr(pcap_handle));pcap_close(pcap_handle);return -1;}pcap_freecode(bpf);pcap_dumper_handle NULL;if (opt_flags OPT_DUMP) {fprintf(stdout, [*] Dump: %s\n, dump_fname);if (!(pcap_dumper_handle pcap_dump_open(pcap_handle, dump_fname))) {fprintf(stderr, [WARNING] Couldnt create dump file. %s\n,pcap_geterr(pcap_handle));}} ...tls_set_callback_handshake_clienthello_servername(sni_handler);http_set_callback_request_host(sni_handler);http_init();act.sa_handler signal_handler;sigemptyset (act.sa_mask);act.sa_flags 0;if (sigaction(SIGINT, act, NULL)) {perror(sigaction);fprintf(stderr,[WARNING] Failed to set signal handler for SIGINT.\n);}if (sigaction(SIGTERM, act, NULL)) {perror(sigaction);fprintf(stderr,[WARNING] Failed to set signal handler for SIGTERM.\n);}if (sigaction(SIGSEGV, act, NULL)) {perror(sigaction);fprintf(stderr,[WARNING] Failed to set signal handler for SIGSEGV.\n);}fprintf(stderr, Capturing ...\n);if (pcap_loop(pcap_handle, -1, my_pcap_handler, NULL) -1) {fprintf(stderr, [FATAL] pcap_loop failed. %s\n,pcap_geterr(pcap_handle));}if (!(opt_flags OPT_TRACE)) {if (pcap_stats(pcap_handle, ps) -1) {fprintf(stderr, pcap_stats failed. %s\n, pcap_geterr(pcap_handle));} else {fprintf(stderr, %u packets received\n, ps.ps_recv);fprintf(stderr, %u packets dropped\n, ps.ps_drop ps.ps_ifdrop);}}pcap_close(pcap_handle);http_cleanup();if (pcap_dumper_handle) {pcap_dump_close(pcap_dumper_handle);fprintf(stderr, Written %s\n, dump_fname);if (!(opt_flags OPT_DUMP)) {free(dump_fname);}}... }If you need the complete source code, please add the WeChat number (c17865354792) curl触发SNI字段解析 curl -k --insecure https://www.baidu.com curl www.baidu.com该程序从TLS握手客户端Hello消息中提取服务器名称指示SNI字段RFC 4366并从HTTP/1.1请求中提取主机请求头字段RFC 2616。 它接受一个网络接口作为输入来监控其流量可选地以混杂模式或者接受一个PCAP文件作为输入来读取。默认情况下它使用BPF以目标端口为80或443的TCP数据包为目标但如果相应配置它将处理其他端口上的TLS和HTTP数据包以及UDP数据包。捕获的流量可以保存到PCAP文件中。 总结 SNI即服务器名称指示是TLS协议的扩展。它允许在握手过程开始时通过客户端告诉服务器正在连接的主机名称从而解决一个服务器拥有多个域名的情况。 在TLS握手信息中并没有携带客户端要访问的目标地址导致当一台服务器有多个虚拟主机且每个主机的域名不一样使用了不一样的证书时不知道和哪台虚拟主机进行通信。而SNI允许Web服务器通过SSL或TLS握手的扩展在单个IP地址上托管多个站点从而使得HTTPS网站具有唯一的TLS证书即使它们位于共享IP地址上。使用SNI时服务器的主机名包含在TLS握手中这使得HTTPS网站具有唯一的TLS证书即使它们位于共享IP地址上也是如此。 Welcome to follow WeChat official account【程序猿编码】 参考RFC 4366、RFC 2616

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙游住房和城乡建设局网站视频封面制作网站

在进行目标检测部署时,通常需要自行编码实现对模型预测结果的解码及与预测结果的nms操作。所幸现在的各种部署框架对算子的支持更为灵活,可以在模型内实现预测结果的解码,但仍然需要自行编码实现对预测结果的nms操作。其实在onnx opset===11版本以后,其已支持将nms操作嵌入…

wordpress建公司网站自己做网站怎么跳过备案

嵌入式Linux开发板是一种专为嵌入式系统开发而设计的硬件设备,它预装了Linux操作系统和必要的开发工具,为开发者提供了完整的嵌入式系统开发环境。嵌入式Linux开发板是一种功能强大、灵活性高、易于使用的开发工具,适用于各种嵌入式系统开发项…

电商网站开发详细流程网站vr用什么做

传送门 单位根反演听着高级,其实没啥技术含量…… 本文是篇几乎没有证明的佛系讲解 单位根反演的式子长这样: 1n∑i0n−1ωnik[k∣n]\frac{1}{n}\sum_{i0}^{n-1}\omega_n^{ik}[k|n]n1​i0∑n−1​ωnik​[k∣n] 其实本质是IFFT 感觉懵的?…

网上在线做家教网站济南建设企业网站

目录 前言🏜️ 1. 二叉树性质总结⛱️ 1.2 性质3⏰ 2. 二叉树性质小练习🏕️ 3. 答案解析💡 4. 堆概念结构小练习🪔 5. 答案解析🧿 6. 前/中/后/层序遍历小练习🔫 7. 答案解析🧺 后语…

做网站卖酒营销推广运营

在[第1篇]中,我们介绍了WCF关于实例管理一些基本的知识点,包括InstanceContext、InstanceContextMode、已经如何通过ServiceBehaviorAttribute应用不同的实例上下文模式给不同的服务。在[第1篇]中,对WCF采用的三种不同实例上下文模式进行了简…

电子商务网站建设技术基础--asp.net程序设计教学大纲平原县网站建设

目录 一、事务的概念 二、事务的核心特性 三、事务操作中的常见BUG 3.1 脏读 3.2 不可重复读 3.3 幻读 四、隔离级别 五、使用事务 一、事务的概念 “事务”是指一组操作,在逻辑上是不可分割的,组成这组操作的各个语句,或者全部执行成…

设计响应式网站多少钱nodejs同时做网站和后台管理

引言: 北京时间:2024/3/14/9:20,简单聊一聊我的日常。昨天晚上十点左右更新完新的一篇文章,回到宿舍简简单单花了个两首歌的时间洗了个澡,然后为了保持形象吹了个头发,哈哈哈!当然对比以前的我…

app网站的优点设计企业网站内容

vp9协议梳理-header头文件 本文是对vp9视频码流中header中包含的语法元素的一个分类整理,及其对具体的解码过程的影响的分析。 这里写目录标题 vp9协议梳理-header头文件1. Vp9码流中的header头文件2. profile3. show_existing_frame, frame_to_show_map_idx4. fr…

xampp wordpress 建站教程聊城网站建设找谁

vmware为我们提供了三种网络工作模式 vmware为我们提供了三种网络工作模式, 它们分别是: Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 VMware虚拟机的三种网络类型的适用场景如下…

如何建立一个免费网站酒店网站建设工作

闭包和装饰器都是属于函数的语法范畴,是在函数定义中以另一个函数做为形参的语法机制。1 闭包(Closurer)闭包是定义内部函数的一种语法规则,要理解闭包,请看下面的实例:def outer(t):....print(t)....def inner(i):........return…

常见的有利于seo的网站系统无锡网站建设要多少钱

坐标系 任何VisionPro图像都支持一组坐标空间,为表达特定特征的位置提供数字框架。最有用的空间是根空间和用户空间,根空间将点与原始获取图像中的像素相关联,用户空间用于获得校准和固定空间中的特征位置和测量值。 根空间 图像的根空间…

个人做外包网站多少钱泰安程序开发

背景 今年各个大厂的机房事故频繁,其中关键组件Redis是重灾区,本文就来看下怎么做Redis的多机房容灾 Redis多机房容灾方案 1.首先最最直观的是直接利用Redis内部的主从数据同步来进行灾备,但是由于Redis内部的主从实现对机房间的网络延迟等…

seo 网站 结构用wordpress 登录

过流量检测 这里的流量检测就是在网络层的waf拦截到我们向webshell传输的数据包,以及webshell返回的数据 包,检测其中是否包含敏感信息的一种检测方式。如果是大马的情况下,可以在大马中添加多处判断代码,因此在执行大马提供的功…

网站建设项目设计书建设部建造师网站

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 水平居中布局⭐ 垂直居中布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣…

做我的世界皮肤壁纸的网站江门做网站价格

目录 一、mapping属性 二、总结 一、mapping属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的简单类型有: 字符串: text (可分词的文本)、keyword (精确值,例如:品…

尚义住房和城乡规划建设局网站中国建设布网站

文章目录 嫌啰嗦直接看源码Q5 :PyTorch on CIFAR-10three_layer_convnet题面解析代码输出 Training a ConvNet题面解析代码输出 ThreeLayerConvNet题面解析代码输出 Train a Three-Layer ConvNet题面解析代码输出 Sequential API: Three-Layer ConvNet题面解析代码输出 CIFAR-1…

郑州网站建设招商网站的优化方案怎么写

一、LAMP平台概述: LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统,Apache网站服务器&#xf…

沈阳网站设计开发seo关键词排名优化官网

按照官网 的提示,我开始安装faster rcnn,但是出现了很多问题,我将其汇总了起来,并提出了解决办法。 先说明一下我的配置: python : anaconda2linux: centos 6.9 安装faster rcnn请先参考:《cuda8cudnn4 F…

怎么自己做导购网站网站建设scyiyou

Flink任务一般为实时不断运行的任务,如果没有任务监控, 任务异常时无法第一时间处理会比较麻烦。 这里通过调用API接口方式来获取参数,实现任务监控。 Flink任务监控(基于API接口编写shell脚本) 一 flink-on-yarn 模式 二 编写she…

贵州做网站的提供网站建设定制

写在开头 欢迎阅读MySQL修炼手册的第12篇,今天我们将深入探讨MySQL中的视图,了解如何利用视图简化复杂查询并保护敏感数据。 1 视图的基本概念 在开始学习视图之前,让我们先了解一下视图的基本概念。视图是一种虚拟的表,它是基…