猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

Linux Network

opensslによる自己認証局によるSSL

投稿日:2013年1月6日 更新日:

1.openssl.cnfの修正

basicConstraints=CA:TRUE
にする。自己認証局(ca)を構築時にはTrueにしないと
この修正をしてからcaを開設しないとca証明書が正しく機能しない。
実際にはIEでは白い画面になるばかりでハマります。

# vim /etc/pki/tls/openssl.cnf
###basicConstraints=CA:FALSE
basicConstraints=CA:TRUE

2.認証局(ca)の開設

# cd /etc/pki/tls/misc/
# sh CA -newca
CA certificate filename (or enter to create)★空

Making CA certificate ...
Generating a 1024 bit RSA private key
..............++++++
..............++++++
writing new private key to '../../CA/private/./cakey.pem'
Enter PEM pass phrase:★capass
Verifying - Enter PEM pass phrase:★capass
-----
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.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
]Locality Name (eg, city) [Newbury]:hatiouji
Organization Name (eg, company) [My Company Ltd]:CACompany ←ここはサーバー証明書と合わせる
Organizational Unit Name (eg, section) []:CASection
Common Name (eg, your name or your server's hostname) []:catest.jp 
Email Address []:★

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:★
An optional company name []:★
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ../../CA/private/./cakey.pem:★capass
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 0 (0x0)
        Validity
            Not Before: Dec 27 08:38:41 2012 GMT
            Not After : Dec 27 08:38:41 2015 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = CACompany
            organizationalUnitName    = CASection
            commonName                = catest.jp
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:TRUE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                DB:4C:02:42:86:E8:9E:1A:97:DE:C2:B1:D8:A4:8C:CA:7A:BD:87:2C
            X509v3 Authority Key Identifier:
                keyid:DB:4C:02:42:86:E8:9E:1A:97:DE:C2:B1:D8:A4:8C:CA:7A:BD:87:2C

Certificate is to be certified until Dec 27 08:38:41 2015 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated

/etc/pki/CA/cacert.pem  認証局用証明書(ca.crt)
/etc/pki/CA/private/cakey.pem CA管理者のパスフレーズ
ができる

3.秘密鍵作成のための擬似乱数の情報を生成

# cd /etc/httpd/conf/ssl/
# openssl md5 * > ./rand.dat

4.サーバ用秘密鍵(server.key)の作成

# openssl genrsa -des3 -out server2012.key -rand rand.dat 2048
48 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
...................................................+++
...+++
e is 65537 (0x10001)
Enter pass phrase for server2012.key:★server2012
Verifying - Enter pass phrase for server2012.key:★server2012

5.認証局への署名要求書(server.csr)の作成

# openssl req -new -key server2012.key -out server2012.csr
Enter pass phrase for server2012.key:★server2012
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.
-----
Country Name (2 letter code) [GB]:★JP
State or Province Name (full name) [Berkshire]:★Tokyo
Locality Name (eg, city) [Newbury]:★chuou-ku
Organization Name (eg, company) [My Company Ltd]:★CACompany ★★合わせる!!
Organizational Unit Name (eg, section) []:★TestSection
Common Name (eg, your name or your server's hostname) []:★test.jp
Email Address []:★

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:★
An optional company name []:★

6.署名要求書(server.csr)にCA用秘密鍵(ca.key)を使用して署名し、サーバー証明書(server.crt)を発行する。

※この際サーバ用秘密鍵(server.key)を使用して署名すれば、自己署名となる。
※CAの証明書等もプログラムで使用するため実行ディレクトリも関係する。(././CAが必要)
※2と5のCompanyはあわせておく必要がある。下記のようなエラーがでる。
 CA certificate (CACompany) and the request (TestCompany)

# cd /etc/pki/tls/misc
# openssl ca -in /etc/httpd/conf/ssl/server2012.csr -out /etc/httpd/conf/ssl/server2012.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ../../CA/private/cakey.pem:★capass
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 3 (0x3)
        Validity
            Not Before: Dec 27 10:40:26 2012 GMT
            Not After : Dec 27 10:40:26 2013 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = CACompany
            organizationalUnitName    = TestSection
            commonName                = test.jp
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:TRUE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                E8:4B:26:99:B7:D7:40:1D:42:FA:3C:40:B5:44:08:AA:76:F6:87:2A
            X509v3 Authority Key Identifier:
                keyid:DB:4C:02:42:86:E8:9E:1A:97:DE:C2:B1:D8:A4:8C:CA:7A:BD:87:2C

Certificate is to be certified until Dec 27 10:40:26 2013 GMT (365 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

Certificate is to be certified until Dec 27 10:38:48 2013 GMT (365 days)
Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2
というエラーがでる場合は、
/etc/pki/CA/index.txt
を削除して空のindex.txtを作成して再実行する。

7.(※任意)サーバー証明書(server.crt)をDERフォーマットへ変換してブラウザインポート用のバイナリ(ca.der)を作成

# cd /etc/httpd/conf/ssl/
# openssl x509 -inform PEM -outform DER -in server2012.crt -out server2012.der

8.サーバー用秘密キーからパスフレーズを削除

これをしておかないと、apacheの再起動のたびに入力を要求されます。
運用上好ましくないので削除しておきます。

# cp server2012.key server2012.key.bak
# openssl rsa -in server2012.key -out server2012.key
Enter pass phrase for server2012.key:★server2012
writing RSA key

9.mod_sslのインストール

# yum install mod_ssl

10.ssl.confの編集

#vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/conf/ssl/server2012.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/server2012.key

11.ネームベースのSSLの設定 httpd.confの編集

ipでアクセスする場合は不要

#vim /etc/httpd/conf/httpd.conf
NamevirtualHost *:443
<VirtualHost *:443>
    DocumentRoot /var/www/html/
    ServerName test.jp
</VirtualHost>

12.apacheの再起動

※この際、8のパスフレーズの削除を行っていなければ、パスワードの入力を求められる

# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

13.クライアントのhostファイルの編集

windowsの場合
C:\WINDOWS\system32\drivers\etc/hosts を編集
192.168.xx.xx test.jpを追加
linuxの場合

# vim /etc/hosts を編集
192.168.xx.xx    test.jpを追加

14.クライアントにサーバー証明書をインストール

6か7で作成した証明書をクライアントのブラウザにインストールする。

15.クライアントにCA証明書をインストール

2で作成した認証局用証明書をインストールする。
これをインストールしておかないと、「証明書は信頼できません」となってしまう。
一般的な認証局用証明書は、ブラウザにプレインストールされているが、
今回は自作の認証局なのでこの作業が必要になる。
CA証明書はそのままではクライアントにインストールできないので、derに変換してインストールする。

# openssl x509 -inform pem -in cacert.pem -outform der -out cacert.der

16.SSLでアクセス

https://test.jp/

Gooleアドセンス用336

Gooleアドセンス用336

-Linux, Network
-

執筆者:

関連記事

PHPでは文字列の比較に==を使用してはいけない

==を使用しても、文字列の比較にはなりません。 必ず「===」もしくは「strcmp」を使いましょう! 否定する場合は「!==」です。 もし「==」とすれば”00″は&#822 …

linux

digコマンドでDNSを調査する

digコマンドを使用すれば、指定したDNSサーバーに問い合わせができます。 dig @[DNSサーバー] [調べたいドメイン] です。 下記は8.8.8.8(googleDNS)にntp.nict.j …

linux

169.254.0.0 は APIPA (Automatic Private IP Addressing)

routeコマンドをしてみて下さい。 # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use …

linux

LinuxでBase64を扱う

Base64は暗号化としてよりも、HTTPでスペースやら記号などやりとりできない文字を置き換えて送受信する場合によく利用されます。 Linuxで簡単に使用できるBase64のエンコードやデコードの方法 …

linux

ファイルに付いた行末の「^M」を削除する

Windowsで作成したファイルの改行コードはCR+LFです。 しかしLinuxの改行コードはLFだけなので、転送方法によってはWindowsで作成したテキストファイルをviで開くと、すべての行末に「 …