openssl报错踩坑

window下配置openssl,已经配置好的网址,好像要收费,只能自己用源代码编译。

编译好的,直接下载使用的网址:
http://slproweb.com/products/Win32OpenSSL.html

自己编译的可以用以下方法:

在下载好的,openssl源码文件目录中中找到文件INSTALL.W32,上面由win32的编译方法
需要下载ActivePerl 的脚本工具

1.下载安装脚本工具ActivePerl
https://www.activestate.com/products/downloads/

2.打开VS2015本机工具命令符,打开D:\Microsoft Visual Studio 14.0\VC\bin目录

3.Perl Configure VC-WIN32 no-asm --prefix=D:\openssl\openssl-1.0.2k\openssl-1.0.2k

4.ms\do_ms报错

出现这种错误,一般是以前编译过的openssl没有卸载干净;用以下命令,清除掉残留的openssl程序,就可以了。
nmake -f ms\nt.mak clean

粘贴以下我从其他地方找来的测试,清除openssl静动态库的命令:

测试动态库:
nmake -f ms\ntdll.mak test
测试静态库:
nmake -f ms\nt.mak test

安装动态库:
nmake -f ms\ntdll.mak install
安装静态库:
nmake -f ms\nt.mak install

清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean

清除后,重复上述的步骤就可以了。以下是成功的截图

5.nmake -f ms\nt.mak

编译成功!

6.最后测试一下,看是否成功

测试成功

查看了一眼openssl-1.0.2k\out32dll中的文件

至此,编译成功。openssl的自编译过程较为复杂,容易出错的地方很多,记录一下。希望对一些朋友能由启发。

<think>嗯,用户现在问的是如何调试OpenSSL报错。之前他们问过SSL返回-203的错误,现在可能遇到了更广泛的OpenSSL问题,需要调试方法。首先,我需要确定用户的使用场景。可能是开发者在开发过程中遇到了SSL/TLS连接的问题,比如证书验证失败、握手错误,或者加密解密的问题。用户的身份可能是一个开发人员或者系统管理员,需要处理与OpenSSL相关的配置或代码问题。 用户的需求是了解如何调试OpenSSL报错,但可能更深入的是想系统地掌握排查错误的方法,而不仅仅是解决特定错误。他们可能遇到了某个具体的错误信息,但希望有通用的调试流程,以便以后能自行处理类似的问题。此外,用户可能不太清楚OpenSSL提供的各种工具和选项,比如s_client、x509命令,或者如何启用详细日志。 接下来,我需要整理常见的OpenSSL调试步骤。首先是使用verbose选项,比如在s_client中使用 -debug 或 -msg 来获取详细输出。然后是检查错误代码,比如通过OpenSSL的错误队列,使用ERR_print_errors_fp来打印错误信息。证书验证是关键部分,用户可能需要检查证书链、过期时间、域名匹配等。此外,协议和加密套件的兼容性也是常见问题,可能需要测试服务端支持的协议版本。 用户可能还会遇到私钥和证书不匹配的情况,所以需要提醒他们使用检查命令。内存泄漏或配置问题也可能导致报错,特别是在使用OpenSSL库编程时。高级调试方法如Wireshark抓包或构建调试版本的OpenSSL可能对更复杂的问题有帮助。最后,提供常见错误代码的示例能帮助用户快速定位问题。 需要确保回答结构清晰,分步骤说明,并提供具体的命令示例,这样用户可以直接复制使用。同时,强调安全注意事项,比如不要在生产环境关闭验证,只在调试时使用。可能用户之前遇到的-203错误就是证书问题,所以这部分需要详细展开,但也要覆盖其他可能性,确保全面性。最后,提醒用户查阅官方文档和社区资源,以便进一步解决问题。</think>以下是如何调试OpenSSL报错的系统性方法,包含关键工具使用、日志分析和实战技巧: --- ### **一、基础调试流程** #### 1. **启用Verbose模式** ```bash # 强制显示完整握手过程 openssl s_client -connect example.com:443 -state -debug -msg # 关键参数解析: # -state : 显示SSL状态机变化 # -debug : 打印二进制数据细节 # -msg : 显示协议层消息边界 # -tlsextdebug : 显示TLS扩展信息 ``` #### 2. **错误代码翻译** ```bash # 将OpenSSL错误代码转换为文字描述 openssl errstr 2306A086 # 输出示例:error:2306A086:SSL routines:SSL3_SEND_CLIENT_CERTIFICATE:certificate not found ``` --- ### **二、核心调试场景** #### 1. **证书验证问题** ```bash # 强制校验证书链(模拟浏览器行为) openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/ca-certificates.crt -verify_return_error # 常见验证失败原因: # - 返回证书链缺少中间CA证书 # - 证书签名算法弱(如SHA-1) # - 证书扩展项缺失(如缺少subjectAltName) ``` #### 2. **协议兼容性测试** ```bash # 指定特定TLS版本测试 openssl s_client -connect example.com:443 -tls1_2 openssl s_client -connect example.com:443 -tls1_3 # 强制禁用SNI(测试老旧服务器) openssl s_client -connect example.com:443 -noservername ``` #### 3. **密码套件检查** ```bash # 查看服务端支持的加密套件 openssl ciphers -v &#39;ALL:COMPLEMENTOFALL&#39; | while read line; do openssl s_client -cipher "${line%% *}" -connect example.com:443 < /dev/null 2>&1 | grep -E &#39;Cipher |success&#39; done ``` --- ### **三、高级调试技巧** #### 1. **内存泄漏检测(开发环境)** ```bash # 使用Valgrind检测内存问题 valgrind --leak-check=full --track-origins=yes ./your_openssl_program ``` #### 2. **堆栈跟踪捕获** ```bash # 生成core dump文件 ulimit -c unlimited gdb /path/to/openssl_binary core # 在GDB中获取堆栈 (gdb) bt full ``` #### 3. **自定义日志输出** ```c // 编程时启用OpenSSL内部日志 SSL_CTX_set_info_callback(ctx, [](const SSL *ssl, int where, int ret) { if (where & SSL_CB_ALERT) { printf("ALERT: %s\n", SSL_alert_desc_string(ret)); } }); ``` --- ### **四、典型错误处理** #### 1. **"decryption failed or bad record mac"** - 可能原因: - 客户端与服务端的TLS版本不匹配 - 加密套件协商失败 - 网络中间件篡改数据包 #### 2. **"certificate verify failed"** ```bash # 分步验证证书链 openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt ``` #### 3. **"sslv3 alert handshake failure"** - 排查步骤: 1. 检查服务端是否禁用SSLv3:`openssl s_client -connect example.com:443 -ssl3` 2. 验证椭圆曲线支持:`openssl ecparam -list_curves` --- ### **五、调试工具推荐** | 工具名称 | 用途 | 示例命令 | |----------------|-----------------------------|----------------------------| | **testssl.sh** | 自动化协议/套件检测 | `./testssl.sh example.com` | | **Wireshark** | 抓包分析TLS握手 | 过滤器:`tls.handshake` | | **sslyze** | 批量扫描服务器配置 | `sslyze --regular example.com` | --- ### **六、安全注意事项** 1. 调试时临时关闭验证(仅限测试环境): ```bash openssl s_client -connect example.com:443 -no_ssl3 -no_tls1 -no_tls1_1 -bugs -ign_eof ``` 2. 生产环境必须保持以下验证: ```bash -verify_return_error -CApath /etc/ssl/certs ``` --- **调试流程建议**: ① 先用`openssl s_client`获取原始错误 → ② 用`openssl verify`检查证书链 → ③ 用Wireshark确认网络层行为 → ④ 对比客户端/服务端支持的协议列表 → ⑤ 检查系统时间/NTP同步状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值