HTTPS + 域名 + 双向证书认证(下)

文章目录

  • 1. .p12文件
    • 1.1 主要特点
    • 1.2 常见用途
    • 1.3 常见操作
    • 1.4 与其他格式的区别
    • 1.5 与公钥的区别和联系
    • 1.6 安全性注意事项
  • 2. Nginx 配置
    • 2.1 location指令
    • 2.2 alias 与 root 指令的区别
  • 3 双向认证配置
    • 3.1 创建根证书
      • 3.1.1 生成根CA的私钥
      • 3.1.2 生成请求证书
      • 3.1.3 生成自签署CA证书
    • 3.2 用根CA为服务器签发证书
      • 3.2.1 生成服务器的私钥
      • 3.2.2 生成证书请求
      • 3.2.3 使用CA证书签署服务器证书
    • 3.3 用根CA为客户端签发证书
      • 3.3.1 生成客户端私钥
      • 3.3.2 生成证书请求
      • 3.3.3 使用CA证书签署客户端证书
      • 3.3.4 生成p12
    • 3.4 Nginx 服务器块配置
      • 3.4.1 增加 HTTPS 服务器配置
      • 3.4.2 重启 Nginx
    • 3.5 开启端口
    • 3.6 客户端证书生成脚本

上文介绍了双向认证证书的文件类型、工作流程、生成和测试指令。本文以实例介绍 https + 域名 + 双向证书认证 访问模式的部署。

构建一个基于 HTTPS + 域名 + 双向证书认证(mTLS) 的模式是一个非常强大的安全实践。它通常用于保护高安全性的API、微服务之间的通信、金融系统或内部管理后台。要实现这个模式,你需要准备以下文件:

角色所需文件作用
证书颁发机构 (CA)ca.key
ca.crt (或 .cer)
1. ca.key:CA的私钥,高度敏感,用于签署CSR。
2. ca.cer:根证书,必须分发给所有服务器和客户端,作为信任的锚点。
服务器 (Server)server.key
server.csr
server.crt (或 .cer)
1. server.key:服务器的私钥。
2. server.csr:服务器的证书签名请求。
3. server.crt:由CA签署的服务器证书。证书的SAN中必须包含服务的域名(如 DNS:api.example.com)。
客户端 (Client)client.key
client.csr
client.crt (或 .cer)
1. client.key:客户端的私钥。
2. client.csr:客户端的证书签名请求。
3. client.crt:由 同一个CA 签署的客户端证书。

1. .p12文件

.p12文件(也称为PFX文件)是一种数字证书容器文件,采用PKCS#12标准格式。它就像一个"数字身份证文件包",将多个安全相关的文件打包在一起并用密码保护

一个典型的.p12文件包含:

  • 🔑 私钥:加密密钥
  • 📄 用户证书:公钥和身份信息
  • 🔗 CA证书链:颁发机构的证书(建立信任链)
  • 📝 其他元数据:证书名称、有效期等信息

1.1 主要特点

  1. 密码保护:必须用密码才能打开和使用
  2. 平台通用:Windows、macOS、Linux都支持
  3. 完整包:包含身份验证所需的所有文件
  4. 二进制格式:不是文本文件,不能直接查看内容

1.2 常见用途

🔐 客户端身份认证

# 使用.p12文件访问需要认证的网站
curl --cert client.p12:password https://secure.example.com

💻 导入到操作系统

  • Windows:双击导入到证书管理器
  • macOS:钥匙串访问
  • Linux:用于各种应用的客户端认证

🌐 浏览器客户端证书

  • 用于访问银行、政府等需要强认证的网站

🚪 VPN接入认证

  • 许多VPN系统使用.p12文件进行客户端认证

1.3 常见操作

  • 查看.p12文件信息:
openssl pkcs12 -info -in zhoubowen.p12
# 会提示输入密码,然后显示文件内容
  • 从.p12提取各个组件:
# 提取私钥
openssl pkcs12 -in zhoubowen.p12 -nocerts -out private.key# 提取证书(包含公钥)
openssl pkcs12 -in zhoubowen.p12 -clcerts -nokeys -out certificate.crt# 从证书提取公钥
openssl x509 -in certificate.crt -pubkey -noout > zhoubowen_public.pem# 提取CA证书
openssl pkcs12 -in zhoubowen.p12 -cacerts -nokeys -out ca.crt
  • 生成.p12文件:
openssl pkcs12 -export \-inkey private.key \-in certificate.crt \-certfile ca.crt \-out zhoubowen.p12 \-name "pxshen" \-password pass:"@HzRaobR7SPX"
  • pkcs12:处理PKCS#12格式文件的子命令
  • -export: 表示要创建一个新的PKCS#12文件
  • -inkey:指定私钥
  • -in:指定数字证书,由CA签发
  • -certfile:指定CA的根证书
  • -name:为证书设置一个友好名称,导入证书库时显示这个名称,方便用户识别和管理多个证书。
  • -password:设置.p12文件的加密密码,pass:"$password" 表示直接提供密码文本,也可以使用其他方式,如env:file:等。

1.4 与其他格式的区别

格式扩展名内容
.p12/.pfx.p12, .pfx私钥+证书+CA链
.pem.pem, .crt, .key私钥、公钥
.jks.jksJava密钥库格式

1.5 与公钥的区别和联系

  • 包含关系:
.p12文件 = 私钥 + 公钥证书 + CA证书链
公钥证书 = 公钥 + 身份信息 + CA签名
  • 从.p12文件中提取公钥:
# 从.p12文件中提取公钥
openssl pkcs12 -in user.p12 -clcerts -nokeys -out public_key.pem# 或者从证书中提取公钥
openssl x509 -in user.crt -pubkey -noout > public_key.pem

.p12文件用于客户端SSL认证,导入到浏览器,用于网站客户端证书认证。而公钥用于加密数据、验证签名。

1.6 安全性注意事项

  • 密码强度:使用强密码保护.p12文件
  • 安全存储:像保护银行卡密码一样保护.p12文件
  • 定期更换:证书过期后应及时更新
  • 谨慎分发:只在必要时分发给授权用户

2. Nginx 配置

Nginx 是配置 mTLS 非常常见的 Web 服务器。

此处引申一下 nginx.conf HTTP 的配置:

# 全局配置
user root;                            # 以root用户身份运行工作进程
worker_processes auto;                # 自动设置工作进程数量(通常等于CPU核心数)
error_log /var/log/nginx/error.log;   # 错误日志位置
pid /run/nginx.pid;                   # 存储主进程ID的文件位置# 加载动态模块
include /usr/share/nginx/modules/*.conf;# 事件模块
events {worker_connections 1024;    # 每个工作进程最大并发连接数
}# HTTP模块
http {# 定义日志格式log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 访问日志位置和格式access_log  /var/log/nginx/access.log  main;# 性能优化相关设置sendfile            on;    # 使用高效文件传输tcp_nopush          on;    # 优化数据包发送tcp_nodelay         on;    # 禁用Nagle算法keepalive_timeout   65;    # 保持连接超时时间types_hash_max_size 4096;  # MIME类型哈希表大小# include             /etc/nginx/mime.types;     # MIME类型定义default_type        application/octet-stream;  # 默认MIME类型# 包含其他配置文件include /etc/nginx/conf.d/*.conf;# HTTP服务器配置server {listen       80;               # 监听80端口(HTTP)server_name  182.61.130.103;   # 服务器域名或IP地址# 前端静态资源location /h5/ {alias /mnt/h5/;            # 将/h5/映射到本地目录/mnt/h5/try_files $uri $uri/ =404; # 尝试提供请求的文件,否则返回404}# 后台静态资源服务location / {root   /mnt/vue-ui/dist;index  index.html index.htm;}# API 转发location ~ /manager/ {# rewrite ^/manager/(.*) /$1 break;  # 重写URL,移除/manager/前缀proxy_pass http://127.0.0.1:8081;   # 转发到本地8081端口# 设置代理头信息proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 支持WebSocketproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}# 自定义404错误页面error_page 404 /404.html;location = /404.html {root /usr/share/nginx/html/;  # 404页面所在目录internal;                     # 防止直接通过URL访问}# 阻止访问非指定路径的请求,匹配所有不以 /h5/ /manager/ 开头的URL路径# location ~ ^(?!/(h5|manager)/) {#     return 404;# }}
}

配置一个 HTTP 服务器配置,静态资源服务通过 /h5/ 路径提供前端静态资源,通过 / 路径提供后台管理静态资源,将所有 /manager/ 开头的请求转发到本地的 8081端口应用服务器。

2.1 location指令

Nginxlocation 指令有多种匹配方式,每种都有不同的优先级和用途。

  1. 精确匹配 - 最高优先级
location = /exact-path {# 只完全匹配 /exact-path# 不匹配 /exact-path/ 或 /exact-path/other
}示例:
location = /login {# 只匹配 http://example.com/loginproxy_pass http://backend/login;
}
  1. 优先前缀匹配 - 第二优先级
location ^~ /static/ {# 匹配以 /static/ 开头的所有路径# 且跳过正则表达式检查
}示例:
location ^~ /static/ {# 匹配 /static/, /static/js/, /static/css/app.css 等alias /var/www/static/;
}
  1. 正则表达式匹配 - 第三优先级
location ~ /user/[0-9]+ {# 匹配 /user/123, /user/456 等
}location ~ /manager/ {# 这个配置会匹配任何包含 "/manager/" 字符串的URL# 匹配 /manager/ /manager/123 /manager/123/456 /user/manager/settings (中间包含 /manager/)# 不会匹配 /manager (缺少结尾的斜杠)
}location ~* \.(jpg|jpeg|png|gif)$ {# 匹配 .jpg, .JPG, .PNG 等图片文件
}
  1. 普通前缀匹配 - 最低优先级
location /api/ {# 匹配以 /api/ 开头的所有路径
}
  1. 命名location - 用于内部重定向
location @fallback {# 不会直接匹配客户端请求# 只能通过 error_page, try_files 等内部指令使用proxy_pass http://backup-server;
}

匹配优先级从高到低:

  • location = /path (精确匹配)
  • location ^~ /prefix/ (优先前缀匹配)
  • location ~ /regex/location ~* /regex/ (按配置顺序)
  • location /prefix/ (普通前缀匹配)

2.2 alias 与 root 指令的区别

特性aliasroot
路径映射完全替换匹配的路径部分将匹配的路径追加到指定目录后
语法location /path/ { alias /dir/; }location /path/ { root /dir/; }
路径处理/path/file → /dir/file/path/file → /dir/path/file
结尾斜杠通常需要以斜杠结尾不需要以斜杠结尾
适用场景虚拟目录映射常规目录服务

alias示例:

location /mgr/ {alias /mnt/view/mgr/;# 请求: /mgr/index.html# 实际文件: /mnt/view/mgr/index.html
}

root示例:

location /mgr/ {root /mnt/view/;# 请求: /mgr/index.html# 实际文件: /mnt/view/mgr/index.html
}

3 双向认证配置

目录层级:

/mnt/certs/
├── ca/
│   ├── ca.key          # ca密钥
│   ├── ca.csr          # ca证书请求文件
│   ├── ca.crt          # ca根证书
│   └── ca.srl          # ca序列号文件
├── server/             
│   ├── server.key      # 服务器密钥
│   ├── server.csr      # 服务器请求文件
│   └── server.crt      # 服务器证书
├── client/             
│   ├── client.key      # 客户端密钥
│   ├── csr/            
│   │    └── *.csr       # 客户端请求文件
│   ├── crt/            
│   │    └── *.crt       # 客户端证书
│   ├── p12/            
│   │   └── *.p12       # 客户端数字证书容器文件
│   └── passwords.txt   # 数字证书密码
└── script└── batchCreateCilent.sh # 客户端证书生成脚本

注1:密钥、证书指令含义参见上篇《HTTPS + 域名 + 双向证书认证(上)》

3.1 创建根证书

3.1.1 生成根CA的私钥

openssl genrsa -aes256 -out /mnt/certs/ca/ca.key 2048caKey

3.1.2 生成请求证书

openssl req -new -sha256 \-key /mnt/certs/ca/ca.key \-out /mnt/certs/ca/ca.csr \-subj "/C=CN/ST=AnHui/L=HeFei/O=Ums/OU=IT/CN=CA/emailAddress=admin@ums.com"

3.1.3 生成自签署CA证书

openssl x509 -req -days 36500 -sha256 -extensions v3_ca \-signkey /mnt/certs/ca/ca.key \-in /mnt/certs/ca/ca.csr \-out /mnt/certs/ca/ca.crt

在这里插入图片描述

3.2 用根CA为服务器签发证书

3.2.1 生成服务器的私钥

openssl genrsa -aes256 -out /mnt/certs/server/server.key 2048serverKey

3.2.2 生成证书请求

openssl req -new -sha256 \-key /mnt/certs/server/server.key \-out /mnt/certs/server/server.csr \-subj "/C=CN/ST=AnHui/L=HeFei/O=Ums/OU=IT/CN=ahgasazj/emailAddress=admin@ums.com"

3.2.3 使用CA证书签署服务器证书

openssl x509 -req -days 3650 -sha256 -extensions v3_req \-CA /mnt/certs/ca/ca.crt \-CAkey /mnt/certs/ca/ca.key \-CAserial /mnt/certs/ca/ca.srl \-CAcreateserial \-in /mnt/certs/server/server.csr \-out /mnt/certs/server/server.crt

在这里插入图片描述

在这里插入图片描述

3.3 用根CA为客户端签发证书

3.3.1 生成客户端私钥

openssl genrsa -aes256 -out /mnt/certs/client/client.key 2048clientKey

3.3.2 生成证书请求

openssl req -new -sha256 \-key /mnt/certs/client/client.key \-out /mnt/certs/client/csr/pxshen.csr \-subj "/C=CN/ST=AnHui/L=HeFei/O=Ums/OU=IT/CN=pxshen/emailAddress=admin@ums.com"

3.3.3 使用CA证书签署客户端证书

openssl x509 -req -days 3650 -sha256 -extensions v3_req \-CA /mnt/certs/ca/ca.crt \-CAkey /mnt/certs/ca/ca.key \-CAserial /mnt/certs/ca/ca.srl \-CAcreateserial \-in /mnt/certs/client/csr/pxshen.csr \-out /mnt/certs/client/crt/pxshen.crt

3.3.4 生成p12

openssl pkcs12 -export \-inkey /mnt/certs/client/client.key \-in /mnt/certs/client/crt/pxshen.crt \-certfile /mnt/certs/ca/ca.crt \-out /mnt/certs/client/p12/pxshen.p12 \-name "pxshen" \-password pass:"@HzRaobR7SPX"

在这里插入图片描述

3.4 Nginx 服务器块配置

3.4.1 增加 HTTPS 服务器配置

http {...# HTTP服务器配置server {...}# HTTPS 服务器配置server {listen       2443 ssl;server_name  ahyjhxsh.com;# 服务器证书和私钥ssl_certificate /mnt/certs/server/server.crt;ssl_certificate_key /mnt/certs/server/server.key;# 启用双向认证ssl_client_certificate /mnt/certs/ca/ca.crt; # 告诉Nginx:用这个CA证书去验证客户端提供的证书ssl_verify_client on; # 开启客户端证书验证# 后台静态资源服务location / {if ($ssl_client_verify != SUCCESS) {return 403;}root   /mnt/vue-ui/dist;index  index.html index.htm;}# API 转发location ~ /manager/ {# rewrite ^/manager/(.*) /$1 break;  # 重写URL,移除/manager/前缀proxy_pass http://127.0.0.1:8081;   # 转发到本地8081端口# 设置代理头信息proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 支持WebSocketproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# 如果验证成功,Nginx会将客户端证书的信息存储在变量中# 你可以将这些信息传递给后端应用(如用户名、证书序列号等)proxy_set_header X-SSL-Client-Verify $ssl_client_verify;proxy_set_header X-SSL-Client-S-DN $ssl_client_s_dn;proxy_set_header X-SSL-Client-I-DN $ssl_client_i_dn;proxy_set_header X-SSL-Client-Serial $ssl_client_serial;}}
}

关键指令解释:

  • ssl_client_certificate:指定信任的CA证书文件,用于验证客户端证书。
  • ssl_verify_client on:开启强制双向认证。没有有效客户端证书的连接将被拒绝。

3.4.2 重启 Nginx

报错:

[root@instance-9iidvp74-1 conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:85

需要 nginx 开启 ssl 模块

# 进入 Nginx 源码目录(如果不知道位置,可以重新下载)
/mnt/nginx/nginx-1.20.1/# 使用 nginx -V 输出的配置参数,并添加 --with-http_ssl_module
./configure --with-http_ssl_module# 编译
make# 不要 make install,会覆盖配置!而是替换二进制文件
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp objs/nginx /usr/local/nginx/sbin/nginx
[root@instance-9iidvp74-1 nginx-1.20.1]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
Enter PEM pass phrase:

启动需要输入 server.key 密码

3.5 开启端口

# 防火墙开启2443端口 
firewall-cmd --zone=public --add-port=2443/tcp --permanent# 刷新
firewall-cmd --reload

3.6 客户端证书生成脚本

batchCreateCilent.sh

[root@instance-1ays3hq4 certs]# cat script/batchCreateCilent.sh 
#!/bin/bash
usernames=("zhoubowen")# 定义随机密码生成函数
generate_password() {local length=${1:-12}  # 默认长度为 12tr -dc 'A-Za-z0-9!@#$^*()_+' < /dev/urandom | head -c "$length"
}# 创建必要的目录
mkdir -p /mnt/certs/client/{csr,crt,p12}# 循环遍历用户名列表
for username in "${usernames[@]}"; doecho "正在为用户 $username 生成证书..."# 生成 CSR 文件openssl req -new \-key /mnt/certs/client/client.key \-out /mnt/certs/client/csr/${username}.csr \-subj "/C=CN/ST=AnHui/L=Hefei/O=ahyjhxsh/CN=$username"# 检查 CSR 文件是否生成成功if [ $? -ne 0 ]; thenecho "生成 CSR 文件失败:$username"continuefi# 使用 CA 签发证书并生成 CRT 文件openssl x509 -req \-in /mnt/certs/client/csr/${username}.csr \-CA ca/ca.crt \-CAkey ca/ca.key \-CAcreateserial \-out /mnt/certs/client/crt/${username}.crt \-days 365# 检查 CRT 文件是否生成成功if [ $? -ne 0 ]; thenecho "生成证书失败:$username"continuefi# 生成随机密码password=$(generate_password 12)echo "用户 $username 的 .p12 文件密码: $password"# 生成 P12 文件openssl pkcs12 -export \-inkey /mnt/certs/client/client.key \-in /mnt/certs/client/crt/${username}.crt \-certfile ca/ca.crt \-out /mnt/certs/client/p12/${username}.p12 \-name "$username" \-password pass:"$password"# 检查 P12 文件是否生成成功if [ $? -eq 0 ]; thenecho "用户 $username 的 .p12 文件已成功生成!"elseecho "生成 .p12 文件失败:$username"fiecho "$username:$password" >> /mnt/certs/client/passwords.txt
doneecho "所有用户的证书和 .p12 文件生成完成。"

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

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

相关文章

嵌入式 - ARM3

一、arm启动C语言1. 配置异常向量表2. 实现了软件中断的部分注&#xff1a;ldmfd sp!, {r0-r12, lr} ldmfd sp!, {r0-r12, pc}^ bx lr 左半部分&#xff1a;繁琐易理解的返回方式&#xff1a;先弹出所有通用寄存器和lr &…

如何通过标签和分类提升知识复用效率

通过标签和分类提升知识复用效率&#xff0c;其核心在于构建一个结构化与灵活性兼备的知识组织体系。这需要将分类的“确定性”与标签的“多维性”进行有效结合&#xff0c;为知识的存储与检索建立清晰的“骨架”和丰富的“神经网络”。具体实践中&#xff0c;要求我们进行顶层…

ZYNQ PS读写PL BRAM

一、实验室任务 本章的实验任务是 PS 将数据写入BRAM&#xff0c;然后从 BRAM 中读出数据&#xff0c;并通过串口打印出来&#xff1b;与此同时&#xff0c;PL 从通过自定义ip核从BRAM中同样读出数据&#xff0c;并通过ILA 来观察读出的数据与串口打印的数据是否一致。这里是通…

LinuxC++项目开发日志——高并发内存池(5-page cache框架开发)

PageCachepage cache 设计逻辑一、PageCache 的核心定位&#xff1a;理解它与 CentralCache 的本质区别二、PageCache 的内存分配流程&#xff1a;从 “精确匹配” 到 “拆分适配”三、PageCache 的内存释放流程&#xff1a;合并小 Span&#xff0c;解决内存碎片问题page cache…

Matplotlib:绘制你的第一张折线图与散点图

Matplotlib入门&#xff1a;绘制你的第一张折线图与散点图导语 欢迎来到 Matplotlib 的世界&#xff01;对于任何使用 Python 进行数据分析或机器学习的人来说&#xff0c;数据可视化都是一项至关重要的技能。Matplotlib 是 Python 中最流行、最基础的可视化库&#xff0c;它功…

MySQL保姆级安装教程

MySQL 安装详细文档&#xff0c;适用于 Windows、macOS 和 Linux 系统&#xff0c;包含了从下载到验证安装的完整步骤&#xff1a; 一、Windows 系统安装 MySQL 1. 下载 MySQL 安装包 访问 MySQL 官方下载页&#xff1a;https://dev.mysql.com/downloads/installer/选择 “MySQ…

重塑你的大脑:从理解突触到掌控人生

重塑你的大脑&#xff1a;从理解突触到掌控人生你是否曾对自己的某些行为感到无力&#xff1f;明知应该早睡&#xff0c;却总忍不住刷手机&#xff1b;下定决心要锻炼&#xff0c;却常常半途而废。这些困扰我们的习惯&#xff0c;并非简单的意志力问题&#xff0c;其根源深深植…

《C++进阶之STL》【哈希表】

【哈希表】目录前言------------概念介绍------------1. 什么是哈希&#xff1f;------------核心术语------------一、哈希函数1. 哈希函数的核心特点是什么&#xff1f;2. 哈希函数的设计目标是什么&#xff1f;3. 常见的哈希函数有哪些&#xff1f;直接定址法除法散列法乘法…

机器学习-模型验证

验证泛化误差 在一个数据集上估计误差&#xff0c;数据集只能使用一次验证数据集&#xff1a;可以被使用多次 基本是训练数据集中的一部分 当使用“test”时&#xff0c;大多数时候指的是验证数据集 生成验证数据集方法 1、数据随机分入训练集或验证集 总是随机选n%的数据作为验…

Qt中自定义控件的三种实现方式

Qt中自定义控件的三种实现方式 在 Qt 应用开发中&#xff0c;标准控件往往无法满足所有需求。自定义控件允许开发者创建具有特定功能和外观的控件&#xff0c;提高代码复用性和界面一致性。Qt 提供了多种方式来开发自定义控件&#xff0c;从简单的组合现有控件到完全自定义绘制…

少儿舞蹈小程序(14)在线预约

目录1 创建数据模型2 搭建预约按钮3 搭建表单4 搭建管理功能整体效果总结目前我们的首页已经开发完毕了&#xff0c;包含轮播图、机构介绍、校区展示、作品与活动展示功能。家长在小程序了解了机构的基本情况之后&#xff0c;下一步就是参加试听&#xff0c;在线下真实体验一下…

TDengine 数据写入详细用户手册

TDengine 数据写入用户手册 概述 TDengine 提供了多种灵活的数据写入方式&#xff0c;以满足不同应用场景的需求。本手册将以智能电表场景为例&#xff0c;向初学者详细介绍各种数据写入方法的使用。 智能电表场景设定 假设我们需要为智能电表系统建立数据库&#xff1a; …

PTA 天梯赛 7-43:字符串关键字的散列映射

【题目来源】 https://pintia.cn/problem-sets/15/exam/problems/type/7?problemSetProblemId890 【题目描述】 给定一系列由大写英文字母组成的字符串关键字和素数 P&#xff0c;用移位法定义的散列函数 H(Key) 将关键字 Key 中的最后 3 个字符映射为整数&#xff0c;每个字…

Python核心技术开发指南(065)——with语句

版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl with语句定义 with语句是Python中用于简化资源管理的语法结构,通过上下文管理器(实现__enter__()和__exit__()方法的对象)确保资源在使用完毕后被正确释放,无论代码块是否发生异常。其核心作…

从基础到高级:一文快速认识MySQL UPDATE 语句

在数据库日常运维与开发中&#xff0c;数据更新是与数据查询同等重要的核心操作。MySQL 的 UPDATE 语句凭借其灵活的语法结构和强大的功能&#xff0c;能够满足从简单字段修改到复杂关联表更新的各类需求。然而&#xff0c;若使用不当&#xff0c;不仅可能导致数据一致性问题&a…

材料基因组计划(MGI)入门:高通量计算与数据管理最佳实践

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;注册即送-H卡级别算力&#xff0c;80G大显存&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生更享专属优惠。 摘要 材料基因组计划&#xff08;Materials Genome Ini…

Vision Transformer (ViT) :Transformer在computer vision领域的应用(一)

在图像领域,CNN卷积神经网络结构已经成为了标配,所有的模型都是基于CNN来构造的。 而在NLP领域,自从Transformer横空出世之后,基本上也统治了NLP的各个领域。 基于Transformer的强大,一些论文的工作都是将Transformer也应用到CV领域,在这篇论文:AN IMAGE IS WORTH 16X1…

自动驾驶中的传感器技术45——Radar(6)

本文详细介绍4D雷达相关解决方案&#xff0c;4D雷达关键词&#xff1a;4D Imaging Radar 1、4D雷达特点 图1 4D雷达 vs 3D雷达图2 4D雷达虚拟通道数量不断增加图3 4D雷达 vs 3D雷达 vs 摄像头和激光雷达图4 毫米波雷达在不同驾驶等级下的应用需求Ref&#xff1a;https://pdf.d…

浏览器调试工具详解

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

代码审计-PHP专题原生开发SQL注入1day分析构造正则搜索语句执行监控功能定位

挖掘技巧&#xff1a; -语句监控-数据库SQL监控排查可利用语句定向分析 -功能追踪-功能点文件SQL执行代码函数调用链追踪 -正则搜索-(update|select|insert|delete|).*?where.* 如何快速的在多个文件代码里面找脆弱&#xff1a; 1、看文件路径 2、看代码里面的变量&#…