ソフト・ツール」カテゴリーアーカイブ

Let’s Encryptの導入(Apache2.4+CentOS7)

当サイトですが、KingSSLからLet’s Encryptに変更しました。
KingSSLを導入した時の記事はConoHaVPSで動いているWordPressをSSL化しました。をご参照ください。

理由は値段が無料というのと、そこまで更新もしないので..という事情です(更新しろよ!)。

導入についてはめちゃめちゃ簡単なので手順について以下に記載しておきます。

Certbotクライアントのインストール

EPELリポジトリからインストールが可能です、epelリポジトリをインストールした上でyumインストールで取得ができます。

# yum install epel-release
# yum install certbot python-certbot-apache

SSL証明書の作成

以下のように作成をします。

# certbot certonly --webroot -w /hogehoge/fugafuga/yoda56.com/ -d yoda56.com

-wオプションの後にはドキュメントルートのパス(Apacheに設定しているパスです)
-dオプションの後にはドメイン名を入力します。

対話式で進んでいきます
e-mailアドレスの入力を求められます。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): メールアドレスを入力

規約に同意するか聞かれます、Aで次に進みます。

Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

メールアドレスを共有するか聞かれます(Electronic Frontier Foundation)というとこに共有されるそうです。
共有をされたくないのでNで次へ

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N

下のようなメッセージが出れば作成完了です。

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for yoda56.com
Using the webroot path /hogehoge/fugafuga/yoda56.com for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/yoda56.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/yoda56.com/privkey.pem
   Your cert will expire on 2018-04-01. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   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 Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

作成された証明書について

以下に作成されています。

# ls -la /etc/letsencrypt/live/yoda56.com/
合計 12
drwxr-xr-x 2 root root 4096  1月  1 19:56 .
drwx------ 4 root root 4096  1月  1 19:56 ..
-rw-r--r-- 1 root root  543  1月  1 19:56 README
lrwxrwxrwx 1 root root   34  1月  1 19:56 cert.pem -> ../../archive/yoda56.com/cert1.pem
lrwxrwxrwx 1 root root   35  1月  1 19:56 chain.pem -> ../../archive/yoda56.com/chain1.pem
lrwxrwxrwx 1 root root   39  1月  1 19:56 fullchain.pem -> ../../archive/yoda56.com/fullchain1.pem
lrwxrwxrwx 1 root root   37  1月  1 19:56 privkey.pem -> ../../archive/yoda56.com/privkey1.pem

Apache2.4への設定

httpできたらhttpsでリダイレクトしつつ設定を加えます。

<virtualHost *:80>
    ServerName yoda56.com
    ServerAlias www.yoda56.com
   <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteCond %{HTTPS} off
       RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
   </IfModule>
</VirtualHost>

<virtualHost *:443>
    ServerName yoda56.com
    ServerAlias www.yoda56.com
    DocumentRoot /hogehoge/fugafuga/yoda56.com
    AllowEncodedSlashes On

    // SSL証明書を以下のように設定
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/yoda56.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yoda56.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/yoda56.com/chain.pem

    <Directory /hogehoge/fugafuga/yoda56.com>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

こんな感じでApacheに再起動をかけると良い感じになります。

cronで自動更新設定を行う

Let’s Encryptは3か月で証明書の有効期限が切れてしまうので更新をかける必要性があります。
一般的に更新が可能になるのは有効期限の30日前らしく、毎日更新のコマンドを回す分には問題なさそうなので、cronにセットしちゃいます。

# 毎週日曜の2時1分に更新コマンドを実行
02 01 *  *  0 root certbot renew --quiet

まだ更新日がきていないので、上手くいくかわかりませんが、静観していきたいと思います。

こんな感じで簡単に証明書の導入ができました。
検索順位の影響も出てくるので、とりあえず証明書を入れたいという方はおすすめです。

レンタルサーバなどでは、無料で導入してくれるサービスもあると思うので、チェックしてみてください。

では、2018年もよろしくお願いいたします。

【広告】

MacBookでVagarnt+Apache+PHP7.0を使った開発環境の構築

表題の通りです。メモになりますが下に書いていこうと思います。

とりあえず環境を作ります。

環境の導入

virtualboxのインストール

以下公式サイトから、virtualboxをダウンロード→インストールを行います。
なお、最新版で構いません。
https://www.virtualbox.org/

vagrantのインストール

以下公式サイトから、vagrantをインストールします。
なお、2017/02/26時点の最新環境だとプライベートIPで接続できなくなる問題が自分の環境では発生したので、最新版ージョンではなく、1.8.6の環境を落としてきました。
※最新版についての記事はこちら参照
https://www.vagrantup.com/
DOWNLOAD→ARCHIVESから過去バージョンをインストールできます。

Mac上にVagrantファイルを作成

virtualboxとvagrantのダウンロードとインストールが完了したらMac上に環境を構築します。
※ファイルの作成位置などは、自分のやりやすいところに作ってください。

Macのターミナルから

$ cd ~
$ mkdir vagrant
$ cd vagrant
$ mkdir centos71
$ cd centos71

CentOS7.1環境のパッケージをVagrantのBoxに追加

$ vagrant box add centos7.1 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box
$ vagrant box list

Vagrantの初期化でファイルを作成

$ vagrant init centos7.1

作成されたVagrantファイルの編集

$ vi Vagrantfile

一旦はプライベートIPアドレスの解放のみ、以下のようにアンコメントします。

# config.vm.network "private_network", ip: "192.168.33.10"
↓
config.vm.network "private_network", ip: "192.168.33.10"

完了したら:wqにて保存してファイルを閉じる
vagrantを起動させます。

$ vagrant up

起動したらまずPingが通るか確認
※ここで通らなくても、Firewall等が起動していて通らないことがあるかもなので、できなくても一旦進めちゃっていいです。

$ ping 192.168.33.10

vagrant sshにて、ログインを行います。

$ vagrant ssh
[vagrant@localhost ~]$ 

Centos上での環境構築

とりあえずしばらくsudo連打することになるので、スーパーユーザになって操作します。
ソフト全体のupdate

# yum update

Localeを日本に設定

# localectl status //ロケールの確認
# localectl list-locales | grep -i ja //日本語のロケールの確認
# localectl set-locale LANG=ja_JP.utf8 //日本、UTF-8に変更
# localectl set-keymap jp106 //キーマップをセット

SELinuxが無効になっているか確認
多分無効になっているはず

# getenforce
Disabled

firewalld稼動確認
多分稼動していないはず

# firewall-cmd --state
not running

// 稼動していた場合
# systemctl stop firewalld

■PHP7.0インストール
デフォルトでインストールすると7.0系はインストールできないので、EPELとRemiリポジトリからインストール

// EPELリポジトリ
# yum install epel-release

// Remiリポジトリ
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

// PHP7.0インストール
# yum install --enablerepo=remi,remi-php70 php php-mbstring php-pdo php-gd

// インストールされたバージョン確認
# php -v

■httpdインストール→起動

# yum install httpd

// インストール確認
# httpd -v

// とりあえず稼動させる
# service httpd start

// 自動起動設定にしておく
# chkconfig httpd on

■ホストから疎通できるか確認
以下URLからApacheの初期ページが表示できるか確認
http://192.168.33.10

ホストPCにあるフォルダを共有する

Macに戻ってVagrantとフォルダ共有設定を行う。
なお、ディレクトリは自分の好きなように作ってください。

■共有用のディレクトリ作成

$ cd ~
$ mkdir develop
$ cd develop
$ mkdir php
$ cd php
$ mkdir testProject
$ cd testProject
$ pwd
/Users/yoda56/develop/php/testProject
$ touch index.php
$ vi index.php

□index.phpの中身

<?php
phpinfo();

■Vagrantfileの設定

$ cd ~/vagrant/centos71/
$ vi Vagrantfile

□以下を追加

// 他の言語等もこの配下で開発するので、develop階層で共有
// 左がホスト、右がゲストになります。
config.vm.synced_folder "/Users/yoda56/develop", "/home/develop"

■Vagrant再読み込み

$ vagrant reload

// ssh接続
$ vagrant ssh

再度CentOS側の設定

■共有ファイルが存在するか確認

ls -la /home/develop/php/testProject/

■virtualhostの設定

$ su
# cd /etc/httpd/conf.d
# touch vhosts.conf
# vi vhosts.conf

□vhosts.confの記載内容

Listen 8000
<VirtualHost *:8000> 
  DocumentRoot /home/develop/php/testProject
  <Directory /home/develop/php/testProject>
    Allowoverride All
    Require all granted
  </Directory>
</VirtualHost>

■Apache再起動

// 記述チェック
# httpd -t
Syntax OK
// 再起動
# service httpd restart

■確認
以下URLから、phpinfoが表示されることを確認
http://192.168.33.10:8000

phpinfoが表示されれば基本的なローカル開発環境の設定は完了です。
他にもMYSQLとかがありますが、また別の機会で

ではでは

【広告】

Vagrant1.9.1にてハマる

Macの開発環境を新しく変えようと思ってVagrant最新版突っ込んだら見事にハマりました。。

ハマったところ

いつものようにCentOS7.0環境とapache使い、フォルダ共有する形で開発環境を整えようとしたら192.168.33.10でアクセスができない

ハマった環境

vagrant 1.9.1
VirtualBox 5.1.14
インストールしたLinux→CentOS 7.1

原因

Vagrantのバージョンが原因、1.9.1→1.8.6に落としたところアクセスができるようになった。

やったこと

SE Linuxが無効になっていること

$ getenforce
Disabled

firewallが無効になっていること(ローカル開発環境なので入にしておく必要がない)

$ firewall-cmd --state
not running

おかしいと思ったのでPingが通るかチェック

ping 192.168.33.10

通らない..

色々探し回ったのですが、特にこれといった解決策が見つからず、とりあえずメインのWindowsマシンのVagrantのバージョンを入れてみたら通りました。

ネットに書いてある通りにやっても動かないという若干罠なので気を付けたい

ちなみになぜ動かないのか追っていない、何が変わったのかなぁ?

SSL化したけど保護された通信にならないとき

SSL化してURLをhttpsとしたのですが、しばらく下の画像のような感じになっていました。

GoogleChromeで見ているのですが、本来なら下のようになっている想定でした。

保護されたコンテンツになっている記事となっていない記事があったので、原因の切り分けをして判明しました。

掲載コンテンツのURLもhttps://としなければならない

掲載している画像のコンテンツ等もhttpsとして貼らなければ保護された通信とならないようです。

以下の野獣先輩画像を例として見ていきましょう。
下の記事がhttpの野獣先輩です。
httpと化した先輩

下の記事がhttpsの野獣先輩です。
httpsと化した先輩

どうでしょうか、httpのコンテンツは保護されていないコンテンツとなっていることが分かるでしょう。

保護された通信となっていない場合は、掲載している画像等のコンテンツのURLを見直してみると良いでしょう。

ではでは

contact form 7で正常に送信されたはずなのにエラーになっている場合

WordPressにてContact Form7という有能プラグインがあります。
https://ja.wordpress.org/plugins/contact-form-7/

お問い合わせフォームを手軽に作ってくれるプラグインなのですが、若干ハマったので備忘録として

事象

お問い合わせフォームを設置して、メール送信テストを実施
適当に書いて送信を押したところ、無事送信できたというメッセージが
ただ、何分待ってもメールが来ない

環境

・conoHa VPS
・CentOS 7.3

原因を探す

とりあえずpostfix入ってるか確認

# which postfix
/usr/sbin/

入ってるんゴ
ログの確認

/var/log/maillog

と、こんな感じのログが

<xxx@xxx.localdomain>... Domain of sender address xxx@xxx.localdomain does not exist (in reply to MAIL FROM command))

また、mailコマンドでメールを送ってみてもダメでした。

原因について

/etc/postfix/main.cfファイルが初期状態のままだと何も設定されていないようです。
最低限以下の記述は多分なんでもいいのでアンコメントして変える必要があります。
ホスト名とか適当でもいけるのかな?

# cp -vp /etc/postfix/main.cf /etc/postfix/main.cf.org
# vi /etc/postfix/main.cf

myhostname = hogehoge.com ←アンコメントして変更
mydomain = hogehoge.com ←アンコメントして変更
myorigin = $mydomain ←アンコメント

とりあえずこんな感じにしておけば正常に問い合わせフォームから送れます。
外部からメール送信するわけではないので、25番ポートとか開ける必要はないです。

こんな感じで、ではでは