• 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
    
    • 1
    • 2
    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
    
    • 1
    • 2
    • 3

    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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    生成

    执行命令nmake

    生成结果测试

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

    安装

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

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

    以上两点应该能大致判断安装成功了,具体是不是缺少哪些文件需要用了才知道,可以看看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
    
    • 1
    • 2
    • 3

    第一条命令执行没有问题,会在本地用户目录下生成一个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:
    
    • 1
    • 2
    • 3
    • 4

    提示无法打开文件,而且文件路径是我电脑上绝对没有的,说明之前的强制写入可能存在问题,具体是什么原因实在不明白
    解决办法:(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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

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

  • 相关阅读:
    高德地图,绘制矢量图形并获取经纬度
    Jmeter中给请求计数
    MindSpore运行模式与PyNative内存调优分析
    (echarts)饼图封装相关总结及使用
    HTTP1.0,HTTP2.0,HTTP3.0
    java计算机毕业设计华水疫情预警与防护用品调度系统源码+mysql数据库+系统+lw文档+部署
    Uniapp自定义动态加载组件(2024.7更新)
    systemd-journald日志管理服务详解
    想学设计模式、想搞架构设计,先学学 UML 系统建模吧
    第十三届蓝桥杯省赛Java A 组 F 题、Python A 组 G 题、Python B 组 G题——全排列的价值 (AC)
  • 原文地址:https://blog.csdn.net/qq_42703175/article/details/133656455