SSLによる通信の暗号化 - careerbeat/dit-ehime GitHub Wiki
SSLによる通信の暗号化
セキュアな通信を確保するために、SSLによる通信の暗号化を行う
1. opensslのインストール
[root@dojo ~]# yum -y install openssl
2. 認証局(CA)の作成
自身で認証局(CA)を構築する
[root@dojo ~]# /etc/pki/tls/misc/CA -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 2048 bit RSA private key
・・・
(略)
・・・
Write out database with 1 new entries
Data Base Updated
途中入力項目がいくつかあるので、適切な値を入力する 以下に今回入力したデータを記載する
入力項目 | 意味 | 入力内容 |
---|---|---|
CA certificate filename(or enter to create) | CAファイルを置く場所 | Enter |
Enter PEM pass phrase: | CAの秘密鍵パスワード | パスワード |
Verifying - Enter PEM pass phrase: | CAの秘密鍵パスワードの確認 | パスワード |
Country Name(2 letter code)[XX]: | 国名 | JP |
State or Province Name (full name)[]: | 都道府県 | Ehime |
Locality Name (eg, city) [Default City]: | 市区町村名 | Matsuyama |
Organization Name (eg, company)[Default Company Ltd]: | 組織名 | Aso.alpha.jp |
Organizational Unit Name (eg, section) []: | 担当部署名 | AsoSystem |
Common Name (eg, your name or your server's hostname) []: | ホスト名 | x.x.x.41 |
Email Address []: | メールアドレス | Enter |
A challenge password []: | 証明書を破棄する際に必要となるパスワード | Enter |
An optional company name []: | 組織名の略称 | Enter |
Enter pass phrase for /etc/pki/CA/private/./cakey.pem: | CAの秘密鍵のパスワード | パスワード |
作成されたCA証明書は以下の場所に保存されている
名称 | 場所 |
---|---|
公開鍵 | /etc/pki/CA/private/cacert.pem |
CA秘密鍵 | /etc/pki/CA/private/cakey.pem |
3.サーバ証明書の秘密鍵作成
秘密鍵を保存するためのディレクトリを作成し、そこで鍵生成を行う
[root@dojo ~]# mkdir /etc/pki/ssl
[root@dojo ~]# cd /etc/pki/ssl
[root@dojo ssl]# openssl genrsa -out server.key -aes256 2048
Generating RSA private key, 2048 bit long modulus
...................................+++
...................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
入力項目 | 意味 | 入力内容 |
---|---|---|
Enter pass phrase for server.key: | 秘密鍵のパスワード | パスワード |
Verifying - Enter pass phrase for server.key: | パスワードの確認 | パスワード |
以上の設定で、認証局を構築することができた
4. サーバ証明書作成
サービスで実際に使用する鍵を生成する
[root@dojo ssl]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
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.
(略)
・・・
入力項目 | 意味 | 入力内容 |
---|---|---|
Enter pass phrase for server.key: | サーバー秘密鍵のパスワード | パスワード |
Country Name (2 letter code) [XX]: | 国名 | JP |
State or Province Name (full name) []: | 都道府県名 | Ehime |
Locality Name (eg, city) [Default City]: | 市区町村名 | Matsuyama |
Organization Name (eg, company) [Default Company Ltd]: | 組織名 | Asoalpha.jp |
Organizational Unit Name (eg, section) []: | 担当部署名 | AsoSystem |
Common Name (eg, your name or your server's hostname) []: | ホスト名 | x.x.x.41 |
Email Address []: | メールアドレス | Enter |
A challenge password []: | 証明書を破棄する際に必要となるパスワード | Enter |
An optional company name []: | 組織名の略称 | Enter |
5. サーバ証明書へのCAの署名
サーバ証明書へのCAの署名をし、SSL証明書を作成する
[root@dojo ssl]# openssl ca -config /etc/pki/tls/openssl.cnf -in server.csr -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out server.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
The organizationName field needed to be the same in the
CA certificate (Aso.alpha.jp) and the request (Asoalpha.jp)
CAのOrganizationNameが違うため、SSL証明書が作成できなかった サーバ証明書を作り直す
サーバ証明書の作り直し
4.と同様の作業を行う Organization Nameを統一させるため、Aso.alpha.jpとして作成する
[root@dojo ssl]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
・・・
(略)
・・・
Organization Name (eg, company) [Default Company Ltd]:Aso.alpha.jp
(略)
再度、署名をする
[root@dojo ssl]# openssl ca -config /etc/pki/tls/openssl.cnf -in server.csr -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out server.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
・・・
(略)
・・・
Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2
エラーが出たので 証明書の要求をrevokeする
[root@dojo ssl]# openssl ca -revoke /etc/pki/CA/newcerts/A48A38AD79BA87F1.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Revoking Certificate A48A38AD79BA87F1.
Data Base Updated
それでもエラーが出る場合は、/etc/pki/CA/index.txt の内容を削除する
再々度、署名をする
[root@dojo ssl]# openssl ca -config /etc/pki/tls/openssl.cnf -in server.csr -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out server.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
・・・
(略)
・・・
Certificate is to be certified until Jun 25 02:05:46 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
問題なく署名できたので、作業を進める
最後に、それぞれの鍵が生成できているのか確認をする
秘密鍵の確認
[root@dojo ssl]# openssl rsa -in server.key -text
CSR(署名要求書)の確認
[root@dojo ssl]# openssl req -in server.csr -text
証明書の確認
[root@dojo ssl]# openssl x509 -in server.crt -text
6. クライアントへの証明書の配布
ApacheをSSL対応するために必要な、mod_sslのインストールをする
[root@dojo ssl]# yum install mod_ssl
SSL証明書の設定をする
[root@dojo ssl]# vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/ssl/server.crt
SSLCertificateKeyFile /etc/pki/ssl/server.key
httpdの再起動
[root@dojo CA]# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: httpd: apr_sockaddr_info_get() failed for dojo.local
・・・
(略)
・・・
Enter pass phrase:
OK: Pass Phrase Dialog successful.
[ OK ]
Webブラウザが受け入れることのできるSSL証明書の書式はPEMとDERの2種類であるので、DERを生成する
[root@dojo html]# openssl x509 -in cacert.pem -inform PEM -out cacert.der -outform DER
作成したファイルをvar/www/html/へコピー
[root@dojo ssl]# cp cacert.der /var/www/html/
[root@dojo ssl]# cp cacert.pem /var/www/html/
PEMとDERが証明書であることを認識させるために、Apache の mime.typesの設定を変更する
[root@dojo ssl]# vim /etc/mime.types
AddType application/x-x509-ca-cert .der
クライアントからfirefoxで"x.x.x.41/cacert.der"へアクセスすると、信頼するかどうかの確認画面が出る 認証後、https通信が行えるようになることが確認できる
参考
CentOS6.5 OpenSSLでオレオレ認証局 $yuzu->log(); OpenSSLでオレオレSSL証明書の作成ログ