AWSインスタンスでオレオレ証明書の発行

情報があふれているので詳しくは書きませんが、
覚書として、自分のAWSインスタンスへ設定した手順を残しておきます。

## 0.前提
・AWS上に設置したBitnami_Redmineを利用
・あくまで個人利用なので、無料でやる
（有料の場合は認証局に証明書の発行をしてもらう必要あり）

## 1.いわゆるオレオレ証明書の作成
[参考1 自己証明書の作成](http://www.mori-soft.com/
2008-08-15-01-36-37/2008-12-07-09-39-26/120-ec2-subversionredmine-35)
[参考2 自己証明書が必要な理由](http://www.webtech.co.jp/blog/optpix_labs/server/1159/)
### 1-1.サーバー証明書の秘密鍵を作成
>$ sudo /opt/bitnami/common/bin/openssl genrsa -des3  -out /opt/bitnami/apache2/conf/privkey.pem 1024 
Generating RSA private key, 1024 bit long modulus
.++++++
................++++++
e is 65537 (0x10001)
Enter pass phrase for /opt/bitnami/apache2/conf/privkey.pem:
Verifying - Enter pass phrase for /opt/bitnami/apache2/conf/privkey.pem:

ここのパスワードはひとまず任意のものを設定してください。
あとで消します。
### 1-2.CSRを作成
>$ sudo /opt/bitnami/common/bin/openssl req -new -key /opt/bitnami/apache2/conf/privkey.pem -out /opt/bitnami/apache2/conf/cert.csr
Enter pass phrase for /opt/bitnami/apache2/conf/privkey.pem:
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]:
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 (e.g. server FQDN or YOUR name) []:
Email Address []:

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

ここでの注意点は２つ。
・最初の.pemパスワードは手順１−１で入力した任意のパスワードであること。
・CommonNameはサイトのFQDNであること。
※FQDN: http://www.example.com/ なら www.example.com がFQDN

他は割と適当でいいです。

###1-3.パスワードを外した証明書を作成
>$ sudo /opt/bitnami/common/bin/openssl rsa -in /opt/bitnami/apache2/conf/privkey.pem -out /opt/bitnami/apache2/conf/server.key
Enter pass phrase for /opt/bitnami/apache2/conf/privkey.pem:
writing RSA key

パスワードは手順１−１で（ry

###1-4.自己署名証明書を作成
>$ sudo /opt/bitnami/common/bin/openssl x509 -in /opt/bitnami/apache2/conf/cert.csr -out /opt/bitnami/apache2/conf/server.crt -req -signkey /opt/bitnami/apache2/conf/server.key -days 365
Signature ok
subject=/C=/ST=/L=/O=/CN=
Getting Private key


## 2.apacheの設定
bitnamiのRedmineでは実はすでにhttps接続できるようになっているため、
この設定は不要です。（再起動は必要です！）
一応メモとして残しておきます。

> $ vi [apache]/conf/httpd.conf
> [Include conf/extra/httpd-ssl.conf]を追加

最後に再起動だけしておきましょう。
> $ service httpd restart

> bitnami_redmine の場合は
> $ service bitnami restart

## 3.ブラウザへ設定
このままでもhttps接続は可能ですが、
認証局では認証されていないので「危険よ！」と言われます。
（それでも続けて表示させることは可能です）

URLの横に「×」が付いてしまうので見栄えが悪い。
ですが、回避する方法があります。

###3-1.作成した自己証明証明書をPCへ移す
手段はなんでもよいです。
今回の手順でいいますと server.crt がそれにあたります。

一例ですが、AWS上のserver.crtをcatで出力した後、
内容をコピーしてローカルPC内に同じ内容のファイルを作成してもよいです。

###3-2.使用しているブラウザから認証設定を行う
これは各個人によりますが、私はChromeなので[ここらへん](http://bloodlinejp.ddo.jp/blog/?p=994)を見ました。

> 設定 > 詳細な設定 > HTTPSとSSL > ファイル > 読み込み
> 作成した自己認証証明書を指定後、追加されていることを確認
> 追加された証明書を選択し、認証を「常に許可」に変更

###3-3.https接続して確認
「×」がついてないことを確認しましょう！



## x.AWSでhttp接続ポートと閉じる
該当インスタンスのセキュリティグループを選択し、
インバウンドからポート40（HTTP）を消します。

http://xxx でアクセスできないことだけ確認しておきましょう。

## x.外部サービスと連携している場合の注意事項
例えば私の場合、RedmineとBitbucketが連携されており、
BitbucketにコミットするとRedmineにPOSTされていました。

そのときに「http〜」のURLを使っていたため、
「https〜」に変更する必要がありました。
こういったケースではhttpの口を閉じることで全く動かなくなるので、注意が必要です。