仕事で結構使うことが多いので備忘録とすぐ忘れるので覚えるためのメモ。
いわゆるおれおれってやつです。サーバ証明書はそんなにまよわず大丈夫なんだけどクライアント証明書っていつも、ん、どうやるんだっけ?ってなる。。。
特にWindows用のフォーマットに変換するとき。。。
サーバ証明書作成
秘密鍵作成
まずはここから。鍵長は1024でも大丈夫だけどとりあえず2048で。
1 |
openssl genrsa -out SERVER_CERT.key 2048 |
CSR作成
作成した秘密鍵(SERVER_CERT.key)を使用してCSRを作成します。
1 |
openssl req -sha256 -new -key SERVER_CERT.key -out SERVER_CERT.csr |
証明書発行
作成したCSR(SERVER_CERT.csr)に署名を行いサーバ証明書を発行します。
1 |
openssl x509 -sha256 -req -days 3650 -in SERVER_CERT.csr -signkey SERVER_CERT.key -out SERVER_CERT.crt |
できあがったもの
1 2 3 4 |
ls -l -rw-r--r-- 1 root root 1200 3月 5 00:29 2017 SERVER_CERT.crt -rw-r--r-- 1 root root 1005 3月 5 00:29 2017 SERVER_CERT.csr -rw-r--r-- 1 root root 1675 3月 5 00:28 2017 SERVER_CERT.key |
SERVER_CERT.csrは証明書を発行するためのファイルなので捨ててもよいです。
サーバなどに設置するものは、証明書(SERVER_CERT.crt)と秘密鍵(SERVER_CERT.key)です。
"など"というのは、ロードバランサなどにSSL証明書を設置してSSL接続を終端するようなこともできます。その場合、証明書は1枚用意すればよく、ロードバランサからサーバまでの通信はhttp(sなし)となります。(sありにもできますが。)sなしとすることのメリットとしては、サーバで受けるアクセスがhttpとなるので負荷が減ります。暗号化された通信を複合するためにsslの接続を受けるのは大変なのです。
Apacheを例にあげて設置方法を記載
ちなみにApacheでSSLを利用するためには、「mod_ssl」が必要です。
1 |
yum install mod_ssl |
あとは、ssl.confの以下パラメータを設置パスに置換します。(以下はデフォルト)
1 2 |
SSLCertificateFile /etc/pki/tls/certs/SERVER_CERT.crt SSLCertificateKeyFile /etc/pki/tls/private/SERVER_CERT.key |
秘密鍵のパーミッションはほかのユーザが読めないように400に変更
1 |
chmod 400 SERVER_CERT.key |
CSRについて
CSRとは、Certificate Signing Request の略で証明書発行要求といいます。
認証局に対して行う、認証局の秘密鍵で署名してもらうためのリクエストです。
CSRの中身を確認するためには以下のようにreqコマンドに-textオプションを実行することで確認できる。
1 2 3 4 5 6 7 8 9 10 11 |
openssl req -text -in SERVER_CERT.csr Certificate Request: Data: Version: 0 (0x0) Subject: C=JP, ST=TOKYO, L=KAWASAKI, O=Kaisha, OU=Busho, CN=common.name Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) (省略) Signature Algorithm: sha256WithRSAEncryption (省略) |
Signature Algorithm の項目をみると「sha256WithRSAEncryption」となっている。
これまで使われていたsha-1は解読されるリスクが高まってきているので、これから作成するものは「sha-2」とするのがよいです。「sha-2」といってもsha-224、sha-256、sha-384、sha-512の4つがあって、512が一番安全度は高いですがクライアント側の対応状況などもあるので一概に512がよいとも言えない。例えばガラケーは「sha-2」自体に対応していない機種も多い。最近出ている機種は対応していると思いますが。
Microsoftからはsha-1廃止ポリシーなるものも出ているようです。
なお、「sha-1」の場合のCSRの表示は、以下な感じ。
1 |
Signature Algorithm: sha1WithRSAEncryption |
クライアント証明書作成
秘密鍵作成
まずはここから。鍵長は1024でも大丈夫だけd(ry
1 |
openssl genrsa -out CLIENT_CERT.key 2048 |
CSR作成
作成した秘密鍵(SERVER_CERT.key)を使用してCSRを作成します。
1 |
openssl req -sha256 -new -key CLIENT_CERT.key -out CLIENT_CERT.csr |
証明書発行
作成したCSRに署名を行いクライアント証明書を発行します。
1 |
openssl x509 -sha256 -req -days 3650 -in CLIENT_CERT.csr -signkey CLIENT_CERT.key -out CLIENT_CERT-ca.crt |
pkcs12へ変換
Windows端末にインポートするためにpkcs12形式でexportします。
"CERT_NAME"は単なる識別子のため、なんでも良いしあってもなくてもよいです。
1 |
openssl pkcs12 -export -inkey CLIENT_CERT.key -in CLIENT_CERT-ca.crt -out CLIENT_CERT.p12 -name "CERT_NAME" |
出来上がったもの
1 2 3 4 5 |
ls -l -rw-r--r-- 1 root root 1196 3月 5 00:21 2017 CLIENT_CERT-ca.crt -rw-r--r-- 1 root root 1033 3月 5 00:21 2017 CLIENT_CERT.csr -rw-r--r-- 1 root root 1675 3月 5 00:18 2017 CLIENT_CERT.key -rw-r--r-- 1 root root 2512 3月 5 00:22 2017 CLIENT_CERT.p12 |
CLIENT_CERT.csrは証明書を発行するためのファイルなので捨ててもよいです。
サーバなどに設置するものは、証明書(CLIENT_CERT-ca.crt)と秘密鍵(CLIENT_CERT.key)です。
Windowsクライアントへ配布するものは、pkcs12形式でエクスポートしたCLIENT_CERT.p12です。
Windowsクライアント端末へインポートする方法は、作成された「CLIENT_CERT.p12」をダブルクリックすればインポートウィザードが起動するのでウィザードに沿ってインポートする。
まとめ
とりあえずこれですぐに10年使えるおれおれ証明書がすぐできるヤター
クライアント証明書のインポートとかサーバへの設置手順とかもそのうちまとめようと思います。