<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Nginx on CX 的博客</title><link>https://blog.imcaoxuan.cn/tags/nginx/</link><description>Recent content in Nginx on CX 的博客</description><generator>Hugo</generator><language>zh-CN</language><copyright>imcaoxuan.cn</copyright><lastBuildDate>Mon, 26 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.imcaoxuan.cn/tags/nginx/index.xml" rel="self" type="application/rss+xml"/><item><title>Mac 与 iPhone 使用客户端证书访问 mTLS 网站</title><link>https://blog.imcaoxuan.cn/posts/2026-10-26-mtls-practice/</link><pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate><guid>https://blog.imcaoxuan.cn/posts/2026-10-26-mtls-practice/</guid><description>&lt;h1 id="mac-与-iphone-使用客户端证书访问-mtls-网站"&gt;Mac 与 iPhone 使用客户端证书访问 mTLS 网站&lt;/h1&gt;
&lt;p&gt;本文记录在 macOS 和 iPhone 上使用客户端证书访问内网 mTLS 网站的方法，涉及 CanoKey PIV、&lt;code&gt;step-ca&lt;/code&gt;、Nginx 和 iOS 系统证书安装。&lt;/p&gt;
&lt;h2 id="1-环境与认证流程"&gt;1. 环境与认证流程&lt;/h2&gt;
&lt;p&gt;当前环境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CA：已有的 &lt;code&gt;CX-Homelab-CA Root CA&lt;/code&gt; 和 &lt;code&gt;CX-Homelab-CA Intermediate CA&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;证书签发：&lt;code&gt;step-ca&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;Web 服务器：Nginx 1.25.0。&lt;/li&gt;
&lt;li&gt;测试站点：&lt;code&gt;https://www.home.arpa&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;Mac 客户端：CanoKey PIV 9A。&lt;/li&gt;
&lt;li&gt;iPhone 客户端：通过 PKCS#12 文件导入客户端证书及私钥。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mTLS 与普通 HTTPS 的区别是：服务器验证客户端证书，客户端也需要验证服务器证书。客户端证书必须包含对应的私钥，单独安装 &lt;code&gt;.crt&lt;/code&gt; 文件通常不足以完成客户端身份认证。&lt;/p&gt;
&lt;p&gt;基本流程如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;客户端访问 HTTPS 站点。&lt;/li&gt;
&lt;li&gt;Nginx 请求客户端证书。&lt;/li&gt;
&lt;li&gt;浏览器或系统选择客户端身份，并使用对应私钥完成 TLS 握手。&lt;/li&gt;
&lt;li&gt;Nginx 验证客户端证书的有效性、证书链和用途。&lt;/li&gt;
&lt;li&gt;验证通过后，服务器允许访问受保护的资源。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;需要注意，客户端证书和服务器 CA 信任是两个不同的问题。安装客户端身份，并不意味着设备已经信任签发网站服务器证书的私有 CA。&lt;/p&gt;
&lt;h2 id="2-mac使用-canokey-piv-9a"&gt;2. Mac：使用 CanoKey PIV 9A&lt;/h2&gt;
&lt;h3 id="21-当前方案"&gt;2.1 当前方案&lt;/h3&gt;
&lt;p&gt;Mac 使用 CanoKey 的 PIV 9A 槽保存客户端身份。macOS 通过智能卡相关机制识别证书和私钥，浏览器在 TLS 握手时使用该身份。&lt;/p&gt;</description></item><item><title>macOS 与 iOS 使用客户端证书访问 mTLS 网站</title><link>https://blog.imcaoxuan.cn/posts/2026-10-26-mtls-client-cert-macos-ios/</link><pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate><guid>https://blog.imcaoxuan.cn/posts/2026-10-26-mtls-client-cert-macos-ios/</guid><description>&lt;h1 id="macos-与-ios-使用客户端证书访问-mtls-网站"&gt;macOS 与 iOS 使用客户端证书访问 mTLS 网站&lt;/h1&gt;
&lt;p&gt;本文介绍如何在 macOS 和 iOS 设备上配置客户端证书，以访问启用双向 TLS（mTLS）的 HTTPS 网站。示例使用私有 CA、&lt;code&gt;step-ca&lt;/code&gt;、Nginx、PKCS#12 和 PIV 智能卡。文中的域名、证书名称、文件名和 IP 地址均为示例，请替换为自己的实际值。&lt;/p&gt;
&lt;h2 id="1-mtls-认证流程"&gt;1. mTLS 认证流程&lt;/h2&gt;
&lt;p&gt;普通 HTTPS 主要由客户端验证服务器证书；mTLS 还要求服务器验证客户端证书。&lt;/p&gt;
&lt;p&gt;基本流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;客户端访问 HTTPS 站点。&lt;/li&gt;
&lt;li&gt;Nginx 在 TLS 握手期间请求客户端证书。&lt;/li&gt;
&lt;li&gt;浏览器或系统选择客户端身份，并使用对应私钥完成签名。&lt;/li&gt;
&lt;li&gt;Nginx 根据配置验证客户端证书、证书链和有效期。&lt;/li&gt;
&lt;li&gt;验证通过后，连接进入 HTTP 层，由站点策略决定是否允许访问。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;客户端身份和服务器 CA 信任是两个独立配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;客户端身份&lt;/strong&gt;：客户端证书及与之匹配的私钥，用于向服务器证明身份。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务器 CA 信任&lt;/strong&gt;：客户端信任签发网站服务器证书的 CA，用于验证 HTTPS 服务器身份。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安装客户端证书不会自动让设备信任私有 CA。&lt;/p&gt;
&lt;h2 id="2-macos使用-piv-硬件密钥"&gt;2. macOS：使用 PIV 硬件密钥&lt;/h2&gt;
&lt;p&gt;如果客户端私钥保存在支持 PIV 的硬件密钥中，可以让私钥留在硬件设备内，避免导出私钥文件。浏览器是否能使用该身份，取决于 macOS、智能卡中间件、密钥设备和浏览器的支持情况。&lt;/p&gt;
&lt;p&gt;一般检查步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;插入 PIV 硬件密钥。&lt;/li&gt;
&lt;li&gt;确认 macOS 能识别智能卡及其证书。&lt;/li&gt;
&lt;li&gt;打开浏览器并访问 mTLS 网站。&lt;/li&gt;
&lt;li&gt;如果浏览器请求客户端证书，选择对应的身份。&lt;/li&gt;
&lt;li&gt;按提示输入 PIN 或完成硬件操作。&lt;/li&gt;
&lt;li&gt;结合页面结果和服务器日志确认认证是否成功。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可用以下命令检查系统状态：&lt;/p&gt;</description></item></channel></rss>