首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动CRL文件转换器

自动CRL文件转换器
EN

Code Review用户
提问于 2019-09-16 16:06:28
回答 2查看 130关注 0票数 4

在我的工作中,我们使用内部CA,它运行在Windows服务器上。当我想在Linux机器上使用它的CRL时,我必须执行以下步骤:

  1. 下载根CA和中间CA
  2. 把他们转移到x509
  3. 合并成一个文件(CRL.pem)

为此,我编写了下面的小脚本,每天由计时器单元(在没有cron的系统上自动运行)运行一次。

代码语言:javascript
复制
#!/usr/bin/env bash

crls=(RootCA IntermediateCA IntermediateCA2)
new_crl="newcrl.pem"
crl_temp=$(mktemp -q -d /tmp/pullcrl.XXXXX)
crl_dir="/etc/pki/tls/misc"


for crl in ${crls[@]}; do
  if curl -s http://url_of_crls/${crl}.crl -o ${crl_temp}/${crl}.crl; then
    openssl crl -in ${crl_temp}/${crl}.crl -inform DER -out ${crl_temp}/${crl}.pem
  else
    echo "Download a crl file failed!"
    exit 1
  fi
done

cat ${crl_temp}/*.pem > ${crl_temp}/${new_crl}

mv ${crl_temp}/${new_crl} ${crl_dir}/${new_crl}

我能做点更好的事吗?

EN

回答 2

Code Review用户

发布于 2019-09-16 16:45:53

${crls}中的crl;

总是引用数组扩展是一个好习惯。

在成功运行之后清理临时目录将是一个很好的操作(或者完全取消它;请参见下面)。

cat ${crl_temp}/*.pem > ${crl_temp}/${new_crl} mv ${crl_temp}/${new_crl} ${crl_dir}/${new_crl}

我猜你这么做是为了得到原子替换?只有当/tmp和/etc在同一个文件系统上时,它才能工作。如果它们不是,则可以在(例如)目标已满时获得一个空的目标文件。考虑在/etc下创建一个工作目录是确定的。

使用cd和brace展开以及bash自己的错误处理(通过set -euxo pipefail)可以更简洁:

代码语言:javascript
复制
set -euxo pipefail

cd /etc/pki/tls/misc
temp=$( mktemp -p . )

for url in http://…blahblah…/{RootCA,IntermediateCA,IntermediateCA2}.crl ; do 
    curl $url | openssl crl -in - -inform DER
done > $temp
mv $temp newcrl.pem
票数 6
EN

Code Review用户

发布于 2019-09-18 14:04:45

我将前面的代码与@哦,我的天提供的提示合并。

  • 我排除了变量clr_dir。代码的可读性要高得多。
  • 我将temp移到了与新CRL的最终目的地相同的文件系统中。
代码语言:javascript
复制
#!/usr/bin/env bash

set -euo pipefail
cd /etc/pki/tls/misc

crls=(RootCA IntermediateCA IntermediateCA2)
crl_temp=$(mktemp -p .)


for crl in "${crls[@]}"; do
  curl -s http://url_of_crls/crl/"${crl}".crl -o "${crl}".crl
  openssl crl -in "${crl}".crl -inform DER
  rm -rf "${crl}".crl
done > "$crl_temp"

mv "$crl_temp" CRL.pem

由于curl版本7.29.0在系统上引起的问题,我省略了curl的管道。(它在7.58.0版上运行良好。)

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/229122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档