本教程讲解如何在 macOS 上安装 SSL 证书。内容涵盖使用钥匙串访问(Keychain Access)导入证书和 CA 证书包,以及许多现有环境仍在使用的较旧的macOS Server(Server.app)工作流程,还有当前 macOS 版本中 Server.app 已被移除后的实际可行方案。
重要提示:苹果已停止macOS Server(Server.app)产品的开发。2018年,Web、邮件和大多数托管服务被移除,该应用本身也于2022年4月正式退役。最后一个版本5.12.2仅能在macOS Monterey及更早版本上运行。以下步骤将涵盖旧版Server.app方法以及当前的替代方案。
生成CSR代码
要激活您的SSL证书,您需要将有关域名和组织的详细信息发送给证书颁发机构(CA)。这个标准步骤称为证书签名请求,即CSR。您有两种选择:
- 使用我们的CSR生成器自动创建CSR。
- 按照我们的分步教程了解如何在macOS上生成CSR。
在下单时提交CSR。CA会验证您的请求,一旦通过审核,便会签发并颁发证书。您将通过电子邮件收到证书文件。之后,请继续进行下面的安装步骤。
在macOS上安装SSL证书
以下步骤遵循原有的macOS Server(Server.app)工作流程:使用钥匙串访问导入CA证书包和证书,然后在Server应用中将证书分配给相应的服务。如果您的Mac已不再拥有Server应用,请在完成第2步后跳转至当前macOS:无Server.app部分,因为钥匙串导入步骤依然适用。
第1步:准备证书文件
下载CA发送给您的ZIP压缩包并解压。您应该会得到一个扩展名为.crt的文件(您的主证书)和一个扩展名为.ca-bundle的文件(根证书和中间证书,也称为CA证书包)。您还需要在生成CSR时创建的私钥。
第2步:将.ca-bundle文件添加到钥匙串访问
先从CA证书包开始。它包含浏览器和客户端用来构建通往受信任根证书的信任链的根证书和中间证书。如果缺少这些证书,访问者可能会看到”不安全”或证书不受信任的警告。
- 找到扩展名为.ca-bundle的文件。
- 打开钥匙串访问(Keychain Access)(可通过Spotlight搜索,或在应用程序 > 实用工具中找到)。
- 将.ca-bundle文件拖放到钥匙串访问窗口中。将其添加到系统(System)钥匙串,以便所有用户和服务都能使用它。
- 要确认导入成功,请在搜索栏中输入您的CA名称。您应该能看到列出的中间证书和根证书。
您也可以通过终端执行相同的操作,这在无显示器或远程服务器上非常有用。以下命令会将证书包导入系统钥匙串:
sudo security import yourdomain.ca-bundle -k /Library/Keychains/System.keychain
第3步:添加您的主证书(旧版Server.app)
此步骤使用已停止支持的Server.app。如果您的Mac已不再拥有该应用,请参阅下一部分。
- 打开Server应用,前往服务器(Server) > 证书(Certificates)。
- 在主页面上,双击待处理的证书(即生成CSR时创建的证书)。
- 在打开的窗口中,拖放您的.crt文件,然后点击确定(OK)。
- 有效的证书现在会显示颁发者名称和到期日期。
第4步:将证书分配给您的服务(旧版Server.app)
在Server应用中,找到使用以下证书保护服务(Secure services using)设置。使用下拉菜单选择您的SSL证书。若要将证书分配给特定服务(例如文件共享或邮件服务),点击自定义(Custom)并选择您想要保护的服务。完成后点击确定(OK)。
您的SSL证书现已安装完成。要确认安装结果并检查常见问题,请使用我们的SSL Checker。
当前macOS:无Server.app(使用钥匙串加Apache或nginx)
由于苹果已停止支持Server.app,当前的macOS版本已没有服务器 > 证书界面,也无法按服务单独分配证书。将证书导入钥匙串访问(第2步)以获得系统信任的做法仍然适用,但要提供HTTPS服务,您需要直接配置Web服务器。macOS内置了Apache(httpd),而nginx可通过Homebrew安装。将证书和密钥文件放置在服务器可以读取的位置,例如/etc/ssl/目录下,并确保私钥文件仅root用户可读。
选项A:内置Apache(httpd)
编辑/etc/apache2/httpd.conf文件,删除以下几行开头的#符号,以加载SSL模块和SSL配置:
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
LoadModule ssl_module libexec/apache2/mod_ssl.so
Include /private/etc/apache2/extra/httpd-ssl.conf
首先,创建一个完整证书链文件(您的证书后接CA证书包),这是Apache 2.4.8及更高版本中SSLCertificateFile所要求的格式:
cat yourdomain.crt yourdomain.ca-bundle > yourdomain_fullchain.crt
然后编辑/etc/apache2/extra/httpd-ssl.conf文件,并确保其监听443端口。此文件默认已包含一个使用自签名证书的<VirtualHost _default_:443>块,因此您可以直接编辑该块,或添加以下虚拟主机配置并注释掉默认配置,以避免443端口上出现两个主机配置:
<VirtualHost *:443>
ServerName www.yourdomain.com
DocumentRoot "/Library/WebServer/Documents"
SSLEngine on
SSLCertificateFile /etc/ssl/yourdomain_fullchain.crt
SSLCertificateKeyFile /etc/ssl/private/yourdomain.key
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLHonorCipherOrder off
</VirtualHost>
上述路径假设私钥位于/etc/ssl/private/目录下,但该目录在macOS上默认可能不存在。请先创建该目录,并确保密钥仅root用户可读:
sudo mkdir -p /etc/ssl/private
sudo chmod 600 /etc/ssl/private/yourdomain.key
在重启之前测试配置,然后重启Apache:
sudo apachectl configtest
sudo apachectl restart
测试通过时应显示Syntax OK。如果出现错误,请先修复问题再重启,以避免服务器启动失败。
选项B:nginx
如果您使用nginx,请在server块中引用完整证书链文件和密钥,然后重新加载配置:
server {
listen 443 ssl;
server_name www.yourdomain.com;
ssl_certificate /etc/ssl/yourdomain_fullchain.crt;
ssl_certificate_key /etc/ssl/private/yourdomain.key;
ssl_protocols TLSv1.2 TLSv1.3;
}
sudo nginx -t
sudo nginx -s reload
若要对多台Mac设备进行统一配置管理(这原本是旧版Profile Manager所承担的角色),请使用当前可用的MDM解决方案。要从任意设备验证已安装的证书,请使用我们的SSL Checker。
常见问题
不可用。苹果于2018年移除了macOS Server中的大多数托管服务,并于2022年4月正式停止该应用的支持。最后一个发行版本5.12.2仅能在macOS Monterey及更早版本上运行,在更新的macOS版本上不受支持。在当前的macOS上,您需要将证书导入钥匙串访问,并直接配置Apache或nginx,而不是使用Server应用。
将CA证书包和您的证书导入钥匙串访问,以便系统信任该证书链,然后将Web服务器指向证书和私钥文件。macOS内置了Apache(配置文件位于/etc/apache2/),您也可以通过Homebrew安装nginx。在Apache中设置SSLCertificateFile和SSLCertificateKeyFile,或在nginx中设置ssl_certificate和ssl_certificate_key,然后测试配置并重启服务器。
受信任的证书存储在由钥匙串访问管理的钥匙串中。系统范围的证书存储在系统(System)钥匙串中,位于/Library/Keychains/System.keychain。Web服务器读取的证书和私钥文件可以放置在其他位置,例如/etc/ssl/目录下,只要服务器配置指向这些文件,并且密钥保持仅root可读即可。
是的。CA证书包包含中间证书和根证书,可让浏览器和客户端构建完整的信任链。如果跳过此步骤,部分访问者会看到证书不受信任或证书链不完整的警告。请将.ca-bundle文件导入钥匙串访问,或者将其与您的证书合并为一个完整证书链文件,用于Apache或nginx。
在浏览器中打开您的网站并检查锁形图标,或者通过终端使用OpenSSL查询服务器所提供的证书:echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -dates
该命令会输出颁发者信息和有效期日期。您也可以使用我们的SSL Checker进行完整的外部检测。


