自己サーバ証明書(オレオレ証明書)を作成し、nginxでHTTPS通信ができるようにします。
サーバ証明書を作成するためには、
- 秘密キーの生成
- 秘密キーから証明書署名要求ファイルを作成
- 証明書署名要求ファイルからサーバ証明書を作成
のステップで行います。
秘密キーの作成
最初に秘密キーを作成しましょう。 シェルでopenssl genrsa -out server.key -aes128 1024と入力してください。 以下のようになります。
$ openssl genrsa -out server.key -aes128 1024
Generating RSA private key, 1024 bit long modulus
..........................++++++
..............++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
作成の途中で、秘密キーを保護するためのパスフレーズの入力が求められます。Enter pass phrase:の部分です。 パスワード(単語)ではなくパスフレーズ(語句)なので、長めのものがいいでしょう。
パスフレーズ確認のためのプロンプトがVerifying - Enter pass phrase:と表示されます。同じフレーズを入力してください。
パスフレーズが一致しないと
Verify failure
User interface error
2404:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/pem/pem_lib.c:334:
などと表示されてキーは生成されません。
パスフレーズが一致していれば、秘密キーがserver.keyファイルに作られます。
証明書署名要求ファイルの作成
秘密キーができたら、証明書署名要求(certificate signing request)ファイルを作りましょう。
シェルでopenssl req -new -key server.key -out my_domain.csrと入力してください。 次のようになります。
$ openssl req -new -key server.key -out my_domain.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.
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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chiyoda-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:my.domain
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:www.my.domain
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
ここではいくつかの項目を入力しなければなりません。すべて半角英数字でないとならないと思われます。
プロンプト | 入力する内容 |
---|---|
Enter pass phrase for server.key: | server.keyのパスフレーズ。 |
Country Name (2 letter code) [AU]: | 国名コード。 |
State or Province Name (full name) [Some-State]: | 州とか都道府県の名前。 |
Locality Name (eg, city) []: | 市町村の名前。 |
Organization Name (eg, company) [Internet Widgits Pty Ltd]: | 組織や会社の名前。 |
Organizational Unit Name (eg, section) []: | 組織や会社の部署名。空欄でもいいです。 |
Common Name (eg, YOUR name) []: | httpsでアクセスできるようにするドメイン名。(ここ重要!) |
Email Address []: | メールアドレス。空欄でもいいです。 |
A challenge password []: | 証明書署名要求のパスワード。自己証明なので空欄にします。 |
An optional company name []: | 会社名。空欄にします。 |
これで、my_domain.csrファイルが生成されます。
あと、国名コードについてはここからどーぞ。表中の"ISO 3166-1-alpha-2 code"の欄をご覧ください。日本ならJPです。
証明書署名要求ファイルからサーバ証明書を作成
証明書署名要求ファイルができたら、自分でサーバ証明書を作成しましょう。
$ openssl x509 -req -in my_domain.csr -signkey server.key -out my_domain.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Chiyoda-ku/O=my.domain/CN=www.my.domain
Getting Private key
Enter pass phrase for server.key:
ここでもEnter pass phrase for server.key:とプロンプトが表示され、server.keyのパスフレーズを入力します。
パスフレーズが誤っていると次のようにエラーが表示されます。
unable to load Private key
2492:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/evp/evp_enc.c:330:
2492:error:0906A065:PEM routines:PEM_do_header:bad decrypt:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/pem/pem_lib.c:428:
パスフレーズが正しければ、my_domain.crtファイルが生成されます。これが証明書になります。