参考: openssl中文手册
Github: https://github.com/openssl/openssl
官网: https://www.openssl.org/source/
先查看README.md文档,根据描述找到自己对应平台的NOTES-*.md文档和INSTALL.md文档
从INSTALL.md和NOTES-WINDOWS.md中得知需要做如下准备
官方用的是nmake,其他的或许也可以
VS2022中自带
在开发平台中打开命令行输入nmake /?
执行,如果有输出,说明已经安装
需要另外安装
VS2022中已安装
VS2022支持
Windows10支持
需要另外安装
官方针对VC-*环境推荐Strawberry Perl
地址:http://strawberryperl.com
要求版本在5.10.0以上,直接下最新版
安装完成后,打开命令行输入perl --version,有版本信息输出代表安装成功
按照文档描述,需要安装Text::Template和Test::More两个模块
注:需要以管理员身份执行命令
cpan -i Text::Template
cpan -i Test::More
- 下载
地址:https://www.nasm.us,下载最新稳定版- 安装
可以直接下载可执行文件压缩包,解压后需要自己添加环境变量
或者下载installer安装包快捷安装,自动添加环境变量- 测试
- 安装完成后,在命令行输入
nasm --version
执行,有版本信息输出则说明安装成功
用管理员模式打开VS2022,打开下载的OpenSSL根目录,打开开发者命令提示窗口
执行命令perl Configure
,程序会自动判断当前系统和处理器架构
也可自己指定
perl Configure VC-WIN32
perl Configure VC-WIN64A
perl Configure VC-WIN64-ARM
在执行命令之前,需要配置临时环境变量
- 根据自己的系统环境情况,找到VS安装目录下的vcvars32.bat或vcvars64.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
openssl
,出现类似执行python的效果PS C:\WINDOWS\system32> openssl
OpenSSL>
以上两点应该能大致判断安装成功了,具体是不是缺少哪些文件需要用了才知道,可以看看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之外的其他命令行窗口中运行这些命令