joppot

コピペで絶対動く。説明を妥協しない

サーバ

MAMPでSSLを使ったhttps通信を行う

投稿日:2014年4月20日 更新日:

Pocket

file000884960613

概要

みなさんこんにちはcandleです。最近SSL通信で根幹に関わるセキュリティホールが見つかったのは記憶に新しいですね。

今回扱う、https通信というのは公開鍵暗号方式を使ったセキュアな通信のことです。

一般にweb上でやり取りされる通信はパケットという単位にデータが分割され、指定のサーバから今使っているPCまでデータが届きます。この時、やろうと思えば第三者がパケットの中身を閲覧することができます。

普通のwebサイトや動画サイトなど個人情報のやり取りなしでアクセスする分には第三者に閲覧されても問題ないのですが、webメールやfacebook、twitterなどそのまんま個人情報のやり取りをする場合、暗号化されていないと、問題です。

例えば、SNSサービスを作ろうと思っているなら、パスワードの入力画面は暗号化通信にした方が良いです。

今回は下のサイトを参考にさせてもらいました。

http://lab.cosmicguild.net/contents/matomemory/mamp-ssl-setting/


前提

MAMPがインストールされている
homebrewかMacportsがインストールされている。

SPONSORED LINK


opensslコマンドをインストールする

もしも、opensslがMacにインストールされているならこの部分は飛ばしてかまいません。

opensslをインストールしましょう。

homebrewなら下のコマンドで

brew install openssl

Macportsなら

port install openssl

でインストールできるとおもいます。


秘密鍵とサーバ証明書を用意する

参考サイトにある様に、下のapacheフォルダの中に
新しくkeysというフォルダを作ります。

/Applications/MAMP/conf/apache/

apache-1

ターミナルを開いて、keysディレクトリに移動します。

cd /Applications/MAMP/conf/apache/keys/

秘密鍵を作る

では秘密鍵を作ります。keysディレクトリの中で下のコマンドを打ちます。

openssl genrsa -des3 1024 >secret-key.pem

するとパスワードが必要といってきます。

Enter pass phrase:
Verifying - Enter pass phrase:

同じパスワードをいれましょう。パスワードは4文字以上なので、今回は「beam」にしました。

keys — bash

この秘密鍵をもとに証明書署名要求を作ります。

証明書署名要求とは英語でcertificate signing requestのことです。このcsrファイルを共通して信用されているといわれている認証局に送って、このサーバは信用できると署名してもらうファイルです。

分かりやすく表現すると、会社に出す書類を用意するということです。

下のコマンドを打ち込んで証明書署名要求(csr)をつくります。

openssl req -new -key secret-key.pem -out csr.pem

上のコマンドを入力すると、パスワードを求められます。先ほど秘密鍵を作った時に使ったパスワードを入力します。今回のサンプルの通りなら「beam」入力します。

keys — openssl

自分を証明する為の情報を書き込む様に要求がでてきます。それに答えていきましょう。今回はあくまで個人で使うだけだし、認証局に署名してもらうわけじゃないので、適当でかまいません。

Country Name (2 letter code) [AU]: 国名(例Ja)
State or Province Name (full name) [Some-State]: 県名(例Tokyo)
Locality Name (eg, city) []:市区町村(例 Shinjuku)
Organization Name (eg, company) [Internet Widgits Pty Ltd]: 組織名(例localhost)
Organizational Unit Name (eg, section) []: 部署名(例省略)
Common Name (eg, YOUR name) []: コモンネーム(例localhost)
Email Address []: メールアドレス(例省略)

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

keys — bash-1

するとcsrファイルが作られます。
keys — bash-3

crtファイルを作る

csrファイルに署名をしてcrtファイルを作ります。

本来は認証局にcsrを送って、向こうが署名してcrtファイルで返ってくるのですが、今回は自分で署名します。

openssl x509 -in csr.pem -out server.cert -req -signkey secret-key.pem

同じ様に、秘密鍵のパスワードが求められるので入力しましょう。今回のサンプルでは「beam」でしたのでそれを入力します。

keys — bash-4

サーバー証明書が作成されました。

パスワードなし秘密鍵を作る

現在の秘密鍵はパスワードがついています。これをMAMPのapacheサーバで使う場合ちょっと問題になるらしいので、パスワードなしの秘密鍵をパスワードありの秘密鍵から生成します。

openssl rsa -in secret-key.pem -out secret-key-nopass.pem

keys — bash-5

以上でsslで必要なファイルはそろいました。


MAMPのapacheのポート番号を変更する

MAMPのapacheのデフォルトのポート番号は8888です。

MAMP 2

これを普通のwebサーバが受け付ける80番に変更します。
MAMPを開き、「環境設定」から「ポート」を選び、「Apacheのポート」を80にします

MAMP-1 2

余談ですが、私はできればポート8888を使いたかったので、8888のままでhttpsを試しましたが、どうやらhttpsはhttp80が動いていないと、うまくいかないことがわかりました。

hostsファイルを書き換えて独自ドメインでアクセスする

現在、MAMPにブラウザからアクセスするには2つあります。どちらもローカルホストを表しています。

1つ目は「localhost」

MAMP-2 3

2つ目は「127.0.0.1」です。
MAMP-3-1

バーチャルホストを使いたいので、hostsファイルに独自ドメインを書いて使います。

ルートディレクトリのetcの中にhostsファイルがあります。
それをエディタで開きます。私はemacsを使います。

cd /etc/
sudo emacs hosts

hostsファイルに書き込むドメイン名は何でも良いのですが、分かりやすく「local.example.com」にします。
下の内容をhostsファイルに書きましょう。

127.0.0.1 local.example.com

apache — emacs

hostsファイルを保存します。
MAMPを起動させて、ブラウザでhttp://local.example.com/MAMP/にアクセスします。

MAMP-4
アクセスできますね。


httpd.confファイルを編集する

apacheの設定が書かれているのがhttpd.confというファイルです。

httpd.confファイルにはSSLの設定ファイルとバーチャルホストの設定ファイルを読み込む為の記述があります。

初期設定ではコメントアウトされて無効になっていますが、これを有効にします。

httpd.confをエディタで開きます。

私は何時も、emacsを使っています。自分のなれているエディタで開いてください。
(追記 2017/2/3,コメントで教えて貰ったので修正しました。)

# Various default settings                                                  
#Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

の部分下の様にします。

# Secure (SSL/TLS) connections                                              
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

次に、httpd.confのバーチャルホストの記述も変更します。下の部分を

# Virtual hosts                                                          
#Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf  

コメントインします。

# Virtual hosts                                                          
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf


httpd-ssl.confを編集する

ターミナルで下のパスに移動します。

cd /Applications/MAMP/conf/apache/extra

httpd-ssl.confを編集します。

extra — bash

<VirtualHost _default_:443>

#   General setup for the virtual host                                   
DocumentRoot "/Applications/MAMP/Library/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/Applications/MAMP/Library/logs/error_log"
TransferLog "/Applications/MAMP/Library/logs/access_log"

httpd-ssl.confの上の記述を下の様に変更します。DocumentRootはMAMPの標準的な公開ディレクトリのMAMPディレクトリ直下のhtdocsに変更します。ServerNameには先ほどhostsファイルに記述した独自ドメイン名を設定します。今回のサンプル通りなら、local.example.comになります。

<VirtualHost _default_:443>

#   General setup for the virtual host                                   
DocumentRoot "/Applications/MAMP/htdocs"
ServerName local.example.com:443
ServerAdmin you@example.com
ErrorLog "/Applications/MAMP/Library/logs/error_log"
TransferLog "/Applications/MAMP/Library/logs/access_log"

httpd-ssl.confのサーバ証明書のパスを変更します。
デフォルトでは下のパスになっています。

SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"

これを下の様に変更します。server.crtの名前がserver.certに変更されているのに気をつけてください。

SSLCertificateFile "/Applications/MAMP/conf/apache/keys/server.cert"

秘密鍵のパスを通します。

デフォルトで下のパスになっているので

SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"

これを、下の様に変更します。指定する秘密鍵はパスワードがついていない、secret-key-nopass.pemを使用します。

SSLCertificateKeyFile "/Applications/MAMP/conf/apache/keys/secret-key-nopass.pem"


httpd-vhosts.confを変更する

httpd-ssl.confと同じフォルダにhttpd-vhosts.confがあります。

NameVirtualHostの下あたりに次の内容を書きます。

<VirtualHost *:80>
  ServerAdmin you@local.example.com
  DocumentRoot "/Applications/MAMP/htdocs"
  ServerName local.example.com
  ErrorLog "logs/local.example.com-error_log"
  CustomLog "logs/local.example.com-access_log" common
</VirtualHost>

これで保存しましょう。
これでSSLの設定は終わりです。

動作確認をする

MAMPを起動します。
MAMP-5

http://local.example.com/MAMP

にアクセスします。

MAMP-4

次に、https://local.example.com/MAMP
にアクセスします。

証明書の承認をしてくださいとでてきます。もちろん、自分で発行しているので「続ける」押して許可しましょう。

Safari

httpsでアクセスできました。成功です。

MAMP-6


まとめ

httpsは恐らく個人情報をやりとりするサービスを作る人は必要になる機能だと思います。ローカル環境で使えれば、何かと便利だと思います。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ
-, ,

執筆者:


  1. かぷりたん より:

    まず最初に揚げ足を取る様で申し訳ないです。
    「httpd.confファイルを編集する」の、

    # Various default settings
    #Include /Applications/MAMP/conf/apache/extra/httpd-default.conf

    の部分下の様にします。

    # Secure (SSL/TLS) connections
    Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

    の部分、間違ってましたよ。

    # Secure (SSL/TLS) connections
    #Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

    # Secure (SSL/TLS) connections
    Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

    にですね

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

td-agentでnginxのerror.logとaccess.logを取得する

English 日本語 概要 みなさんこんにちはcandleです。今回はtd-agentでnginxのログを収集します。 td-agentで解説しますが、fluentdと設定は基本的に同じになると思う …

fluentdでrails logをtailで直接取得する方法

概要 追記) この記事はだいぶ古くなってしまったので、新しく書き直しました。 こちらの方を参照した方が多分良いことが書いてあります。 https://joppot.info/2017/03/17/35 …

apacheのmod_rewriteでphpのGETパラメータのurlを書き換える

概要 みなさんこんにちはcandleです。今回はphpでgetでパラメータを受け取る際のurlの書き換えです。 例えば、phpよくあるのがこのようなurlではないでしょうか。 http://local …

railsのfluent-loggerとdevise gemを使ってユーザーの行動をfluentdサーバに収集する

概要 fluentdと言えば、ビックデータで扱うようなデータを集め出力するサーバですが、これとrailsのfluent-logger gemとdevise gemを組み合わせてユーザーの行動ログをとっ …

MAMPでphpのshell_execを使用してunixコマンドを実行できない場合の対処(imagemagick,convert)

概要 みなさんこんにちはcandleです。今回はちょっと問題が起きてshell_execがうまくいかないときのトラブルシューティングをまとめます。 私はMAMPをバージョンアップする前は、phpのsh …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ