如何解析加密的 .csr 文件并将信息复制到 txt 文件中的特定位置

how to parse an encrypted .csr file and copy the information to specific position in txt file

我想解析 .csr 文件以检索通用名称 (CN) 值。

我有一个具有以下结构的 csr 文件:

verify OK
Certificate Request:
Data:
   Version: 0(0x0)
   Subject: C=XX, ST=SSSSSSS, L=SSSSSS, O=CORPORATION X.X, OUT=XX, CN=IAM.YOUARE.COM
   .....

我想检索 CN 值(在上面的示例中 "IAM.YOUARE.COM")

获得此值后,我想将其插入到 DNS.X 字段旁边的 .txt 文件中(请注意,尊重等号之间的白色 space 很重要运算符和插入的值)。 .txt字段结构如下图:

[xxxxx]
basicConstraints = CA:FALSE^M
extendedkeyUsage = serverAuth
subjectAltNAme = @alt_names

[alt_name]
DNS.X = IAM.YOUARE.COM

到目前为止,我一直在使用命令 "openssl req -text - noout -verify -in XXX.csr" 访问 csr 文件并手动复制 CN 值。但是,我现在有一个巨大的 .csr 文件列表 "parse",我想知道您是否可以给我一些关于如何自动执行此过程的指示。

假设使用 php 是一种选择(虽然很明显可以使用 php 来创建网站,但可能鲜为人知 php 脚本也可以 运行 来自命令行,类似于 shell 脚本,但带有 .

// Load and decode the csr file
$csrfiledata=file_get_contents("/path/to/file.csr");
$csr = openssl_csr_get_subject($csrfiledata);
// openssl_csr_get_subject('file://path/to/file.csr') also works
// if the file was read properly, $csr['CN'] will contain the value of CN

然后,假设您创建了一个名为 template.txt 的模板,其中包含

[alt_name]
DNS.X = $$CN$$

其中 $$CN$$ 是随机选择的 CN 值占位符。现在很容易替换从 csr 文件读取的值并将结果写入文件:

$path_to_infile = 'template.txt';
$path_to_outfile = 'outfile.txt';
$file_contents = file_get_contents($path_to_infile);
$file_contents = str_replace('$$CN$$',$csr['CN'],$file_contents);
file_put_contents($path_to_outfile,$file_contents);

解释了如何使用 php 遍历文件 here