openssl3.2 - exp - PEM <==> DER

文章目录

openssl3.2 - exp - PEM <==> DER

概述

想将客户端私钥 + 服务端公钥 数据转成 C数组, 放到客户端工程中.

用openssl默认生成好的证书, 公钥, 私钥等数据, 都是PEM格式的.

PEM格式的数据有明显的标记, 可以看到PEM数据的用途.

如果有人逆向客户端程序, 很容易看到线索.

就想着, 将PEM格式文件转为DER格式文件, 然后将DER格式文件转成数组, 再放入客户端程序来用, 这样好一些.

查资料时, 看到大部分例子都是拿证书(x509)做的例子.

看了openssl帮助, 不同的openssl对象(证书, 纯公钥, 纯私钥, DH参数...), 进行PEM和DER互转时, 用的openssl命令都是不同的.

针对不同的openssl对象, 先选好对应的对象命令, 然后才能正确的互转.

笔记

加密用的私钥(带口令保护) - PEM => DER

私钥都是有密码的, 转换时要给出密码.

密码有不同格式:

:pass - 文本密码

:env - 在环境变量中的密码

:stdin - 需要密码时, 现输入密码.

:file - 在文件中的密码

openssl pkey -in my_enc_priv_key.pem -passin pass:my_priv_key_pwd -out app_key.der -outform DER

可以看出, 如果要自动运行转换, 用哪种密码输入方式都不太安全.

最好还是不带 -passin 参数, 这样需要密码时, openssl.exe自己弹出提示需要密码, 然后自己就在命令行自己输入密码好了, 这样安全一些. 不过麻烦啊.

加密用的私钥(不带口令保护) - DER => PEM

openssl pkey -in app_key.der -out app_key3.pem -outform PEM

感觉咋原来PEM带口令保护的, 转成DER之后, 口令被搞没了...

又验证了一次, 果真, 从带口令保护的PEM(加密的私钥)转成DER后, 口令被搞没了.

如果想要导出后的DER/PEM带口令, 需要加选项 -passout

将不带口令的PEM转成带口令的PEM

openssl pkey -in app_key3.pem -out app_key5_pwd.pem -outform PEM -passout pass:111111 -aes-256-cbc

支持口令的算法

算法不能有 EVP_CIPH_FLAG_AEAD_CIPHER 标记, 模式不能是 EVP_CIPH_XTS_MODE

有以上2点的算法不能用在命令行程序的参数输入上.

通过openssl实现中的opt_cipher(), 可以看到以上2点的判断.

如果想知道哪种算法支持命令行口令, 就需要将全部算法都列出来, 然后过滤掉有上面2点的算法, 剩下的算法就都是可以用在命令行上的.

另外开一篇笔记, 先这样.

对于支持口令加密的算法列表, 已经写程序+手工验证, 一共126种算法可用(openssl3.2 - exp - 可以在命令行使用的口令算法名称列表).

备注

经过实验, 可以看出

转换就是转换, 带口令就是带口令, 相互之间没关联.

如果要操作的PEM/DER是带口令保护的, 就需要给出口令选项 -passin pass:xxx, 来完成口令验证.

如果要转换后的PEM/DER带口令保护, 就需要给出口令选项 -passout pass:xxx -cipher, 其中cipher需要是openssl支持的算法名称.

PEM/DER之间的转换分为4种, PEM=>DER; DER=>PEM; PEM=> PEM, DER=>DER. 可以加选项是否带口令保护.

如果想让程序只能打开自己的带口令保护的PEM/DER, 可以将程序校验和(e.g. 加沙后的PE校验的SHA512 )相关内容作为口令, 这样就能做到一个程序只能用自己的唯一证书(程序先写好, 然后给程序发带口令保护的证书, 然后程序正常工作.).

如果逆向的人将程序改了, 证书就不能打开成功, 后续操作(非对称/对称解密)就会失败. 间接的保护了程序被非授权用户使用.

END

相关推荐
鹏大师运维2 天前
统信 UOS OpenSSL 漏洞如何修复?外网 / 内网两种方式一次讲清
linux·运维·openssl·国产操作系统·统信uos·麒麟桌面操作系统·补丁修复
小麻侬2 天前
CMake gui构建libcurl,MTD/MT,支持openssl
openssl·libcurl·cmake gui
前进的程序员3 天前
OpenSSL加解密原理及使用方法详解
ssl·加解密·openssl
y1233447788998 天前
国密算法SM2实现(Openssl)
开发语言·openssl·国密
EniacCheng11 天前
【OpenSSL】- Ubuntu22.04手动编译安装openssl
openssl
REDcker14 天前
OpenSSL 完整文档
c++·安全·github·c·openssl·后端开发
特立独行的猫a1 个月前
[鸿蒙PC命令行程序移植实战]:交叉编译移植最新openSSL 4.0.0到鸿蒙PC
华为·harmonyos·移植·openssl·交叉编译·鸿蒙pc
十五年专注C++开发1 个月前
CMake进阶:vcpkg中OpenSSLConfig.cmake详解
c++·windows·cmake·openssl·跨平台编译
一个平凡而乐于分享的小比特1 个月前
OpenSSL 全面解析:从入门到精通
密码学·openssl·隐私安全
mooyuan天天1 个月前
万字详解心脏滴血漏洞复现:原理详解+环境搭建+渗透实践(CVE-2014-0160)
openssl·心脏滴血漏洞·cve-2014-0160