ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OpenSSL在Windows下的编译安装:TaoToken统一Key通道下的Perl与Visual C++配置实战

OpenSSL在Windows下的编译安装:TaoToken统一Key通道下的Perl与Visual C++配置实战 1. Windows 下为什么要自己编译 OpenSSL如果你在 Windows 上做 C/C 开发、写网络服务或者要给某个依赖库补上 TLS 能力大概率绕不开 OpenSSL。官方并不总是提供你想要的预编译版本尤其是当你需要特定版本、特定编译选项比如静态库、no-shared、指定 VS 工具集时从源码编译几乎是唯一选择。OpenSSL 在 Windows 下的编译安装核心链路其实就三件事Perl 环境、Visual C 编译工具链、以及正确的 Configure 参数。听起来简单但真正动手时很多人会卡在perl Configure VC-WIN32报错、nmake找不到、或者汇编器缺失上。这篇就按“从零到跑通”的顺序把每一步命令、环境变量和验证动作都写清楚目标是一次编译成功。另外编译出来的 OpenSSL 最终是要给应用调用的。如果你后续打算把本地服务接入统一的模型 API 通道TaoToken 的 Key/API 体系可以作为一个验证目标——编译完成后用 OpenSSL 提供的命令行工具或你写的客户端去请求 TaoToken 的接口能跑通就说明整条链路没问题。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。适合谁看需要在 Windows 本地编译 OpenSSL 的开发者、要定制编译参数的运维/构建同学、以及想搞明白 Perl Visual C 这套组合到底怎么配的人。下面按步骤来。2. 前置准备Perl 与 Visual C 环境2.1 Perl 环境怎么装OpenSSL 的构建系统Configure 脚本是用 Perl 写的所以 Windows 上必须先有可用的 Perl。推荐两个来源Strawberry Perl自带 gcc 和 make安装后perl直接进 PATH最省心。ActivePerl老牌发行版安装时勾选“Add to PATH”。安装完成后打开一个新的命令行窗口注意必须新开让 PATH 生效执行perl -v正常会输出类似This is perl 5, version 36, subversion 0 (v5.36.0) built for MSWin32-x64-multi-thread。如果提示perl 不是内部或外部命令说明 PATH 没配好手动把 Perl 的bin目录加进系统环境变量。注意不要用 WSL 里的 perl 去编译 Windows 版 OpenSSL路径和工具链会混。就用 Windows 原生 Perl。2.2 Visual C 编译工具链编译器用 Visual CMSVC。你有两种方式拿到它安装完整 Visual Studio勾选“使用 C 的桌面开发”工作负载。只装 Build Tools for Visual Studio体积小够用。装完后关键是找到Developer Command Prompt开发者命令提示符。在开始菜单搜索 “Developer Command Prompt for VS”打开它。这个窗口会自动配置好cl.exe、nmake.exe、link.exe的路径。验证cl nmake /?cl会输出版本信息比如Microsoft (R) C/C Optimizing Compiler Version 19.xxnmake会打印用法。两个都正常工具链就 OK 了。2.3 汇编器可选但推荐OpenSSL 默认会尝试用汇编优化Windows 下用 MASM 或 NASM。MASM 一般随 VS 自带ml.exeNASM 需要单独装。如果你不想折腾汇编可以在 Configure 时加no-asm编译会慢一点但更稳。想用汇编的话确认ml.exe在 PATH 里where ml有输出即可。没有就装 NASM把nasm.exe所在目录加进 PATH。3. 可复制配置从解压到 Configure3.1 获取源码并解压去 OpenSSL 官方发布页下载源码包比如openssl-3.0.x.tar.gz。Windows 下用 7-Zip 解压两次tar.gz 先解成 tar再解成目录或者直接用tar命令tar -xzf openssl-3.0.5.tar.gz cd openssl-3.0.5进入目录后你会看到INSTALL.md、Configure、config等文件。老版本里是INSTALL.W32新版本统一到INSTALL.md里面有针对 Windows 的说明可以对照看。3.2 Configure 参数怎么选在 Developer Command Prompt 里切到源码目录执行 Configure。常用组合perl Configure VC-WIN32 no-shared --prefixC:\openssl-build参数解释参数作用VC-WIN32目标平台32 位用 VC-WIN3264 位用 VC-WIN64Ano-shared只生成静态库不生成 DLL部署简单--prefix安装目录编译完nmake install会装到这里no-asm不用汇编规避汇编器问题--openssldir配置文件目录一般跟 prefix 一致即可64 位机器上建议用perl Configure VC-WIN64A no-shared --prefixC:\openssl-build执行成功会输出一堆配置摘要最后一行类似Configuring for VC-WIN64A。如果报Cant locate ...或perl module not found多半是 Perl 环境不完整重装 Strawberry Perl 即可。3.3 生成 Makefile 并编译Configure 之后直接nmake新版本 OpenSSL1.1.0 以后不再需要ms\do_masm、ms\do_nasm这些老步骤Configure 已经生成好 Makefile。如果你看的是很老的教程里面让你执行ms\do_ms那是 1.0.x 时代的做法新版本会报错找不到文件。编译过程大概几分钟到十几分钟取决于机器。看到类似link /nologo /subsystem:console /opt:ref /debug /out:apps\openssl.exe ...没有error就是过了。3.4 安装与验证nmake install装完后去C:\openssl-build看应该有bin、lib、include三个目录。把C:\openssl-build\bin加进 PATH然后openssl version -a输出OpenSSL 3.0.x ...以及编译参数说明安装成功。4. 验证请求用 OpenSSL 命令行跑通一次调用编译安装只是第一步真正要确认的是“它能用”。最直接的验证是用openssl s_client去连一个 HTTPS 服务看 TLS 握手是否正常。openssl s_client -connect taotoken.net:443 -servername taotoken.net如果握手成功你会看到证书链、Verify return code: 0 (ok)以及SSL-Session信息。这说明你编译出来的 OpenSSL 能正常做 TLS 客户端。再进一步用openssl生成一个自签名证书验证加密功能openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj /CNtest生成key.pem和cert.pem两个文件没有报错就说明 RSA 和证书相关功能正常。如果你要把这个 OpenSSL 用在接入 TaoToken 统一 Key 通道的客户端里可以写个最小 C 程序用 libssl 发起 HTTPS 请求到https://taotoken.net/api带上你的 API Key。编译时链接你刚生成的静态库cl client.c /I C:\openssl-build\include /link /LIBPATH:C:\openssl-build\lib libssl.lib libcrypto.lib ws2_32.lib gdi32.lib advapi32.lib crypt32.lib user32.lib能编译通过并运行出结果就说明“编译 → 链接 → 调用”整条链路闭环了。TaoToken 的 API Key 可以在控制台创建入口是 https://taotoken.net/console 创建后拿到 Key 填进你的客户端即可。5. 本篇常见错排查5.1nmake不是内部或外部命令原因没在 Developer Command Prompt 里操作或者 VS 工具链没装全。解决重新打开 “Developer Command Prompt for VS”确认cl和nmake都能用。5.2perl Configure报Cant locate Win32/Console.pm原因Perl 安装不完整或者用了精简版 Perl。解决换 Strawberry Perl 完整安装重开命令行。5.3 编译到一半报ml.exe not found或nasm not found原因启用了汇编但汇编器不在 PATH。解决要么把ml.exe/nasm.exe目录加进 PATH要么 Configure 时加no-asm重新来。5.4nmake install权限不足原因--prefix指向了C:\Program Files这类需要管理员权限的目录。解决换成C:\openssl-build这种普通目录或者用管理员身份运行命令行。5.5 链接时报unresolved external symbol原因链接库不全。Windows 下用 OpenSSL 静态库除了libssl.lib、libcrypto.lib还要带上ws2_32.lib、crypt32.lib、user32.lib、gdi32.lib、advapi32.lib。缺哪个补哪个。5.6 版本对不上老教程的ms\do_ms找不到原因OpenSSL 1.1.0 之后构建流程简化ms\目录下的老脚本已移除。解决Configure 之后直接nmake不要再执行ms\do_*。6. 编译完成后把 Key 通道接起来走到这里你本地应该已经有一个能用的 OpenSSL 了openssl version -a有输出s_client能握手静态库能链接进自己的程序。接下来就是把它用到实际项目里。如果你后续要做的是模型调用、编码助手或者 Agent 类应用建议把 API Key 统一管理起来而不是散落在各个脚本里。TaoToken 提供了统一的 Key/API 通道接入文档在 https://taotoken.net/doc API Key 在 https://taotoken.net/api-keys 创建。想先验证模型对话是否通可以直接用模型对话页面试 https://taotoken.net/models 。如果是长期编码或 Agent 场景Coding Plan 更合适 https://taotoken.net/coding-plan 。我自己的习惯是OpenSSL 编译一次把--prefix目录固定下来写进项目的构建脚本API Key 走环境变量不硬编码。这样换机器、换版本时只需要重新编译 OpenSSLKey 通道那边不用动。踩过的坑基本都在第 5 节里了按那个清单对一遍基本能一次过。
返回列表