OpenSSL安装过程总结

news2024/9/30 7:30:27

1 OpenSSL是什么及怎么用

参考: openssl中文手册

2 下载源文件

Github: https://github.com/openssl/openssl
官网: https://www.openssl.org/source/

3 安装

先查看README.md文档,根据描述找到自己对应平台的NOTES-*.md文档和INSTALL.md文档

3.1 环境配置

从INSTALL.md和NOTES-WINDOWS.md中得知需要做如下准备

  • make工具

官方用的是nmake,其他的或许也可以
VS2022中自带
在开发平台中打开命令行输入nmake /?执行,如果有输出,说明已经安装

  • perl

需要另外安装

  • ANSI C编译器

VS2022中已安装

  • 支持开发库和C头文件的开发环境

VS2022支持

  • 支持的操作系统

Windows10支持

  • NASM

需要另外安装

perl安装(参考文档NOTES-PERL.md)
  • 下载

官方针对VC-*环境推荐Strawberry Perl
地址:http://strawberryperl.com
要求版本在5.10.0以上,直接下最新版

  • 安装

安装完成后,打开命令行输入perl --version,有版本信息输出代表安装成功

  • 模块安装

按照文档描述,需要安装Text::Template和Test::More两个模块
注:需要以管理员身份执行命令

cpan -i Text::Template
cpan -i Test::More
NASM安装
  • 下载
    地址:https://www.nasm.us,下载最新稳定版
  • 安装
    可以直接下载可执行文件压缩包,解压后需要自己添加环境变量
    或者下载installer安装包快捷安装,自动添加环境变量
  • 测试
  • 安装完成后,在命令行输入nasm --version执行,有版本信息输出则说明安装成功

3.2 生成makefile

用管理员模式打开VS2022,打开下载的OpenSSL根目录,打开开发者命令提示窗口
执行命令perl Configure ,程序会自动判断当前系统和处理器架构
也可自己指定

perl Configure VC-WIN32
perl Configure VC-WIN64A
perl Configure VC-WIN64-ARM

3.3 生成OpenSSL

配置环境变量

在执行命令之前,需要配置临时环境变量

  • 根据自己的系统环境情况,找到VS安装目录下的vcvars32.batvcvars64.bat文件(可能在Tools下面,也可能在别的地方,最好下个Everything搜一下)
  • 复制这个文件的完整路径(包括文件名),在VS2022打开的命令窗口中输入执行(需要用双引号括起来)
E:\Downloads\openssl-3.0.11\openssl-3.0.11>"D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.7.4
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
生成

执行命令nmake

生成结果测试

执行命令:nmake test
如果没问题,最后一行会显示result: pass,好像是这样,过程中会有许多ok和少量skipped

安装

执行命令:nmake install
这一步需要以管理员权限执行,如果一开始就是以管理员权限打开VS2022的,可以直接执行,否则需要关闭后再重新以管理员权限打开VS2022

判断是否安装成功
  • 在目录C:\Program Files\OpenSSL下有四个文件夹
    在这里插入图片描述
  • 命令行执行openssl,出现类似执行python的效果
PS C:\WINDOWS\system32> openssl
OpenSSL>

以上两点应该能大致判断安装成功了,具体是不是缺少哪些文件需要用了才知道,可以看看OpenSSL的中文手册

4 遇到的问题

  • fatal error C1041: 无法打开程序数据库“xxxxxx.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用/FS
    出现这个错误可能是因为并行编译的问题,即同时有很多个文件在编译,它们都需要往这个pdb文件中写入东西,从而发生冲突
    • 解决:
      • 方法1:不让它并行编译
        在VS中打开工具-选项,设置最大并行项目生成数为1
        在这里插入图片描述
      • 方法2:强制写入文件
        通过nmake的输出知道编译用的是cl命令,打开makefile,查找发生冲突的pdb文件名,发现修改这个pdb文件的宏指令,其中/Fd参数是cl命令用于给文件命名的,具体各种参数参考cl命令的帮助文档
        在这里插入图片描述
        按照出错时的提示,在命令中间添加/FS参数,保存
        估计其他pdb文件也可能出现这种问题,所以通过查找/Fd参数,找到每一个生成pdb文件的指令,在里面添加/FS参数,保存
        在这里插入图片描述
    • 两种方法可以分别尝试一下,我是两个一起搞的,所以不知道是哪个方法在起作用
    • 解决了这个问题后,后面列出的问题也都迎刃而解了
  • fatal error C1090: PDB API 调用失败,错误代码“3”
    可能的原因:
    • 权限的问题
      解决:以管理员模式运行
    • 文件被占用
      解决:按照C1041错误的方法执行一遍,不行再另外想办法
  • 下面的问题错误都是由于前面的问题导致命令执行失败引起的,所以前面的问题解决之后,后面的U1077错误就跟着解决了
    • fatal error U1077: “cmd”: 返回代码“0x2”
    • fatal error U1077: “cl”: 返回代码“0x2”

后续

  • 2023.10.8
    遇到新的问题:用安装的openssl生成证书,执行命令
openssl genrsa -out privkey.pem 2048
openssl req -new -key privkey.pem -out cert.csr
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 3650

第一条命令执行没有问题,会在本地用户目录下生成一个privkey.pem文件,但是后面两条命令执行失败,

C:\Users\Jiang>openssl req -new -x509 -key privkey.pem -out cacert.pem -days 3650
Can't open Z:/extlib/_openssl111__/ssl/openssl.cnf for reading, No such file or directory
24696:error:02001003:system library:fopen:No such process:crypto/bio/bss_file.c:69:fopen('Z:/extlib/_openssl111__/ssl/openssl.cnf','r')
24696:error:2006D080:BIO routines:BIO_new_file:no such file:crypto/bio/bss_file.c:76:

提示无法打开文件,而且文件路径是我电脑上绝对没有的,说明之前的强制写入可能存在问题,具体是什么原因实在不明白
解决办法:(PS:这个问题其实昨晚刚发完这篇文章就遇到了,但是太晚了也太累了,不想整了)
今天偶然间发现其实不用自己去单独安装openssl,为什么呢?
因为Git里面已经集成了包括perl、ssh、openssl等等在内的很多工具
至于我怎么发现的,我在Git Bash里面使用ssh生成密钥时,遇到一些不懂的,想通过/?和–help参数看能不能查看ssh的帮助文档,发现行不通,然后我就尝试用平常查看版本信息的参数-V测试有没有版本信息输出

Jiang@Crazy MINGW64 ~/.ssh
$ ssh -help
ssh: unknown option -- h
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
           [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
           [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
           [-J destination] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-P tag] [-p port] [-Q query_option]
           [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           destination [command [argument ...]]

Jiang@Crazy MINGW64 ~/.ssh
$ ssh /?
ssh: Could not resolve hostname /?: Name or service not known

Jiang@Crazy MINGW64 ~/.ssh
$ ssh -V
OpenSSH_9.4p1, OpenSSL 3.1.2 1 Aug 2023

问题来了,居然同时输出了OpenSSH和OpenSSL的版本信息,但是openssl的版本号和前面安装的不一样,于是就在git bash 里面执行了前面生成SSL证书的三条命令,都执行成功了,简直了

为什么直接在cmd里面执行会失败呢? 因为我在安装Git for Windows时,怕把系统环境变量搞得太乱,设置了Git命令只能在git bash上执行,Git中集成的工具当然也只能在git bash上执行了,这就导致无法在除了git bash之外的其他命令行窗口中运行这些命令

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

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

相关文章

RunnerGo亮相QECon大会上海站,来看看这款全栈测试平台

QECon(Quality Efficiency Conference)质量效能大会在上海正式开幕!本次大会以"数生智慧:高质量发展新引擎"为主题,深入探讨如何借助数字化和智能化技术推动软件质量的发展,为高质量经济发展提供…

【TES720D-KIT】青翼科技支持双网口的全国产化四核CPU+FPGA处理器开发套件

TES720D-KIT是专门针对我司TES710D(基于复旦微FMQL10S400的全国产化ARM核心板)的一套开发套件,它包含1个TES720D核心板,加上一个TES720D-EXT扩展底板。 FMQL20S400是复旦微电子研制的全可编程融合芯片,在单芯片内集成…

第八章 排序 七、堆排序

目录 一、堆的概念 1、大根堆 2、小根堆 二、建立大根堆 1、举个例子,我们要让一个序列变换成为一个大根堆 2、我们把序列看成一棵完全二叉树,而完全二叉树有以下特性: 3、在此序列中,由于是从1开始的序列,所以分…

海外网红营销:赢得年轻人的心,打破传统的秘密武器

随着数字时代的崛起,社交媒体已经成为了年轻人生活的一部分。年轻人在社媒平台上创造和分享内容,构建着他们的社交圈子,也塑造着全球的文化和趋势。对于企业来说,赢得年轻人的心已经成为了一项关键任务,而海外网红营销…

linux环境下 查看 进程内存占用情况

新版本 -o %MEM 按内存排序 top -o %MEM -b -n 1 | grep java | awk {print "PID: "$1" \t MEM: "$6" \t %CPU: "$9"% \t %MEM: "$10"%"} 通过指令找到内存消耗量最大的几个进程 查看内存消耗情况 top -b -n 1 | grep jav…

Linux从时间服务器同步时间

一、基本设定 自己的时间服务器:111.11.11.111 二、操作 查看当前时间命令:date,发现时间不一致。 同步命令:/usr/sbin/ntpdate 111.11.11.111 然后等待同步完成即可。 如果同步命令不可用,需要先安装Ntp服务&…

使用运放产生各种波形

目录复制 文章目录 RC正弦振荡电路文氏电桥振荡电路移项式正弦波振荡电路 集成函数发生器运算放大器驱动电容性负载峰值检波多通道运放未使用的运放接法 RC正弦振荡电路 文氏电桥振荡电路 这个振荡器起振条件RF > 2R1,起振后又希望RF 2R1产生矛盾怎么办? 将RF换…

LeetCode 1251. 平均售价

题目链接:1251. 平均售价 题目描述 表:Prices Column NameTypeproduct_idintstart_datedateend_datedatepriceint (product_id,start_date,end_date) 是 prices 表的主键(具有唯一值的列的组合)。 price…

开发者指南:如何集成一对一直播美颜SDK到你的应用中

本文将为开发者们提供一个详细的指南,教你如何将一对一直播美颜SDK集成到你的应用中,以提供更具吸引力的直播体验。 -为什么选择一对一直播美颜SDK? 在开始之前,让我们先明确一下为什么选择一对一直播美颜SDK是一个明智的决定。…

WorkPlus即时通讯app打通业务与生态,实现高效管理与协同

作为移动应用管理领域的领先品牌,WorkPlus通过其创新性的解决方案,成为企业级应用管理平台中的佼佼者。WorkPlus的使命是连接业务和生态,为企业提供一体化的移动应用管理解决方案,从而助力企业实现数字化转型和有效的业务运营。 …

PTE阶段规划

目录 复习的各个阶段 线下应该如何 rs应对 从来都是流利度大于内容 推荐的练习网站 口语 DI 关键词是不能念错 口语 RL rl每日练习方法 ASQ 写作 swt 阅读 一半靠机经 听力 口语和听力 考模版来熟悉 熟悉模版 强调的是,整个的逻辑思维 字字和句句都…

OpenAI举办“ChatGPT应用开发大赛”:226个团队参加,异常火热!

韩国先驱报消息,OpenAI与全球最大电信公司之一SKT在首尔圆满举办,生成式AI开发者大赛“Prompter DaySeoul 2023”。主要通过ChatGPT等大模型,开发造福社会的生成式AI应用。 本次大赛受到热烈欢迎共有226个团队参加,奖金共计1亿韩…

蓝桥等考Python组别十六级002

第一部分:选择题 1、Python L16 (15分) a和b是两个集合,它们的关系如下图所示: 以下哪个表达式的值是True?( ) a > ba < ba == ba >= b正确答案:B 2、Python

Git 学习笔记 | Git 项目创建及克隆

Git 学习笔记 | Git 项目创建及克隆 Git 学习笔记 | Git 项目创建及克隆创建工作目录与常用指令本地仓库搭建克隆远程仓库 Git 学习笔记 | Git 项目创建及克隆 创建工作目录与常用指令 工作目录&#xff08;WorkSpace)一般就是你希望Git帮助你管理的文件夹&#xff0c;可以是…

SSO单点登录和OAuth2.0区别

一、概述 SSO是Single Sign On的缩写&#xff0c;OAuth是Open Authority的缩写&#xff0c;这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似&#xff0c;但概念上又十分不同。SSO大家应该比较熟悉&#xff0c;它将登录认证和业务系统分离&#xff0c…

OpenCV实现单目相机检测物体尺寸

目录 步骤&#xff1a; Canny边缘检测算法介绍&#xff1a; 多边形逼近 代码实现&#xff1a; 效果展示&#xff1a; 步骤&#xff1a; 导入必要的库&#xff1a;cv2用于图像处理&#xff0c;numpy用于数组操作。定义了一个函数preprocess&#xff0c;用于对图像进行预处理…

在OpenWRT上自动重拨号获取公网IP(手记)

在OpenWRT上自动重拨号获取公网IP&#xff08;手记&#xff09; 前言 哈喽&#xff0c;大家是否有过这样的经历&#xff1a;想在家里搭建一个小型的服务器、或者是一个NAS&#xff0c;但由于运营商提供的IP地址是一个内网地址&#xff0c;但有一定的概率能获得公网IP。这篇文…

牙齿矫正后需要戴保持器有哪几种?

牙齿矫正后需要戴保持器有哪几种&#xff1f; 矫正牙齿一般是采取通过牙套产生的力量&#xff0c;能够使牙齿回归到正常的牙列当中&#xff0c;在矫正牙齿之后&#xff0c;就需要适当的佩戴保持器&#xff0c;能够起到固定牙齿的效果&#xff0c;目前临床上常见的保持器有两大…

COS流量被盗刷了

背景 家人们谁懂啊&#xff0c;早上起来发了日常的文章&#xff0c;出门的时候发现手机上腾讯云给的提示&#xff1a;COS欠费了。我不敢相信的我的眼睛&#xff01;我之前每个月才花费几毛钱的&#xff0c;知道的伙伴都知道我这可是卖废品攒下来的钱&#xff01;敢看了一下账单…

超高频RFID模具精细化生产管理方案

近二十年来&#xff0c;我国的模具行业经历了快速发展的阶段&#xff0c;然而&#xff0c;模具行业作为一个传统、复杂且竞争激烈的行业&#xff0c;企业往往以订单为导向&#xff0c;每个订单都需要进行新产品的开发&#xff0c;从客户需求分析、结构确定、报价、设计、物料准…