OpenSSL安装过程总结

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 knownJiang@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.hqwc.cn/news/130427.html

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

相关文章

函数reshape(-1,)里的-1的意思

reshape函数是对narray的数据结构进行维度变换,由于变换遵循对象元素个数不变,在进行变换时,假设一个数据对象narray的总元素个数为N,如果我们给出一个维度为(m,-1)时,我们就理解为将…

【已解决】msvcp140.dll丢失怎样修复?msvcp140.dll重新安装的解决方法

今天我要和大家分享的是关于msvcp140.dll丢失的五种不同解决方法。我们知道,在运行一些软件或游戏的时候,经常会遇到“msvcp140.dll丢失”的问题,这可能会影响到我们的使用体验。那么,面对这个问题,我们应该如何应对呢…

Java Agent初探

1:Java Agent简介 Java Agent 这个技术出现在 JDK1.5 之后,对于大多数人来说都比较陌生,但是多多少少又接触过,实际上,我们平时用的很多工具,都是基于 Java Agent 实现的,例如常见的热部署 JRe…

服务器数据恢复-DS5300存储raid5硬盘出现坏道离线的数据恢复案例

服务器数据恢复环境: 某单位一台DS5300存储,1个主机4个扩展柜,组建了2组RAID5(一组27块硬盘,一组23块盘)。27块盘的那组RAID5阵列存放Oracle数据库文件,存储系统一共分了11个卷。 服务器故障&a…

JVM的内存模型

一、JVM的内存模型 1.1、目标 内存模型是用来描述JVM内部的内存结构和内存管理的模型。它定义了JVM在运行Java程序时所需要的各种内存区域,以及每个内存区域的作用和特点。 1.2、结构划分 1.2.1、栈 每个线程在执行Java方法时会创建一个栈帧(Stack …

Prometheus和grafana安装配置手册

1.简介 本文档为prometheus和grafana安装配置手册,prometheus和grafana的内容、和操作过程,详细介绍了服务监控配置、dashboard配置、告警配置等操作。 2.部署说明 Prometheus基于Golang编写(需要安装),编译后的软件…

Transformer为什么如此有效 | 通用建模能力,并行

目录 1 更强更通用的建模能力 2 并行计算 3 大规模训练数据 4 多训练技巧的集成 Transformer是一种基于自注意力机制的网络,在最近一两年年可谓是大放异彩,我23年入坑CV的时候,我看到的CV工作似乎还没有一个不用到Transformer里的一些组…

实现一个简单的线性回归和多项式回归(2)

对于多项式回归,可以同样使用前面线性回归中定义的LinearRegression算子、训练函数train、均方误差函数mean_squared_error,生成数据集create_toy_data,这里就不多做赘述咯~ 拟合的函数为 def sin(x):y torch.sin(2 * math.pi * x)return y1.数据集的建…

电机控制——高数基础

最近开始学习电机控制,将会写一个系列学习笔记,作为一个新手,肯定有理解不到位或错误的地方,仅供大家参考,欢迎交流指正。 先复习一下微积分和自动控制原理,大学学的忘得一干二净。本文大多摘自维基百科 …

信息系统项目管理师第四版学习笔记——项目进度管理

项目进度管理过程 项目进度管理过程包括:规划进度管理、定义活动、排列活动顺序、估算活动持续时间、制订进度计划、控制进度。 规划进度管理 规划进度管理是为规划、编制、管理、执行和控制项目进度而制定政策、程序和文档的过程。本过程的主要作用是为如何在…

uniapp获取公钥、MD5,‘keytool‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

获取MD5、SHA1、SHA256指纹信息 通过命令的形式获取 winr调出黑窗口cd到证书所在目录输入keytool -list -v -keystore test.keystore,其中 test.keystore为你的证书名称加文件后缀按照提示输入你的证书密码,就可以查看证书的信息 通过uniapp云端查看(证书是在DClou…

微服务 BFF 架构设计

在现代软件开发中,由于程序、团队、数据规模太大,需要把企业的业务能力进行复用,将领域服务剥离,提供通用能力,避免重复建设和代码;另外服务功能的弹性能力不一样,比如定时任务、数据同步明确的…