LABO IWASAKI

無料SSLの使い方

Free SSL

無料のSSLがやっと出た。
というか、ちょっと前からあったが、どうも
使い方が分からなかった。今回は成功。

LINUXのubuntuが対象の記事です。
その他のCentOSとかはごめんなさい。
でもバーチャルホスト意外の部分は使えると思う。

gitでSSLを入れる

letsencrypt

 まずgitを入れましょう 
iwasakiDESK:~ iwasaki$ sudo apt-get install git

お恥ずかしい話、無料SSLを導入する際「なんで出来ねぇんだよ!」とぼやいていましたが、そもそもgitが入ってなかったというバカなハマり方をしました。
みなさんは大丈夫だと思いますが、念のため…

そして無料SSLを入れます。
今回はここのを入れています。▶︎ https://letsencrypt.org/

 gitで入れます!w 
iwasakiDESK:~ iwasaki$ git clone https://github.com/letsencrypt/letsencrypt

証明書を発行する

GET SSL

Let's Encryptが入ったら、まずディレクトリを移動します。

 letsencryptに移動 
iwasakiDESK:~ iwasaki$ cd letsencrypt

次に、SSLにしたいドメインを指定します。
実にこれだけで証明書が発行されてしまう。感動です。

しかし、この時、注意が必要でapacheを停止しておく必要があります。
停止しとかないと発行してくれません。

 もう一つターミナルを立ち上げる 
iwasakiDESK:~ iwasaki$ sudo service apache2 stop apacheを停止して、このままさっきのターミナルで発行します
 証明書を発行(初めに開いてたターミナル) 
iwasakiDESK:~ iwasaki$ ./letsencrypt-auto certonly --standalone --email メールアドレス --agree-tos -d ドメイン

「 -d ドメイン」の部分ですが、ここを連続で入力すると、複数のドメインに対して証明書が発行可能です。
例えば「 -d test.com -d other.net 」という感じです。

証明書の発行を実行すると何やらダーっと表示されますが、2分くらいかかるので放置します。
そして、下のようなメッセージがでれば発行は完了です。

 こういうのが出たら成功 
IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to 指定したメールアドレス. - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/指定したドメイン/fullchain.pem. Your cert will expire on 2016-03-03. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

発行が完了したらapacheをスタートしておきましょう。
※有効期限が短いので注意。有効期限前に再度発行しましょう。

 apacheをスタート 
iwasakiDESK:~ iwasaki$ sudo service apache2 start

バーチャルホスト

Virtual Host

バーチャルホストを作る時もちょっとした注意事項があります。
ついでなので基本部分から全部書きます。

まず「 default-ssl 」をコピーして任意のバーチャルホストを指定します。
ここでは「 ドメイン-ssl 」にします。ここは自由にしてください。

 ディレクトリ移動 
iwasakiDESK:~ iwasaki$ cd /etc/apache2/sites-available コピーする
iwasakiDESK:~ iwasaki$ cp ./default-ssl ./ドメイン名-ssl

次に、内容を編集します。
僕は以下のようにしています。間違ってても責任取れないので、心配な人は自分で調べてください。
ピンクの部分が変更点です。

<IfModule mod_ssl.c>
<VirtualHost _default_:443>

        ServerAdmin メールアドレス
        ServerName ドメイン:443
        DocumentRoot サイトのパス

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory サイトのパス >
                #Options Indexes FollowSymLinks MultiViews
                Options Includes ExecCGI FollowSymLinks
                #AllowOverride None
                AllowOverride All
                #これはhtaccessを使えるようにしている部分です
                Order allow,deny
                allow from all
        </Directory>



        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

        Alias /doc/ "/usr/share/doc/"

        <Directory "/usr/share/doc/">
                Options Indexes MultiViews FollowSymLinks
                AllowOverride None
                Order deny,allow
                Deny from all
                Allow from 127.0.0.0/255.0.0.0 ::1/128
        </Directory>

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on


        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.

        SSLCertificateFile    /etc/letsencrypt/live/指定したドメイン/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/指定したドメイン/privkey.pem

        #   Server Certificate Chain:
        #   Point SSLCertificateChainFile at a file containing the
        #   concatenation of PEM encoded CA certificates which form the
        #   certificate chain for the server certificate. Alternatively
        #   the referenced file can be the same as SSLCertificateFile
        #   when the CA certificates are directly appended to the server
        #   certificate for convinience.
        #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crtここコメントアウト
        SSLCertificateChainFile  /etc/letsencrypt/live/指定したドメイン/fullchain.pem



        #  ### 色々かいてある ###

       #ここに以下を追記
       NameVirtualHost *:443

</VirtualHost>
</IfModule>

変更したら、default-sslを無効化して、今作ったやつを有効化します。
default-sslを無効化する際、注意点があります

ここを変更
<VirtualHost _default_:443>


こうする
<VirtualHost *:443>

 default-ssl を無効化 
iwasakiDESK:~ iwasaki$ sudo a2dissite default-ssl 作ったやつを有効化
iwasakiDESK:~ iwasaki$ sudo a2ensite ドメイン-ssl apacheをリロード
iwasakiDESK:~ iwasaki$ sudo service apache2 reload

apache2.4の場合

Virtual Host

apacheのバージョンが2.4の場合は書き方が少し変わります。
すでに2.4を使ってる人は知ってると思うので細かくは書きません。

 バージョン確認 
iwasakiDESK:~ iwasaki$ apache2 -v Server version: Apache/2.4.7 (Ubuntu) Server built: Oct 14 2015 14:20:21
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>

                ServerAdmin 管理者メールアドレス
                DocumentRoot 公開ディレクトリのパス
                ServerName ドメイン:443
                ServerAlias www.ドメイン:443

                # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
                # error, crit, alert, emerg.
                # It is also possible to configure the loglevel for particular
                # modules, e.g.
                #LogLevel info ssl:warn

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined


        <Directory / >
            Options FollowSymLinks
            AllowOverride None
        </Directory>

        <Directory /公開ディレクトリパス/>
              Options Includes ExecCGI FollowSymLinks
              AllowOverride All
              Require all granted  #2.4ではこれを書かないとエラー出る
        </Directory>

                # For most configuration files from conf-available/, which are
                # enabled or disabled at a global level, it is possible to
                # include a line for only one particular virtual host. For example the
                # following line enables the CGI configuration for this host only
                # after it has been globally disabled with "a2disconf".
                #Include conf-available/serve-cgi-bin.conf

                #   SSL Engine Switch:
                #   Enable/Disable SSL for this virtual host.
                SSLEngine on


        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.

        SSLCertificateFile    /etc/letsencrypt/live/指定したドメイン/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/指定したドメイン/privkey.pem

        #   Server Certificate Chain:
        #   Point SSLCertificateChainFile at a file containing the
        #   concatenation of PEM encoded CA certificates which form the
        #   certificate chain for the server certificate. Alternatively
        #   the referenced file can be the same as SSLCertificateFile
        #   when the CA certificates are directly appended to the server
        #   certificate for convinience.
        #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crtここコメントアウト
        SSLCertificateChainFile  /etc/letsencrypt/live/指定したドメイン/fullchain.pem


        #  ### 色々かいてある ###

                #   SSL Engine Options:
                #   Set various options for the SSL engine.
                #   o FakeBasicAuth:
                #        Translate the client X.509 into a Basic Authorisation.  This means that
                #        the standard Auth/DBMAuth methods can be used for access control.  The
                #        user name is the `one line' version of the client's X.509 certificate.
                #        Note that no password is obtained from the user. Every entry in the user
                #        file needs this password: `xxj31ZMTZzkVA'.
                #   o ExportCertData:
                #        This exports two additional environment variables: SSL_CLIENT_CERT and
                #        SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
                #        server (always existing) and the client (only existing when client
                #        authentication is used). This can be used to import the certificates
                #        into CGI scripts.
                #   o StdEnvVars:
                #        This exports the standard SSL/TLS related `SSL_*' environment variables.
                #        Per default this exportation is switched off for performance reasons,
                #        because the extraction step is an expensive operation and is usually
                #        useless for serving static content. So one usually enables the
                #        exportation for CGI and SSI requests only.
                #   o OptRenegotiate:
                #        This enables optimized SSL connection renegotiation handling when SSL
                #        directives are used in per-directory context.
                #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                #   SSL Protocol Adjustments:
                #   The safe and default but still SSL/TLS standard compliant shutdown
                #   approach is that mod_ssl sends the close notify alert but doesn't wait for
                #   the close notify alert from client. When you need a different shutdown
                #   approach you can use one of the following variables:
                #   o ssl-unclean-shutdown:

        #  ### 色々かいてある ###


                BrowserMatch "MSIE [2-6]" \
                                nokeepalive ssl-unclean-shutdown \
                                downgrade-1.0 force-response-1.0
                # MSIE 7 and newer should be able to use keepalive
                BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

やる事はこれで終わりですが、なぜか上手くいかない人は下記を確認してください。
これやってないと、そもそも動きません。忘れがちですが…

httpsが緑にならん

Not grean

URLの「https」が緑にならずグレーになる。
これ、なんでかなぁ…と思ってましたが、やっとわかりました。

理由1:設定してあまり時間が経ってない
理由2:広告を入れている
理由3:「canonical」「https」じゃない。
理由4:画像のリンクが「https」じゃない。

理由4についてですが、ここでいう「画像」は「head」内で指定する画像の事です。
body内の画像は相対パスで問題ないです。
つまり「shortcut icon」とかの事です。

SSLを設定したら「http」にアクセスしても「https」に自動で飛ぶようにしておきましょう。

以下をhtaccessに書いておけば「 https://ドメイン」に自動で飛んでくれます。


RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

忘れがちなこと

Notes

設定しなくてもサーバーによっては初めから設定できてる場合もあります。
できなかった時にお試しください。

 SSLポートを開く 
iwasakiDESK:~ iwasaki$ sudo ufw allow 443
 そもそものSSLを有効化 
iwasakiDESK:~ iwasaki$ sudo a2enmod ssl