aoishiの備忘録

備忘録

自己証明書を簡単に作成する方法

環境

OpenSSLのパッケージが用意した?スクリプト

RPMなどのパッケージでopensslを導入した環境では、下記のスクリプトが配置されている。

$ ls -al /etc/pki/tls/certs/make-dummy-cert
-rwxr-xr-x. 1 root root 610  8月  4  2017 /etc/pki/tls/certs/make-dummy-cert

$ rpm -qf /etc/pki/tls/certs/make-dummy-cert
openssl-1.0.2k-8.el7.x86_64

$ cat /etc/pki/tls/certs/make-dummy-cert
#!/bin/sh
umask 077

answers() {
        echo --
        echo SomeState
        echo SomeCity
        echo SomeOrganization
        echo SomeOrganizationalUnit
        echo localhost.localdomain
        echo root@localhost.localdomain
}

if [ $# -eq 0 ] ; then
        echo $"Usage: `basename $0` filename [...]"
        exit 0
fi

for target in $@ ; do
        PEM1=`/bin/mktemp /tmp/openssl.XXXXXX`
        PEM2=`/bin/mktemp /tmp/openssl.XXXXXX`
        trap "rm -f $PEM1 $PEM2" SIGINT
        answers | /usr/bin/openssl req -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 2> /dev/null
        cat $PEM1 >  ${target}
        echo ""   >> ${target}
        cat $PEM2 >> ${target}
        rm -f $PEM1 $PEM2
done

このスクリプトを使うことで、下記のように秘密鍵と証明書がセットになったファイルを簡単に作成できる。

-----BEGIN PRIVATE KEY-----
省略
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
省略
-----END CERTIFICATE-----

使い方

下記のように、作成するファイル名を引数で与えれば一度に複数のファイルが作成できる。

$ /etc/pki/tls/certs/make-dummy-cert /tmp/test_cert_{1,2,3,4,5,6,7,8,9}.crt

$ ls -al /tmp/test_cert_*
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_1.crt
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_2.crt
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_3.crt
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_4.crt
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_5.crt
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_6.crt
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_7.crt
-rw-------. 1 aoishi aoishi 3258  4月  5 15:57 /tmp/test_cert_8.crt
-rw-------. 1 aoishi aoishi 3254  4月  5 15:57 /tmp/test_cert_9.crt

秘密鍵と証明書は下記の要領で分離する。

x) 秘密鍵
$ sed -n -e "/-----BEGIN PRIVATE KEY-----/,/-----END PRIVATE KEY-----/p" /tmp/test_cert_1.crt

x) 証明書
$ sed -n -e "/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p" /tmp/test_cert_1.crt