【发布时间】:2013-12-03 13:33:20
【问题描述】:
我正在尝试关注 this reply 并使用 hexdump、xxd 和 sed 更改文件中的一些十六进制字节。
根据该响应,在将使用 keytool 生成的 CSR(恰好是 base-64 PEM 格式)转换为 DER 后,我应该能够进行直接字节替换,将 0x13 替换为 0x0c。
这是我尝试过的:
#convert csr pem to der
openssl req -in openfire.csr -outform der -out openfire_csr.der
cat openfire_csr.der | grep -aP '\x13' | md5sum
#e61387f5c1xxxxeb832df102524220d81 - #it has some length
#perform replacement of hex bytes:
sed 's/\x13/\x0c/g' openfire_csr.der
#convert csr der to csr pem:
openssl req -in openfire_csr.der -outform pem -out openfire_utf8.csr
#unable to load X509 request
#3078055660:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:698:Expecting: CERTIFICATE REQUEST
我怀疑我错过了一些转换,但我不知道在哪里。
如何使用可用工具(如sed、xxd 和/或hexdump)执行字节替换?
【问题讨论】:
-
我想我刚刚意识到在全球范围内替换证书中的十六进制字节是多么疯狂。它将影响整个证书,并且输出文件将始终是无效证书。正如上面链接的回复中所解释的,我认为只有在检索字节偏移量并执行直接替换仅在那些字节偏移量!时才能进行转换
-
您收到的错误是因为您发送的是 DER 格式的 CSR。要么转换回 PEM,要么添加参数
-inform DER。话虽如此,我同意您的评论,即全局替换证书中的字节值可能不是一个好主意。事实上,我不确定它是否会起作用。 CSR 已签名,如果您更改签名内容,CSR 签名将无法验证。 -
谢谢 gtrig。我只使用
-policy policy_anything比破解位以符合 CSR 不需要符合的东西要好得多。太糟糕了,Oracle 没有更新keytool以导出字段UTF8STRING,因为PRINTABLESTRINGS是老派且已贬值。 -
你不妨考虑this answer和提问。
标签: java openssl ssl-certificate certificate-authority