Home > ブログ > WebサイトのSSL化作業

ブログ

WebサイトのSSL化作業

http(非SSL)で運用中のWebサイトのSSL化を行いました。

今回は共用レンタルサーバー上でhttp://のみで運用しているサイトのSSL化をご依頼いただきました。

GoogleはWebの常時SSL化を推進してきましたが、その一環で少し前からChromeでは非SSLページを表示した時にアドレスバーに「保護されていない通信」と表示されるようになっています(図1)。

保護されていない通信
図1 Chromeによる表示

SSL化した方がSEO的にも優遇されるということで、もともとSSL化の流れはありましたが、法人サイトでこのような表示がされているのはさすがにまずいということで、急いでSSL化をしたいという法人のお客様が多いようです。

で、今回の作業です。

対象が既に運用中のサイトということと、サーバーが共用レンタルサーバーで構成をいじることができないので、別サーバーにテスト環境を別途構築し、そこでSSL化の作業を行うようにしました。

移行対象のファイルはお見積もり時に事前に調査済みで、静的なHTML以外にMovableTypeと問合せフォーム(php)がありました。

まずは運用中のサーバーからDocumentRootのファイル一式とデータベース(MySQL)のデータをテスト環境にコピーしてテスト環境を構築します。

あとはテスト環境上で修正していきます。

  • 静的HTMLのリンクを修正
  • MovableTypeの設定を修正
  • MovableTypeのテンプレートを修正
  • MovableTypeの記事のリンクを修正
  • 各ページ、MovableType、問合せフォームの動作確認
  • 等々

テストが完了したらSSL証明書を設定いただき、テスト環境のファイルを本番環境に戻して動作確認を行い完了です。

=============

今回はSSL化の作業でしたが、サーバー/Webサイト関連の作業でしたら様々なものに対応しております。
運用中のWebサイトのことで何かお困りのことがありましたらお問い合わせください。

=============

話は変わりますが

別件なのですが、ちょうど同じ時期に「WebサーバーをAWSに移行しているがs3にデータを転送できない」というお客様がいました。確認してみると、日本語を含むファイル名がSJISでエンコーディングされていたのが原因でした。s3に転送するにはファイル名をUTF-8でエンコーディングしておく必要があります。

s3転送時のエラー

# aws s3 sync --exact-timestamps xxxx s3://xxxx
warning: Skipping file '\x90V\x82\xb5\x82\xa2\x83e\x83L\x83X\x83g \x83h\x83L\x83\x85\x83\x81\x83\x93\x83g.txt'. There was an error trying to decode the the file '\x90V\x82\xb5\x82\xa2\x83e\x83L\x83X\x83g \x83h\x83L\x83\x85\x83\x81\x83\x93\x83g.txt' in directory "/xxxx/". 
Please check your locale settings.  The filename was decoded as: UTF-8
On posix platforms, check the LC_CTYPE environment variable.

対象のファイル数が多かったのでs3への転送だけお手伝いすることになり、ファイル名のエンコーディングをSJISからUTF8に変換(リネーム)するスクリプトを作成しました。以前同じようなスクリプトを作った記憶はあるのですが、見つからなかったので再度作成しました。githubにアップするほどのものでもないのでここに貼り付けておきます。

rename_sjis2utf8.pl

#!/usr/bin/perl

use strict;
use warnings;

use Encode;
use Encode::Guess qw/cp932 euc-jp 7bit-jis utf8/;
use Getopt::Std;
use File::Basename;
use FindBin;
use File::Copy;

sub usage {
    my ($msg) = @_;

    my $cmd = basename $0;

    print STDERR "$msg\n\n" if defined $msg;
    print STDERR <<END_OF_TEXT;
Usage:
$cmd [options] <filename>

options:
-h     show this help.
-e:    execute rename.
-i:    prompt before execution. use both with -e
END_OF_TEXT

    exit 1;
}

my $DryRun = 1;
my $Prompt = 0;

if (@ARGV < 1) {usage;}
my $filename = pop @ARGV;

{
    my %args;
    getopts("hei", \%args) or usage;

    if ($args{h}) {usage;}
    if ($args{e}) {$DryRun = 0;}
    if ($args{i}) {$Prompt = 1;}
}

sub rename_sjis2utf8 {
    my ($filename) = @_;

    my $src = $filename;

    my $src_hex = $src;
    $src_hex =~ s/([^\x20-\x7e])/'\x'.unpack("H2",$1)/eg;

    # 途中のディレクトリ名はUTF8の可能性もあるので
    # encodingをチェック/変換するのはbasename部分のみ
    my $src_basename = basename $filename;
    my $enc = guess_encoding($src_basename);
    ref($enc) or die "Can't guess encode ($src_hex).";
    return if $enc->name ne 'cp932';

    my $dst_basename = $src_basename;
    Encode::from_to($dst_basename, $enc->name, 'UTF-8');

    my $dst = dirname($filename) . '/' . $dst_basename;

    print "$src_hex -> $dst\n";

    if (!$DryRun) {
	if ($Prompt) {
	    print "Rename? (y/n): ";
	    my $yn = <STDIN>;
	    chomp $yn;
	    if ($yn ne 'y') {
		return;
	    }
	}

	move $src, $dst
	  or die "rename error($!)";
	print "Renamed\n";
    }
}

rename_sjis2utf8 $filename;
exit 0;

使い方は以下のように引数に変換したいファイルを指定します。ファイル名にSJISが含まれていなければなにもしません。

perl rename_sjis2utf8.pl test.txt

実際に変換したいファイル名にはSJISが含まれるので、端末上では文字化けして表示されていると思います。このため、ファイル名の入力にはshellの補間機能を使ってください。

perl rename_sjis2utf8.pl ?V?????e?L?X?g ?h?L???????g.txt

本スクリプトはオプションを何も付けずに実行した場合は、Dry Runを行い変換内容を表示するだけで実際にはリネームしません。

Dry Runによる変換内容の表示

$ perl rename_sjis2utf8.pl ?V?????e?L?X?g ?h?L???????g.txt
\x90V\x82\xb5\x82\xa2\x83e\x83L\x83X\x83g \x83h\x83L\x83\x85\x83\x81\x83\x93\x83g.txt -> 新しいテキスト ドキュメント.txt

実際にリネームを実行する場合は-eをつけます。-iをつけるとリネーム実行前に本当に実行するか確認を行います。

# -eオプションを付けてリネームを実行する
$ perl rename_sjis2utf8.pl -e ?V?????e?L?X?g ?h?L???????g.txt
\x90V\x82\xb5\x82\xa2\x83e\x83L\x83X\x83g \x83h\x83L\x83\x85\x83\x81\x83\x93\x83g.txt -> 新しいテキスト ドキュメント.txt
Renamed

# -iオプションを付けてリネームを実行するか確認する
$ perl rename_sjis2utf8.pl -ei ?V?????e?L?X?g ?h?L???????g.txt
\x90V\x82\xb5\x82\xa2\x83e\x83L\x83X\x83g \x83h\x83L\x83\x85\x83\x81\x83\x93\x83g.txt -> 新しいテキスト ドキュメント.txt
Rename? (y/n): y
Renamed

一括して変換したい場合は、以下のようにできます。

find dir/ -type f -exec perl rename_sjis2utf8.pl -ei {} \

本スクリプトの利用は自己責任で。確実にバックアップを取ってから行ってください。

投稿日:2019/06/18 22:18

タグ: Server 作業実績

Top

アーカイブ

タグ

作業実績 (9) Server (8) Linux (4) C++ (4) PHP (4) Webアプリ (4) laravel (3) EC-CUBE (2) JavaScript (2) Nginx (2) Vue.js (2) AWS (1) CreateJS (1) デモ (1) ネットワーク (1) 書籍 (1)

技術的な情報は以下にもあります。