(作成:2013/01)
Linuxなら大概標準で入っているSSL関連パッケージとSSH関連パッケージ。SSL関連は所謂HTTPSなんかで使い、SSH関連はセキュアなシェルアクセスに使うけれど、方法とか便利なTipsについてまとめてみる。
因みに「SSL = Secure Socket Layer」「SSH = Secure SHell」で、つまりそれぞれ実装するレイヤーが異なるので両者は本来別モノね。
OpenSSLで証明書要求ファイルを作る
何のかので仕事によく使うので。
証明書の作成はどのサーバで実施してもOK。CSR作成時の署名登録を簡易にするためにも、自席Linuxがあると良いかもね。
で、まずは鍵ファイル作成。最近は2048bitでないと作ってくれない場合がある。
$ openssl genrsa -rand /dev/urandom -aes256 2048 > www.hyakki.local.key
Generating RSA private key, 2048 bit long modulus
...........................................................................................................+++
....+++
e is 65537 (0x10001)
Enter pass phrase: (任意文字列)
Verifying - Enter pass phrase: (任意文字列)
オプション | 意味 |
---|---|
genrsa |
RSA形式の秘密鍵作成。 |
-rand ... |
暗号生成用の乱数発生シードを指定。 |
-aes256 |
AES暗号化方式を用いる。 |
2048 |
2048bitで秘密鍵を作る。 |
パスフレーズを残しておくと後々ウザいので(httpd再起動でパスフレーズ入力待ちになったり)、鍵ファイルからパスフレーズ情報をぷち消す。
$ openssl rsa -in www.hyakki.local.key -out www.hyakki.local.nokey
Enter pass phrase for www.hyakki.local.key: (任意文字列)
writing RSA key
CSR作成、の前にこの入力をなるたけ省略したい場合は、あらかじめデフォルト定義をしておくのが良いかと。
# vi /etc/ssl/openssl.cnf
```shell
```ini
[ req_distinguished_name ]
countryName_default = JP
stateOrProvinceName_default = (都道府県)
localityName_default = (市区郡)
0.organizationName_default = (会社名)
emailAddress_default = (管理者E-mail)
こうしておけば毎回同じような項目を入力する手間が省ける。実質Common Nameくらいしか変更しなくて良い。
CSR作成。
# openssl req -new -key www.hyakki.local.nokey -out www.hyakki.local.csr
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) [JP]:
State or Province Name (full name) [(都道府県)]:
Locality Name (eg, city) [(市区郡)]:
Organization Name (eg, company) [(会社名)]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.hyakki.local
Email Address [(管理者E-mail)]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
記載無しの対話項目は、未入力のままEnterでOK。OU、CNでFQDN入力するのは、確かRapid-SSLだとそうして欲しいって書かれていた筈。このあたりは場合によりけりで。
オプション | 意味 |
---|---|
req |
証明書要求ファイルを作成。 |
-new |
新規に証明書要求ファイルを作る。 |
-key ... |
鍵ファイル名の指定。 |
-out ... |
CSRファイル名の指定。 |
最後にCSRファイルの最終確認。特に鍵ファイルのbit長なんかは確認しとくこと。
# openssl req -noout -text -in www.hyakki.local.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=JP, ST=(都道府県), L=(市区郡), O=www.hyakki.local, CN=www.hyakki.local/emailAddress=webmaster@hyakki.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:ce:a3:93:22:92:c5:90:d3:45:f7:84:de:0e:14:
...
a6:d3
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: md5WithRSAEncryption
a4:9e:7e:ca:5a:d1:15:12:6b:2f:54:4a:9c:55:7a:52:da:27:
...
94:14:c3:07
OpenSSLでオレオレ証明書を作成する
頁タイトルに偽り有りになっちゃうけれど、試験用途などでよく作るオレオレ証明書の作成方法。CSRファイル生成までは上記手順を参考のほど。
オレオレ証明を作るには、つまりオレオレ認証局を設立しないといけない。といっても然程大層な話でもないので、ひとつドシンと立ててしまいませう。
$ /usr/lib/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.........................++++++
........++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase: (オレオレ認証局用パスフレーズ)
Verifying - Enter PEM pass phrase: (もう一回)
-----
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) [JP]:
State or Province Name (full name) [(都道府県)]:
Locality Name (eg, city) [(市区郡)]:
Organization Name (eg, company) [(会社名)]:
Organizational Unit Name (eg, section) []:Test CA
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address [(管理者E-mail)]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/./cakey.pem: (オレオレ認証局用パスフレーズ)
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
94:69:96:4a:b2:48:f3:98
Validity
Not Before: Jan 31 07:05:24 2013 GMT
Not After : Jan 31 07:05:24 2016 GMT
Subject:
countryName = JP
stateOrProvinceName = (都道府県)
organizationName = (会社名)
organizationalUnitName = Test CA
commonName = localhost
emailAddress = (管理者E-mail)
X509v3 extensions:
X509v3 Subject Key Identifier:
F0:2D:66:F2:EF:43:39:C4:25:39:D3:82:EB:E0:5B:EB:51:75:77:31
X509v3 Authority Key Identifier:
keyid:F0:2D:66:F2:EF:43:39:C4:25:39:D3:82:EB:E0:5B:EB:51:75:77:31
X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Jan 31 07:05:24 2016 GMT (1095 days)
Write out database with 1 new entries
Data Base Updated
これだけで認証局の出来上がり。かんたん!すてき!
というわけでCSRから証明書ファイルを生成してみる。
$ openssl ca -in www.hyakki.local.csr -keyfile demoCA/private/cakey.pem -out www.hyakki.local.crt
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for demoCA/private/cakey.pem:(オレオレ認証局用パスフレーズ)
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
94:69:96:4a:b2:48:f3:99
Validity
Not Before: Jan 31 07:06:50 2013 GMT
Not After : Jan 29 07:06:50 2023 GMT
Subject:
countryName = JP
stateOrProvinceName = (都道府県)
organizationName = (会社名)
commonName = www.hyakki.local
emailAddress = (管理者E-mail)
X509v3 extensions:
X509v3 Basic Constraints:
CA:TRUE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
3B:E5:08:CA:7B:AA:BB:74:8A:C1:2A:BB:D4:E3:1C:80:13:6A:33:94
X509v3 Authority Key Identifier:
keyid:F0:2D:66:F2:EF:43:39:C4:25:39:D3:82:EB:E0:5B:EB:51:75:77:31
Certificate is to be certified until Jan 29 07:06:50 2023 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
こんな感じで出来上がり。
cert+key -> pkcs12形式コンバート
IISにインポートしようとしてもcer+keyの組み合わせではインポート出来なくてイラッとする。というわけでpkcs12形式への変換方法。Windowsの管理UI、まじ何とかしろ……。
# openssl pkcs12 -export -inkey www.hyakki.local.key -in www.hyakki.local.cer -out www.hyakki.local.p12
Enter Export Password:
Verifying - Enter Export Password: