从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL

在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew,这是一个 macOS 缺失的包管理器。

如果您还没有安装 Homebrew,请先安装它。安装 Homebrew 后,安装 OpenSSL 只需要一条命令。

步骤 1:安装 Homebrew(如果尚未安装)

打开您的终端应用程序 (可以在 Spotlight 搜索中输入 “Terminal” 找到),然后粘贴并运行以下命令:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

按照屏幕上的指示完成安装。这可能需要您输入您的用户密码。

步骤 2:使用 Homebrew 安装 OpenSSL

Homebrew 默认会安装最新稳定版的 OpenSSL 3。在终端中运行:

brew install openssl@3

Homebrew 会下载并安装 OpenSSL。安装完成后,它会告诉您 OpenSSL 的安装路径,通常是 /opt/homebrew/opt/openssl@3

步骤 3:配置您的 shell 环境 (重要!)

Homebrew 安装的 OpenSSL 不会自动链接到 /usr/local/bin/usr/bin,以避免与 macOS 内置的旧版本 OpenSSL 发生冲突。这意味着您需要手动配置您的 shell 环境,以便程序能够找到 Homebrew 安装的 OpenSSL。

Homebrew 在安装完成后通常会给出配置提示,类似这样:

==> openssl@3
openssl@3 is keg-only, which means it was not symlinked into /opt/homebrew.
If you need to have openssl@3 first in your PATH, run:echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrcFor compilers to find openssl@3 you may need to set:export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"

请按照 Homebrew 的提示进行操作。以下是通用的做法:

对于 zsh 用户(macOS Ventura 及更高版本的默认 shell):

打开终端,运行以下命令将 OpenSSL 路径添加到您的 PATH 环境变量中,并设置 LDFLAGS 和 CPPFLAGS,这些是编译时需要的环境变量:

echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc
echo 'export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"' >> ~/.zshrc
echo 'export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"' >> ~/.zshrc

然后,重新加载您的 .zshrc 文件使更改生效:

source ~/.zshrc

对于 bash 用户(旧版 macOS 的默认 shell 或您手动切换的):

将上述命令中的 ~/.zshrc 替换为 ~/.bash_profile~/.bashrc (取决于您的配置),然后重新加载:

echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.bash_profile # 或者 ~/.bashrc
echo 'export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"' >> ~/.bash_profile # 或者 ~/.bashrc
echo 'export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"' >> ~/.bash_profile # 或者 ~/.bashrc
source ~/.bash_profile # 或者 source ~/.bashrc

步骤 4:验证安装

配置完成后,关闭并重新打开您的终端应用程序,或者再次运行 source 命令。然后,您可以运行以下命令来验证 OpenSSL 是否已正确安装且您的系统正在使用 Homebrew 版本:

openssl version

输出应该显示类似 OpenSSL 3.x.x ... 的信息。

您还可以验证 which openssl 的输出:

which openssl

这应该显示 /opt/homebrew/opt/openssl@3/bin/openssl (或者如果您将其链接到 /usr/local/bin,则显示 /usr/local/bin/openssl)。

这样,您的 macOS 系统就成功安装了 OpenSSL,并且您的开发环境也配置好了,以便在编译需要 OpenSSL 的其他软件时能够找到它。
macOS 和 Windows 在文件系统结构和 Homebrew 的安装方式上有所不同,导致 openssl.cnf 文件不容易找到。

在 Windows 上,当您安装 OpenSSL 时,openssl.cnf 文件通常会放在安装目录的 binconf 文件夹下,方便直接复制。

然而,在 macOS 上,使用 Homebrew 安装的 OpenSSL (例如 openssl@3),其 openssl.cnf 文件默认位于 Homebrew 的 Cellar 目录中,并且通常不会直接在 bin 目录下。

找到 openssl.cnf 文件

  1. 找到 OpenSSL 的安装路径:
    首先,确定 Homebrew 安装的 OpenSSL 的具体路径。最简单的方法是使用 brew --prefix 命令:

    brew --prefix openssl@3
    

    这个命令通常会返回类似 /opt/homebrew/opt/openssl@3 的路径(如果您使用的是 Apple Silicon Mac)。如果是 Intel Mac,可能是 /usr/local/opt/openssl@3

  2. 查找 openssl.cnf 文件:
    进入上一步找到的 OpenSSL 安装路径,然后查找 openssl.cnf。它通常位于 etc/openssl/ssl/ 目录下。

    假设上一步返回的路径是 /opt/homebrew/opt/openssl@3,您可以尝试:

    find /opt/homebrew/opt/openssl@3 -name openssl.cnf
    

    这条命令会在 /opt/homebrew/opt/openssl@3 目录下搜索名为 openssl.cnf 的文件。

    最常见的位置是:
    /opt/homebrew/opt/openssl@3/etc/openssl/openssl.cnf (对于 OpenSSL 3)

    /usr/local/etc/openssl@3/openssl.cnf (对于 OpenSSL 3,可能是符号链接)

    /opt/homebrew/etc/openssl@3/openssl.cnf (对于 OpenSSL 3,也是符号链接)

    如果您安装的是 openssl (而不是 openssl@3,通常指的是 OpenSSL 1.1),它可能在:
    /opt/homebrew/etc/openssl/openssl.cnf

    /usr/local/etc/openssl/openssl.cnf

如果没有找到
在这里插入图片描述
这表明它可能不在 openssl@3 的顶层安装目录中,或者它位于一个更深的子目录。

根据 Homebrew 安装 OpenSSL 的惯例,openssl.cnf 通常位于以下路径:

  • 对于 OpenSSL 3: /opt/homebrew/etc/openssl@3/openssl.cnf
  • 对于 OpenSSL 1.1: /opt/homebrew/etc/openssl/openssl.cnf

这些路径是 Homebrew 创建的符号链接,指向实际安装在 Cellar 目录下的文件。Homebrew 通常会将配置文件放在 etc 目录下,以便于管理。

请尝试直接查看这些路径:

  1. 检查 OpenSSL 3 的配置文件路径:

    ls -l /opt/homebrew/etc/openssl@3/openssl.cnf
    

    在这里插入图片描述

  2. 如果您不确定自己安装的是 OpenSSL 哪个版本,可以同时检查 OpenSSL 1.1 的路径:

    ls -l /opt/homebrew/etc/openssl/openssl.cnf
    

找到文件后,如何复制到项目目录下?

一旦您找到了 openssl.cnf 文件的确切路径,您就可以使用 cp 命令将其复制到您的项目目录下。

假设您的项目目录是 /path/to/your/project,并且您找到了 openssl.cnf/opt/homebrew/opt/openssl@3/etc/openssl/openssl.cnf

cp /opt/homebrew/opt/openssl@3/etc/openssl/openssl.cnf /path/to/your/project/

请将 /path/to/your/project/ 替换为您实际的项目路径。
在这里插入图片描述

重要提示:

  • 默认配置: 在大多数情况下,生成普通的证书和私钥,您不需要修改 openssl.cnf 文件。当老师要求复制时,通常是为了修改一些默认参数(如默认国家、省份等信息),或者启用一些高级功能(如扩展字段)。
  • 环境变量: OpenSSL 默认会查找 /usr/local/ssl/openssl.cnf 或通过 OPENSSL_CONF 环境变量指定的路径。如果您只是想临时使用自定义的 openssl.cnf,可以将该文件的路径通过环境变量传递给 openssl 命令,而不是直接复制到项目目录:
    OPENSSL_CONF=/path/to/your/project/openssl.cnf openssl req -new -x509 ...
    

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

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

相关文章

Qt 的简单示例 -- 地址簿

这个工程里有两个窗口,都是QWidget派生的窗口 主窗口: 1. 运用了布局,按钮控件,单行编辑框,富文本编辑框等窗口部件; 2. 运用了 QMap 类; 3. 实现了点击按钮弹出子窗口的功能,这里子…

kubernate解决 “cni0“ already has an IP address different from 10.244.0.1/24问题

问题 NetworkPlugin cni failed to set up pod “coredns-5d4b4db-jkmnl_kube-system” network: failed to set bridge addr: “cni0” already has an IP address different from 10.244.0.1/24 解决方案 这个问题通常是由于Flannel网络插件残留配置导致的IP地址冲突。以下…

QT+opecv如何更改图片的拍摄路径

如何更改相机拍摄图片的路径 前言:基础夯实:效果展示:实现功能:遇到问题:未解决: 核心代码: 前言: 最近在项目开发中遇到需要让用户更改相机拍摄路径的问题,用户可自己选…

66常用控件_QTableWidget的使用

目录 代码示例:使用QTableWidget Table Widget 使⽤ QTableWidget 表⽰⼀个表格控件. ⼀个表格中包含若⼲⾏, 每⼀⾏⼜包含若⼲列. 表格中的每个单元格, 是⼀个 QTableWidgetItem 对象. QTableWidget 核⼼⽅法 方法说明item(int row, int column)根据行数数列获取指定的…

记一次edu未授权访问漏洞

首先进入该网址是一个登录界面,查看源代码,找到js文件,发现存在js.map前端信息泄露,于是我们进行js还原。 得到前端的一些源代码,以及路由API等,我们就可以通过这个源代码,进行目录遍历&#xf…

MySQL 索引和事务

目录 前言 一、MySQL 索引介绍 1. 索引概述 2. 索引作用 3. 索引的分类 3.1 普通索引 3.2 唯一索引 3.3 主键索引 3.4 组合索引 (最左前缀) 3.5 全文索引 (FULLTEXT) 3.6 创建索引的原则依据 3.7 查看索引 3.8 删除索引 二、MySQL 事务 1. 事务的 ACID 原则 MYS…

HTML实战项目:高考加油和中考加油

设计思路 页面加载后会自动显示高考内容,点击顶部按钮可以切换到中考内容。倒计时会每秒更新,为考生提供实时的备考时间参考。 使用代表希望的蓝色和金色渐变作为主色调 顶部导航栏可切换高考/中考内容 添加动态倒计时功能 设计励志名言卡片和备考小贴…

What is Predictive Maintenance (PdM)? Learn How Industrial IoT Enables PdM

文章大纲 从预防性维护到预测性维护服务的转变传统预防性维护的局限性预测性维护的定义工业物联网(IIoT)如何助力预测性维护预测性维护带来的成本效益实施预测性维护面临的挑战企业转向预测性维护的原因参考文献大家好!今天,让我们一起深入了解一下预测性维护技术。它正在彻…

CCPC shandong 2025 G

题目链接:https://codeforces.com/gym/105930/problem/G 题目背景: n 名工人加工 m 个工件,第 i 个工件在第 ti 分钟的开头加入 工人 wi 的收件箱。 每分钟,工人从收件箱里拿出一个工件,完成加工后放入下 一个工人的收…

UE路径追踪Path Tracing和Lumen的区别

在Unreal Engine(UE,虚幻引擎)中,Path Tracing 和 Lumen 是两种不同的全局光照(Global Illumination, GI)和反射技术,各自适用于不同的使用场景。以下是它们的主要区别: &#x1f31…

JaCoCo 是什么

JaCoCo(Java Code Coverage)是一款广泛使用的 Java 代码覆盖率工具,用于分析测试用例对项目代码的覆盖程度,帮助开发者识别未被测试的代码区域,从而提升软件质量。它通常与 JUnit、TestNG 等测试框架及 Maven、Gradle …

火山引擎扣子系列

您提到的“火山引擎扣子系列”指的应该是 **火山引擎推出的智能AI对话开发与应用平台——Coze(中文名:扣子)**。这是一个由字节跳动旗下火山引擎开发的、面向开发者和非技术用户的**低代码/无代码AI Bot开发平台**,旨在帮助用户快…

OpenLayers 加载ArcGIS瓦片数据

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 随着GIS应用的不断发展,Web地图也越来越丰富,除了像ESRI、超图、中地数码这样GIS厂商有各自的数据源格式,也有Google…

大模型是什么?

大模型,英文名叫Large Model,也被称为基础模型(Foundation Model)。我们通常说的大模型,主要指的是其中最常用的一类——大语言模型(Large Language Model,简称LLM)。除此之外&#…

LLaMaFactory 微调QwenCoder模型

步骤一:准备LLamaFactory环境 首先,让我们尝试使用github的方式克隆仓库: git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git # 创建新环境,指定 Python 版本(以 3.…

【位运算】判断字符是否唯⼀(easy)

33. 判断字符是否唯⼀(easy) 题⽬描述:解法(位图的思想):C 算法代码:Java 算法代码: 题⽬链接:⾯试题 01.01. 判定字符是否唯⼀ 题⽬描述: 实现⼀个算法&…

满天星之canvas实现【canvas】

展示 文章目录 展示Canvas 介绍【基础】简介兼容性关键特性注意事项应用场景:基本示例 满天星代码实现【重点】代码解释 全量代码【来吧,尽情复制吧少年】html引入JS代码 参考资源 Canvas 介绍【基础】 简介 Canvas是一个基于HTML5的绘图技术&#xff0…

可视化提示词(Prompt)在训练过程中的优化过程:visualize_prompt_evolution

可视化提示词(Prompt)在训练过程中的优化过程:visualize_prompt_evolution 这个函数 visualize_prompt_evolution 的作用是可视化提示词(Prompt)在训练过程中的优化过程,通过对比每个训练轮次(Epoch)的提示词与初始提示词的差异,直观展示哪些Token被保留、哪些被修改…

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题 模块A-理论知识:模块B-适配环境搭建:系统安装与配置:DNS 服务配置:DNS 服务配置:CA 服务配置:Httpd 服务配置&#…

Qt Creator调用Python代码

Qt Creator调用Python代码 项目场景:现在我写的Qt上位机,需要调用同事使用python写的代码,所以我需要一个整合,把同事的代码融合进我的Qt工程里来。 所以,本篇记录Qt Creator中调用Python的一种方法。 操作系统:windows 11 64位 Python使用的版本为 3.9.10,(安装参…