オレオレ証明書発行


やりたいこと

  • 自宅用WEBサービスをアクセス制限(クライアント証明書による認証)したい。
  • 今更ですが・・・

やりたいこと(詳細)

  • オレオレ認証局から、WEBサーバ証明書/クライアント証明書を発行します。
  • 証明書の発行は、Ansibleを使用します(コマンドを叩きたくない)

制限事項

  • apacheの設定は当記事対象外とします。
  • 失効処理とCRL発行処理は手動(easy-rsaコマンド)とします。

環境/ツール

手順

手順1.easy-rsaのインストール

  • EPELにeasy-rsaがあるので、YUMインストール
# yum install epel-release
# yum install easy-rsa
  • 認証局用専用ユーザの作成(certadmin)
# useradd certadmin
  • easy-rsa用フォルダの作成、必要ファイルのリンク作成
# su - certadmin
$ mkdir easy-rsa
$ chmod 700 easy-rsa
$ ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/

手順2.easy-rsaでオレオレ認証局構築

  • 認証局の初期化(情報を格納するdirectory(pki/)を作成(初期化)します。
$ cd easy-rsa
$ ./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/certadmin/easy-rsa/pki
  • 認証局のを作成(パスワードなし、CN=MyHomeCA)します。
$ ./easyrsa build-ca nopass
Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating RSA private key, 2048 bit long modulus (2 primes)
....................+++++
.................+++++
e is 65537 (0x010001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:MyHomeCA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/certadmin/easy-rsa/pki/ca.crt

$ 
  • 空のCRLのファイルを生成(Apacheでクライアント認証時、CRL証明書情報が必要であるため作成)
$ ./easyrsa gen-crl
Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Using configuration from /home/certadmin/easy-rsa/pki/easy-rsa-27657.yrhss7/tmp.dB4v6v

An updated CRL has been created.
CRL file: /home/certadmin/easy-rsa/pki/crl.pem


$ 

手順3.認証局の証明書内容確認

$ ls -l pki/ca.crt       ....CA公開鍵
-rw------- 1 certadmin certadmin 1192  5月 21 17:43 pki/ca.crt
$ ls -l pki/private/ca.key    ....CA秘密鍵
-rw------- 1 certadmin certadmin 1679  5月 21 17:43 pki/private/ca.key
$ ls -l pki/crl.pem        ....CRL情報
-rw------- 1 certadmin certadmin 642  5月 21 17:47 pki/crl.pem

$ openssl x509 -in pki/ca.crt -noout -subject -issuer -dates
subject=CN = MyHomeCA              ....CA公開鍵の情報確認(CNと期間は10年間で生成されていることを確認)
issuer=CN = MyHomeCA
notBefore=May 21 08:43:42 2020 GMT
notAfter=May 19 08:43:42 2030 GMT
[certadmin@myhome easy-rsa]$ 

手順4.githubからAnsible-playbook取得

git clone https://github.com/mishikawan/generatecert-ansible.git

手順4-1.サーバ証明書の発行内容を変更

  • 発行したいサーバ証明書情報を記載
  • 以下のようなサーバ証明書を作成したい場合は、server-certs.csvに以下を記述します
  • CSVの一行目はカラム情報のため変更はしないでください。
name country state locality organization organizational_unit
myhome.local JP Osaka Osaka MyHome MyHome
server-certs.csv
name,country,state,locality,organization,organizational_unit
myhome.local,JP,Osaka,Osaka,MyHome,MyHome

手順4-2.クライアント証明書の発行内容を変更

  • 発行したいクライアント証明書情報を記載
  • 以下のようなクライアント証明書を作成したい場合は、client-certs.csvに以下を記述します
  • CSVの一行目はカラム情報のため変更はしないでください。
name メール パスワード organizational_unit
user001 [email protected] pass001 Development
user002 [email protected] pass002 Production
user003 [email protected] pass003 Sales
client-certs.csv
name,mailaddr,pass,organizational_unit
user001,[email protected],pass001,Development
user002,[email protected],pass002,Production
user003,[email protected],pass003,Sales

手順5.証明書の発行(ansible)の実行

ansible-playbook generate_certs.yml

手順6.証明書発効の確認

  • ansible(generate_certs.yml)のvarsに従いファイルが作成されます。
generate_certs.yml
  vars:
    ca_private: "~/easy-rsa/pki/private/ca.key"
    ca_public: "~/easy-rsa/pki/ca.crt"
    publicdir: "~/easy-rsa/pki/issued"
    csrdir: "~/easy-rsa/pki/reqs"
    privatedir: "~/easy-rsa/pki/private"
    pkcs12dir: "~/easy-rsa/pki/private"
    server_csv: "server-certs.csv"
    client_csv: "client-certs.csv"
  • CSRファイル
$ ls -l ~/easy-rsa/pki/reqs/
-rw-rw-r-- 1 certadmin certadmin 1119  6月 26 22:31 myhome.local.csr
-rw-rw-r-- 1 certadmin certadmin 1013  6月 26 22:32 user001.csr
-rw-rw-r-- 1 certadmin certadmin 1013  6月 26 22:32 user002.csr
-rw-rw-r-- 1 certadmin certadmin 1005  6月 26 22:32 user003.csr
  • 秘密鍵とPKCS12ファイル
$ ls -l ~/easy-rsa/pki/private/
-rw------- 1 certadmin certadmin 1675  5月 21 09:52 ca.key
-rw------- 1 certadmin certadmin 1679  6月 26 22:31 myhome.local.key
-rw------- 1 certadmin certadmin 1679  6月 26 22:32 user001.key
-r-------- 1 certadmin certadmin 3376  6月 26 22:32 user001.p12
-rw------- 1 certadmin certadmin 1675  6月 26 22:32 user002.key
-r-------- 1 certadmin certadmin 3376  6月 26 22:32 user002.p12
-rw------- 1 certadmin certadmin 1675  6月 26 22:32 user003.key
-r-------- 1 certadmin certadmin 3376  6月 26 22:35 user003.p12
  • 公開鍵ファイル
$ ls -l ~/easy-rsa/pki/issued/
-rw-rw-r-- 1 certadmin certadmin 1298  6月 26 22:31 myhome.local.crt
-rw-rw-r-- 1 certadmin certadmin 1188  6月 26 22:32 user001.crt
-rw-rw-r-- 1 certadmin certadmin 1188  6月 26 22:32 user002.crt
-rw-rw-r-- 1 certadmin certadmin 1180  6月 26 22:35 user003.crt