学校の授業の備忘録シリーズ
参考になるかわからないため鵜吞みにしないこと
手っ取り早く証明書作成の内容が見たければ2にどうぞ
この内容はCentOS7用なのでCentOS6で行うとSHA-1の問題が発生する。(SHA-2で作成すれば行けると思われる)
#1. CA by openssl(座学)
##1-1. opensslの基本
###・opensslとは
暗号機能を一手に引き受けるライブラリ。
この機能をインストールすれば下記の能力を手に入れることができる。
- ca
- sslサーバ
- sslクライアント
- 暗号
- ハッシュ
- 電子証明書
オープンソースであり、ほとんどのUnix,Windowsなどに対応している。
その他のプラットフォームでも移植されて稼働している。
###・FIPS 140-2承認済み
暗号モジュールに関するセキュリティ要件の使用を規定する米国連邦標準規格
##1-2. Linuxの場合
最小インストールでもインストールされる
opensslで暗号してみる
openssl コマンド オプション パラメータ
openssl speed rsa des
openssl genrsa -out key.pem 1024
##1-3. opensslで暗号してみる
###ファイルを作成
vi plain.txt
###AESで暗号
openssl aes-256-cbc -e -in plain.txt -out enc.bin
##1-4. 復号ファイルの確認
cat dec.txt
####Option
- e 暗号
- d 復号
- in 入力
- out 出力
##1-5. RSA公開鍵で暗号してみる
鍵ペアを作る
公開鍵の書き出し
暗号
確認
復号
準備:空のディレクトリを作る
###1-5-1. 鍵ペアを作る
openssl genrsa -out key.pem 1024
genrsa RSA公開鍵の発生(Generation)
-out 鍵ペアを書き出すコマンド
1024 鍵長
-des 秘密鍵の暗号化(今回は使用していない)
###1-5-2. 公開鍵の書き出し
openssl rsa -in key.pem -pubout -out public.pem
###1-5-3. rsa関連コマンド
####・暗号
openssl rsautl -pubin -encrypt -inkey public.pem -in plain.txt -out enc.bin
####・binaryを開く
hexdump enc.bin -C
####・復号
openssl rsautl -decrypt -inkey key.pem -in enc.bin -out ttt.txt
cat ttt.txt
#2. OpenSSLでオレオレ証明書を作る(実習)
##2-0. CA構築順序
- CA鍵ペア作成
- CA証明書作成
- index.txtの作成
- シリアル番号の設定
####・openssl設定ファイル場所
/etc/pki/tls/openssl.cnf
→confではないことに注意
/etc/pki/CA
CA関連ファイルが格納される
##2-1. root CAの作成
###ここで行うこと
- 2-1-1. 鍵ペアの作成(秘密鍵の生成)
- 2-1-1. CSR(公開鍵+証明書署名要求)の作成
- 2-1-2. 自己署名証明書の生成
鍵ペアの作成
####・秘密鍵生成
cd /etc/pki/CA/private/
openssl genrsa -out cakey.pem 2048
genrsa RSAキーペアの発生
aes128 秘密鍵保護用暗号の指定
out ファイル 秘密鍵書き出しファイル
####・CSR(証明書署名要求:Certificate Signing Request)を作成する
CSRとは, 申請書 のようなもの
証明書署名要求は認証曲に対してサーバ管理者が自分の公開鍵に電子署名(すなわち認証曲の秘密鍵で署名)してもらうように依頼するメッセージである。
秘密鍵から公開鍵を生成する必要があるが、opensslのreqコマンドで秘密鍵を指定することで公開鍵を取り出してくれるので、明示的にファイルとして作る必要はない。
#####注意
証明書署名要求に自己署名する前に、発行した証明書の履歴を格納する index.txt ファイルと、次に発行する証明書のシリアル番号を格納する serial ファイルを作成しておきます。これらのファイルを正しく作成しておかないと、証明書に署名しようとした時にエラーが発生します。
cd /etc/pki/CA/private
openssl req -new -key cakey.pem -out ca.csr
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:TOKYO(ExampleState)
Locality Name (eg, city) [Default City]:SHINJUKU(ExampleLocality)
Organization Name (eg, company) [Default Company Ltd]:GOOGLE(ExampleOrganization)
Organizational Unit Name (eg, section) []:省略可(ExampleOrganizationalUnit)
Common Name (eg, your name or your server's hostname) []:SAMPLE CA(認証局の名前)
Email Address []:省略可
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:省略可
An optional company name []:省略可
Common Name(以下CN)までのものはサーバーのCSR作成で使うので
記述した内容はしっかり覚えておく。
###2-1-2. 自己署名証明書の作成
cd /etc/pki/CA
touch index.txt
上記のコマンドを打ってから下記のコマンドで証明書を作成
openssl ca -create_serial -out ca.crt -days 365 -batch -keyfile cakey.pem -selfsign -extensions v3_ca -infiles ca.csr
###2-2. crtファイル(CAを証明したファイル)の移動
・CAの証明書をopenssl.cnfに設定されたCAの証明書ファイル名に一致させる
cd /etc/pki/CA/private
mv ca.crt ../cacert.pem
・CAの鍵をopenssl.cnfに設定されたCAの鍵ファイル名に一致させる
→privateの鍵名は同じcakey.pemのはず
cd /etc/pki/CA
touch index.txt(ない場合に行う)
vi serial (ない場合に行う)
###2-3. openssl 設定変更
/etc/pki/tls/openssl.cnfのバックアップ
openssl.cnfの修正
[usr_cert]セクションの下記を変更・確認する
basicCnstraints = CA:FALSE
ncCertType = server
##2-4. サーバの証明書作成手順
###ここで行うこと
- 2-4-1. 鍵ペアの作成(秘密鍵の生成)
- 2-4-1. CSR(公開鍵+証明書署名要求)の作成
- 2-4-2. サーバ証明書の生成
###2-4-1. 鍵ペアの作成
####・秘密鍵作成
openssl genrsa -out server.key 4096
####・CSRの作成
openssl req -key server.key -out server.csr -new
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:TOKYO(ExampleState)
Locality Name (eg, city) [Default City]:SHINJUKU(ExampleLocality)
Organization Name (eg, company) [Default Company Ltd]:GOOGLE(ExampleOrganization)
Organizational Unit Name (eg, section) []:省略可(ExampleOrganizationalUnit)
Common Name (eg, your name or your server's hostname) []:www.sample.com(サーバー名orドメイン名)
Email Address []:省略可
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:省略可
An optional company name []:省略可
CN以外は上で記述した内容と同じ名前に設定する。
ここでのCNはサーバ名やドメインを記述する
###2-4-2. 証明書の作成
openssl ca -infiles server.csr
/CA/newcerts直下にpemファイルで証明書が生成される
生成された証明書ファイルは後にcpでssl.confの中に記述されている場所にコピーする(後述)
database error が失敗する場合
index.txtを作成しなおすといけるとのこと
http://www.goofoo.jp/2012/06/2026
###2-6. firewallの設定
####iptablesの変更
vim /etc/sysconfig/iptables
80
443
###2-7. mod_sslのインストール
yum install httpd
yum install mod_ssl
yum install lynx
もちろんローカルのディスクからインストールしてもよい
mkdir /media/cdrom
mount /dev/sr0 /media/cdrom
yum --disablerepo=\* --enablerepo=c6-media install httpd
yum --disablerepo=\* --enablerepo=c6-media install mod_ssl
yum --disablerepo=\* --enablerepo=c6-media install lynx
###2-8. ssl.conf設定
vim /etc/httpd/conf.d/ssl.confを確認・編集
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
###2-9. httpdを再起動
###2-10. ホスト側に証明書ファイルを保存
cat cacert.pem | less 等で
-----Bigin certificate-----
-----End certificate-----部分をコピーしてcacert.crt(名前はなんでも可)として保存。インストール
or
①SCPコマンドでMAC側に渡す
(注)ホスト側はもちろんだがLinux側にもSCPが必要
yum install openssh-clients
注意:scpではインストールできない。openssh-clientsにすること
②証明書部分をテキストにしてcrtに拡張子に変更する
scp -P 22 root@?.?.?.?:/etc/pki/CA/cacert.pem .
###2-11. 保存した証明書ファイルをインストール
- Windows
インストール→証明書ストアの選択→信頼されたルート証明〜
- Mac
保存したcacert.crt(名前は各自つけたもの)をクリック。
キーチェーンに証明書として保存される。
キーチェーンで信頼するに設定を変更する。
###2-12. ホスト側(Mac,Windows側)のhostsファイルの変更
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
192.168.182.55 www.example.com