当前位置:首页 > 技术 > 正文内容

HTTPS双向认证:SSL证书生成与部署指南

访客 技术 2026年7月19日 1

一、HTTPS双向认证基础

在建立客户端与服务器的HTTPS连接时,需要进行双向身份验证,确保通信双方的身份合法性。

二、数字证书类型及浏览器显示

不同类型的数字证书在服务器部署后,用户浏览器访问网站时会显示不同的安全标识:

1. 无证书情况

浏览器显示"不安全"标识,表明连接未加密。

2. 域名验证型(DV)SSL证书

显示安全连接标识,但证书中不包含组织信息。

3. 企业验证型(OV)SSL证书

显示安全连接标识,证书详情中包含组织信息。

4. 增强型(EV)SSL证书

地址栏显示绿色,展示安全连接标识,并在地址栏直接显示组织名称。

三、SSL证书生成流程

证书生成过程包括创建根证书、服务器证书和客户端证书,用于实现双向认证。

1. 环境准备

操作系统:Linux (CentOS 7及以上)
Web服务器:Apache Tomcat 8.5.42及以上
加密工具:OpenSSL 1.1.0c

2. OpenSSL安装

# 解压安装包
tar -xzvf openssl-1.1.0c.tar.gz

# 进入解压目录
cd openssl-1.1.0c

# 编译安装OpenSSL到指定目录
./config --prefix=/usr/local/openssl && make && make install

# 备份原有文件
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

# 创建软链接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

# 添加库文件搜索路径
echo /usr/local/openssl/lib >> /etc/ld.so.conf

# 更新共享库
ldconfig -v

# 验证安装
openssl version -a

3. 创建根证书(CA)

3.1 生成根证书私钥

# 生成204位RSA密钥
openssl genrsa -des3 -out ca.key 2048

# 输入并确认密码
Enter pass phrase for ca.key: 
Verifying - Enter pass phrase for ca.key: 

3.2 创建根证书签名请求

# 生成证书签名请求
openssl req -new -key ca.key -out ca.csr

# 按提示填写信息
Enter pass phrase for ca.key: 
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:TechCompany
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []: 
Email Address []:admin@techcompany.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 
An optional company name []: 

3.3 创建根证书文件

# 创建有效期为10年的根证书
openssl x509 -req -days 3650 -sha256 -extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt

Enter pass phrase for ca.key: 

3.4 创建信任存储库

# 创建JKS格式的truststore文件
keytool -keystore ca.truststore -keypass 123456 -storepass 123456 -alias rootca -import -trustcacerts -file /tmp/ca/ca.crt

输入"yes"确认信任此证书

4. 创建服务器证书

4.1 生成服务器私钥

# 创建服务器密钥对
openssl genrsa -des3 -out server.key 2048

# 输入并确认密码
Enter pass phrase for server.key: 
Verifying - Enter pass phrase for server.key: 

# 可选:移除密钥密码保护
openssl rsa -in server.key -out server.key

4.2 创建服务器证书签名请求

# 生成CSR文件
openssl req -new -key server.key -out server.csr

# 填写证书信息
Enter pass phrase for server.key: 
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:TechCompany
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:www.techcompany.com
Email Address []:admin@techcompany.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 
An optional company name []: 

4.3 创建服务器证书

# 使用CA签名服务器证书
openssl x509 -req -days 3650 -sha256 -extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

Enter pass phrase for ca.key: 

4.4 导出PKCS12格式证书

# 将证书和密钥导出为PKCS12格式
openssl pkcs12 -export -in /tmp/ca/server.crt -inkey /tmp/ca/server.key -out /tmp/ca/server.p12 -name "server"

# 根据提示输入密钥密码

4.5 创建JKS格式密钥库

# 将PKCS12文件导入JKS密钥库
keytool -importkeystore -v -srckeystore /tmp/ca/server.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore /tmp/ca/server.keystore -deststoretype jks -deststorepass 123456

5. 创建客户端证书

5.1 生成客户端私钥

# 创建客户端密钥对
openssl genrsa -des3 -out client.key 2048

# 输入并确认密码
Enter pass phrase for client.key: 
Verifying - Enter pass phrase for client.key: 

5.2 创建客户端证书签名请求

# 生成客户端CSR
openssl req -new -key client.key -out client.csr

# 填写客户端信息
Enter pass phrase for client.key: 
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:TechCompany
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:clientuser
Email Address []:client@techcompany.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 
An optional company name []: 

5.3 创建客户端证书

# 使用CA签名客户端证书
openssl x509 -req -days 3650 -sha256 -extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

Enter pass phrase for ca.key: 

5.4 导出客户端PKCS12证书

# 导出客户端证书为PKCS12格式
openssl pkcs12 -export -in /tmp/ca/client.crt -inkey /tmp/ca/client.key -out /tmp/ca/client.p12 -name "client"

# 根据提示输入密钥密码

四、Tomcat服务器配置

1. 停止Tomcat服务

# 在Tomcat bin目录下执行
./shutdown.sh

2. 部署证书文件

# 复制服务器密钥库到Tomcat配置目录
cp /tmp/ca/server.keystore /你的Tomcat目录/conf/

# 复制信任存储库到Tomcat配置目录
cp /tmp/ca/ca.truststore /你的Tomcat目录/conf/

3. 配置server.xml

# 进入Tomcat配置目录
cd /你的Tomcat目录/conf

# 编辑server.xml文件
vi server.xml

找到并修改以下连接器配置(去掉注释并修改路径和密码):

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           keystoreFile="/你的Tomcat目录/conf/server.keystore"
           keystorePass="你的密码"
           truststoreFile="/你的Tomcat目录/conf/ca.truststore"
           truststorePass="你的密码"
           clientAuth="true" sslEnabledProtocols="TLSv1.2"
           />

<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />

4. 启动Tomcat服务

# 在Tomcat bin目录下执行
./startup.sh

5. 测试HTTPS服务

使用浏览器访问以下地址进行测试:

  • https://localhost:8443/
  • https://你的服务器IP:8443/

首次访问时,浏览器会提示安装客户端证书,选择之前生成的client.p12文件导入即可完成双向认证。

标签: HTTPS

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。