たけぼーの備忘録

暇を持て余した人間の無意味なブログ

海外で人気なおしゃれで無料のHTMLテンプレートを20集めた

こんにちは!今日は海外で人気のHTMLテンプレートをご紹介します。

  • はじめに
  • おすすめHTMLテンプレート
    • Box Portfolio
      • ダウンロード
      • デモ
    • Multiverse
      • ダウンロード&デモ
    • Snow
      • ダウンロード
      • デモ
    • THOMSOON
      • ダウンロード
      • デモ
    • Spectral
      • ダウンロード&デモ
    • Snapshot
      • ダウンロード&デモ
    • Mobirize
      • ダウンロード
      • デモ
    • Mobile App Template
      • ダウンロード
      • デモ
    • Present
      • ダウンロード&デモ
    • Radius
      • ダウンロード&デモ
    • Xenon
      • ダウンロード
      • デモ
    • Circle
      • ダウンロード
      • デモ
    • Visualize
      • ダウンロード&デモ
    • Squadfree
      • ダウンロード&デモ
    • AdminLTE 2
      • ダウンロード
      • デモ
    • Crafty
      • ダウンロード
      • デモ
    • Treviso
      • ダウンロード
      • デモ
    • Dimension
      • ダウンロード&デモ
    • Dance Whirl
      • ダウンロード
      • デモ
    • Sonic
      • ダウンロード
      • デモ
  • 最後に
続きを読む

おしゃれなギャラリーが作れるCMS「Lychee」を使ってみた

Photo Gallery
こんにちは。今日はWebの話題です。

みなさん、CMSってご存じですか?

Contents Management Systemの略で、htmlを直接編集することなく、ブログやホームページが作れるシステムのことです。
世界中で広く利用されている「WordPress」は、このCMSの一種です。

WordPressなら、ブログを書くときにいちいちhtmlをまるごと制作する、なんてことはないですよね?
これがCMSの特徴です。

CMSは、WordPress以外にもDrupalConcrete5など様々な種類があります。
余談ですが、個人的にはConcrete5が使いやすくて好きだったりします。

今日は、このCMSの中から「Lychee」をご紹介します。

Lycheeとは

タイトルに合ったようにLycheeはギャラリーを作るためのものです。

ギャラリーとは、写真を一覧で表示して、画像をクリックすると拡大される、といった機能を持つものです。
スマホの中にも写真を見るためのギャラリーアプリが入っていますよね。

写真をメインで扱うようなサイトでは、なるべく使いやすく、きれいに見せたいところですよね。
そんな望みを叶えてくれるのが、Lycheeです。

WordPressプラグインをいれてギャラリーを作ってもいいのですが、そうすると大掛かりなシステムになりますよね。
ちょっと写真が見れるサイトを作りたいんだ、なんて時には面倒だったりします。

ということで、Lycheeが活用されるのです。

lychee.electerious.com

Lycheeは、主にPHPjavascriptで構成されており、写真の管理にMySQLが必要です。
WordPressがインストールできるサーバーであれば、Lycheeもインストール可能です。

インストール手順はとても簡単です。
まず、Lycheeのgithubにアクセスし、ファイルをダウンロードします。
git cloneしても構いません。
github.com

このファイルを解凍し、インストールしたいディレクトリに配置して、その場所にアクセスします。

あとは画面に従って、MySQLのユーザー名やパスワードなど必要な情報を入力し、管理者用パスワードを設定すれば完了です。

詳しい利用方法は、READMEの中に書かれています。
直感的に使い方がわかるので、迷うこともないと思います。

Lycheeの良い点・悪い点

Lycheeの良いところは、シンプルさと美しさです。

ギャラリーを作るCMSは、レイアウトが残念で全近代的なビジュアルだったりしますが、Lycheeは黒を基調としたシンプルなデザインです。
また、それでいて必要な機能はしっかり備わっています。
写真を一括でzipにしてダウンロードしたり、写真1枚1枚を全画面表示したり、名前を変更したり共有したり。
さらにはパスワードによって写真を保護する、なんてこともできます。
基本的な機能は揃っていて、便利です。

今まで3日ほど私が使ってきて困ったことがいくつかありました。
まず、パスワード保護に関するものです。
パスワードによって写真を保護している場合、フォルダ内の写真を見るたびにパスワードを求められることがあります。
写真を1枚見るごとにパスワードを求められ、非常に面倒でした。

この原因はchromeのパスワード保存機能が原因でした。
管理者用のアカウント情報をchromeに記憶させていたことで、このような面倒な現象が起こるようです。

また、写真の一括ダウンロードですが、写真の数が多くなるとうまく動かなくなりました。

原因は、zipファイルの送信にありました。
一括ダウンロードでは、毎回phpにてzipファイルの作成が行われ、そのまま送信されるのですが、これがファイルサイズを考慮しない作りとなっているようです。
サーバーのメモリ不足によって転送ができなくなるようです。

php/Module/Album.php内のgetArchive()を以下のように編集すると直りました。

<?php
public function getArchive() {

	// Check dependencies
	Validator::required(isset($this->albumIDs), __METHOD__);

	// Call plugins
	Plugins::get()->activate(__METHOD__, 0, func_get_args());
	// Illicit chars
	$badChars =	array_merge(
		array_map('chr', range(0,31)),
		array("<", ">", ":", '"', "/", "\\", "|", "?", "*")
	);

	// Photos query
	switch($this->albumIDs) {
		case 's':
			$photos   = Database::prepare(Database::get(), 'SELECT title, url FROM ? WHERE public = 1', array(LYCHEE_TABLE_PHOTOS));
			$zipTitle = 'Public';
			break;
		case 'f':
			$photos   = Database::prepare(Database::get(), 'SELECT title, url FROM ? WHERE star = 1', array(LYCHEE_TABLE_PHOTOS));
			$zipTitle = 'Starred';
			break;
		case 'r':
			$photos   = Database::prepare(Database::get(), 'SELECT title, url FROM ? WHERE LEFT(id, 10) >= unix_timestamp(DATE_SUB(NOW(), INTERVAL 1 DAY)) GROUP BY checksum', array(LYCHEE_TABLE_PHOTOS));
			$zipTitle = 'Recent';
			break;
		default:
			$photos   = Database::prepare(Database::get(), "SELECT title, url FROM ? WHERE album = '?'", array(LYCHEE_TABLE_PHOTOS, $this->albumIDs));
			$zipTitle = 'Unsorted';
	}
	// Get title from database when album is not a SmartAlbum
	if ($this->albumIDs!=0&&is_numeric($this->albumIDs)) {

		$query = Database::prepare(Database::get(), "SELECT title FROM ? WHERE id = '?' LIMIT 1", array(LYCHEE_TABLE_ALBUMS, $this->albumIDs));
		$album = Database::execute(Database::get(), $query, __METHOD__, __LINE__);

		if ($album===false) return false;
	
		// Get album object
		$album = $album->fetch_object();

		// Album not found?
		if ($album===null) {
			Log::error(Database::get(), __METHOD__, __LINE__, 'Could not find specified album');
			return false;
		}

		// Set title
		$zipTitle = $album->title;

	}

	// Escape title
	$zipTitle = str_replace($badChars, '', $zipTitle);

	$filename = LYCHEE_DATA . $zipTitle . '.zip';
		
	// Create zip
	$zip = new ZipArchive();
	if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
		Log::error(Database::get(), __METHOD__, __LINE__, 'Could not create ZipArchive');
		return false;
	}

	// Execute query
	$photos = Database::execute(Database::get(), $photos, __METHOD__, __LINE__);

	// Check if album empty
	if ($photos->num_rows==0) {
		Log::error(Database::get(), __METHOD__, __LINE__, 'Could not create ZipArchive without images');
		return false;
	}

	// Parse each path
	$files = array();
	while ($photo = $photos->fetch_object()) {

		// Parse url
		$photo->url = LYCHEE_UPLOADS_BIG . $photo->url;

		// Parse title
		$photo->title = str_replace($badChars, '', $photo->title);
		if (!isset($photo->title)||$photo->title==='') $photo->title = 'Untitled';

		// Check if readable
		if (!@is_readable($photo->url)) continue;

		// Get extension of image
		$extension = getExtension($photo->url, false);

		// Set title for photo
		$zipFileName = $zipTitle . '/' . $photo->title . $extension;

		// Check for duplicates
		
		if (!empty($files)) {
			$i = 1;
			while (in_array($zipFileName, $files)) {
				// Set new title for photo
				$zipFileName = $zipTitle . '/' . $photo->title . '-' . $i . $extension;

				$i++;

			}
		}

		// Add to array
		$files[] = $zipFileName;

		// Add photo to zip
		$zip->addFile($photo->url, $zipFileName);

	}
	// Finish zip
	$zip->close();

	// Send zip
	header("Content-Type: application/zip");
	header("Content-Disposition: attachment; filename=\"$zipTitle.zip\"");
	header("Content-Length: " . filesize($filename));

	//変更ここから
	while (ob_get_level() > 0) {
		ob_end_clean();
	}
	ob_start();

	$file = fopen($filename, 'rb');
	if(!$file) {
		exit;
	}
	while(!feof($file) and (connection_status() == 0)) {
		 echo fread($file, '1048576'); 
		 ob_flush();
		
	  }
	ob_flush();
	ob_end_clean();
	//変更ここまで

	// Delete zip
	unlink($filename);

	// Call plugins
	Plugins::get()->activate(__METHOD__, 1, func_get_args());

	return true;

}

こちらの記事を参考にさせていただきました。ありがとうございます。
every-rating.com

最後に

いかがでしょうか。不具合が多々あるので、実用可能ではないかもしれませんが、おしゃれで使い勝手がいいので、一度使ってみてはいかがでしょうか。

ではまた。

Androidでデータベースの作成・更新中にProgressDialogを表示する

こんにちは。
今日は久しぶりにAndroidネタです。

開発中のアプリでSQLiteを使ったデータベースを使用しているのですが、今回そのデータベースの構造自体を大きく変更する必要が出てきました。

データベースの変更には少し時間がかかる上に、その間にどこか別の場所をタップされたりなんかしたら非常に面倒です。

ということで、この更新処理中にProgressDialogを表示させることにしました。

意外と手間取りましたので、メモしておきます。

ProgressDialogとは

ProgressDialogというのは、これです。
f:id:takebo_blog:20170811172139p:plain
上の画像では少しわかりづらいですが、左にはスピナー、右にはメッセージが表示されるダイアログです。

みなさんも、どこかでご覧になったことがあると思います。
よくデータを取得するときなんかに表示されたりしますよね。

今回は、これをデータベースの準備中に表示させようと思います。

実装

実装方法は非常にシンプル。
DatabaseHelperの中に、AsyncTaskを盛り込むだけです。

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {

    private Context appContext;
    private int oldVersion,newVersion;

    public DatabaseHelper(Context context){
        super(context,"database.db",null,2);
        this.appContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL("テーブルの作成処理をここへ");
        db.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        this.oldVersion = oldVersion;
        this.newVersion = newVersion;
        new updateDB().execute(db);
    }

    public class updateDB extends AsyncTask<SQLiteDatabase,Void,Integer>{
        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            progressDialog = ProgressDialog.show(appContext,"データを更新中","この処理には少し時間がかかる場合があります");
        }

        @Override
        protected Integer doInBackground(SQLiteDatabase... params) {
            SQLiteDatabase db = params[0];
            //データベースの更新処理
            if(oldVersion == 1 && newVersion == 2) {
                db.execSQL("更新処理をここへ");
            }
            db.close();
            return 1;
        }

        @Override
        protected void onPostExecute(Integer result){
            progressDialog.dismiss();
            super.onPostExecute(result);
        }
    }
}

非同期処理の中にデータベースの更新処理を入れることで、ダイアログを表示しながら処理ができるようになります。
非同期処理を呼び出す際には、updateDB().execute()を使用します。

ポイントは、doInBackgroundの引数です。
execute()の引数がdoInBackgroundのparamsに配列として渡されます。

そのため、今回は変数dbをparams[0]に格納して受け渡ししています。

最後に

まとめてみると、とても簡単ですね。
ではまた。

Let's Encryptとはなにか、について調べる

lets-encrypt
こんにちは。ご無沙汰しております。

本業の方が大変忙しく、最近更新できておりませんでしたが、今日は張り切っていきたいと思います!

今日の話題は、Let's Encryptです。
こちらのブログでもたびたび話題にして参りました。

Let's Encryptは何者なのか

最近、ふと思ったんです。Let's Encryptって何者!?

皆さんの中にも私のように、不思議に思われている方もいらっしゃるのではないでしょうか。

ん?Let's Encryptって何?という方もいらっしゃると思いますので、簡単に説明しておきます。もう分かってるよ、という方は読み飛ばしてください。すでに理解されている方は、そもそもこちらの記事なんか読まないかもしれませんが(笑)

Let's Encryptとは

Let's Encryptは、無料SSL証明書を取得することが出来るサービスです。

そもそもSSL証明書って?

SSL証明書とは、httpsでの通信を可能にするために必要なものです。

URLがhttps:// で始まるホームページはご覧になったこと、ありませんか?
Chromehttpsのサイトにアクセスすると、アドレスバーの左端に緑の鍵マークが現れます。
https

httpsSSLという暗号化技術によって、データのやりとりを暗号化するものです。

そう、SSL証明書SSLは、暗号化技術の名称を表していたんです。

例えるなら、SSL証明書運転免許証のようなものです。

運転免許証を持っている人は、しっかりとした運転技術を持っていると認められた人ですから、車が運転することを許可されたわけです。
さらに公的に発行された信頼度のあるものですから、身分証明にも使われますよね。

SSL証明書もこれに似たような機能を持っています。
暗号化を行うためには、と呼ばれる情報が必要です。
SSL証明書は、この鍵にあたる情報が含まれているため、ブラウザがこの鍵を使って暗号化を行うことが出来るようになります。

SSL証明書があって初めて暗号化することができる、というところが運転免許証と似ていますね。

さらに、SSLは相手の保証を行うものでもあります。
通信相手が実在することを、公的に信頼された機関が確認し、保証してくれます。
これがあるので、利用者は安心して暗号化できるわけです。

身元を保証する、というところが運転免許証と似ています。

一般的に、SSL証明書有料です。企業などで使われているものは、何万単位の費用がかかる高級(?)なものです。

無料で手に入る証明書

無料でこれを手に入れようと思うと、主に手段は主に

の2つがあります。

オレオレ証明書とはなにか

オレオレ証明書というのは、自分で作成した証明書のことです。

本来、専門の機関によって発行されるべき証明書を自分で生み出すわけですから、当然費用はかかりません。
しかし逆に、自作した証明書ということは、公的な機関から認証を受けない、ということになります。よって、この証明書に対しての信頼度は低くなるです。

ですから、ブラウザを通してオレオレ証明書を使ったサイトにアクセスすると、デカデカと警告が出てしまいます
このサイト、危険なんじゃない?という警告です。だって、誰かよく分からない鍵を暗号化に使ってるんですから。

そんなサイトにアクセスしますか?私ならしないでしょうね(笑)

なぜオレオレ証明書が必要なのか

では、なぜオレオレ証明書なるものが存在するかと言いますと、そもそも証明書がなければhttpsで通信できないからです。

これは先ほど説明したとおり、鍵が必ず必要だからです。
逆に、証明書さえあればhttpsで通信できます。

オレオレ証明書なら、通信する相手を保証してもらうことはできないけど、とにかく暗号化通信が始められるわけです。
昔は公的な機関から発行される証明書は有料のものしかなかったため、お金をかけずにとにかく暗号化するために、これが使われていました。

ここまでの話でお分かりの通り、オレオレ証明書は一般向けのサイトには向きません。だって、警告が出てしまいますから。
しかし、社内ネットワークで暗号化通信したい場合など、相手がすでに分かっていて保証の必要がない場合では、これで十分です。ブラウザを通さずにhttpsにて通信する場合もそうですね。

Let'sEncryptとは?

それに対して、Let'sEncryptとはなんでしょうか。

Let's Encryptにて提供されるのは、秘密鍵証明書中間証明書の3種類で、公的に信頼度のある証明書です。
これが無料で取得できるんです。

では、Let's Encryptとオレオレ証明書はどう違うのでしょうか。
ずばり、これは誰が発行するか、です。

オレオレ証明書が個人が勝手に発行したものであるのに対して、Let's Encryptはしっかりとした第三者機関によって発行されています。
これにより証明書に対する信頼度が格段に違うため、Let's Encryptで発行された証明書を使うと、無料でありながらブラウザで警告がでることなくhttpsで通信できるのです。

Let's Encryptは何者なのか

ここまで書いてまいりましたが、私はこんな疑問を抱いていました。

  • どこが発行しているのか
  • なぜ無料なのか
  • どのような仕組みなのか
  • 今後なくなることはないのか
  • 誰でも発行できれば、サイトの信頼性を保証できないのではないか

ここからは、これらの疑問を一つ一つ解決していく形で、書き進めていきます。

Q1.どこが発行しているのか

一体どこが発行しているのでしょうか。
かなりの普及を見せているLet'sEncryptですから、発行元が怪しいところではないと思われますが、気になります。

なぜこんなに信頼されているのでしょうか。

A1.ISRGという非営利団体がサービスを提供している

では、ここでLet'sEncryptの公式ページを見てみましょう。

うわ、英語かよ!となった方、大丈夫ですよ!
非公式ですが、Let'sEncryptについてまとめている日本語サイトがあります。

こちらのLet'sEncryptについて、から少し引用させてもらいます。

非営利団体の ISRG (Internet Security Research Group) が運営しており、シスコ(Cisco Systems)、Akamai電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let's Encrypt を支援しています。

これによると、ISRGという機関が運営しているようです。
調べてみると、ISRGというのはアメリカにある公益法人で、経済的・技術的・教育的な面でインターネット上での安全な通信を行う障壁を減らすことを目的としているようです。

firefoxの開発で有名なmozillaやサーバーなどの製品やサービスを手がけるCisco情報理論を確立した学者シャノンの出身校であるミシガン大学などの関係者が役員をつとめています。

さらにISRGは、先ほど紹介したmozillaCisco、さらにはfacebookchromeWordpress.comを運営するautomatticや日本でも利用者の多いJimdoなど、様々な企業や団体がスポンサーとなっています。

このスポンサーを見ると、ネット業界で名を馳せたサービスや商品のプロバイダばかりです。chromemozillaが関わっているとなると、信頼度が違いますね。

だからLet'sEncryptは信頼されているのです。逆にブラウザ側からすれば、自分たちがお金を出しているところから発行されているから、信用するといったところでしょうか。

Q2.なぜ無料なのか

無料の理由、これが気になります。どうして無料なのでしょうか。
もしかして、有料サービスのお試しとか?なんて思ってしまいます。

先ほどのISRGのスポンサーを見ていると、有料サービスのお試し、ということはなさそうですが…

A2.非営利団体が運営する全自動認証のSSL証明書だから

では、先ほどのLet'sEncrypt日本語サイトを見てみましょう。

Let's Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLSHTTPSTLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。

ここが、無料である一つの理由です。

Let'sEncryptの手続きはすべて自動で認証されています。
つまり、人の手が関わっていないわけです。
ですから、運営にかかる費用がうんと低くなるわけです。

さらに運営元のISRGは非営利団体ですから、元からお金を取る気はありません。

こんな理由で、無料で利用できるわけです。
役員のメンバーやスポンサーを見た限り、今後も有料化することはないでしょう。

先ほど、非営利団体が運営する全自動認証のSSL証明書だから無料なのだ、と書きましたが、私はその奥に別の理由もあるのではないかと思っています。

発行を行うISRGの出資元は、ほとんどが企業ですから、なにか目的があって出資するのだと思います。

例えば、chromeの開発元であるgoogleは、常時SSLを推奨しています。
これはサイトがハッキングされ、マルウェアに感染することを防ぎたいと考えているようです。これらのマルウェアに汚染されたサイトが、自分達のサービスに悪影響を与えるかもしれませんから。

しかし、有料の証明書しかなければ、金銭的な理由からなかなか常時SSLのサイトは増えません。
個人でやるブログなんかは、あまり常時SSLにする必要性を感じにくいですから。

ですから、常時SSLの普及にはLet'sEncryptのようなサービスが欠かせないわけですね。

このように、様々な企業や団体の思惑が重なった結果として、Let'sEncryptという無料のサービスが出来上がったわけです。

こんな理由もあるのではないかな、と私は思います。

Q3.どのような仕組みなのか

先ほど、自動化という出てきましたが、どのようにして証明書の発行を行うのでしょうか。

人力の発行ではない、ということは何となくお分かりいただけているのでは、と思います。

A3.クライアントソフトと認証局が発行を自動化している

Let'sEncryptにおける認証方法

認証には、独自のクライアントソフトを使って行います。

このクライアントソフトはcertbotと呼ばれ、多くのLinuxディストリビューションmacOS版が公開されています。
残念ながらWindows版のcertbotはないので、ほかのツールを使うか、最近Windowsで利用可能となったbashを使うこととなります。

取得したいドメインを本当に証明するために、Let'sEncryptには主に2種類の認証方法が用意されています。それは

  • ドメインDNSレコードに指定されたレコードが存在するか
  • 指定されたURLに認証用ファイルが存在するか

の2つです。

DNSでの認証では、_acme-challenge.(自分のドメイン名)に指定されたTXTレコードを設定します。
これを行うためには、DNSを自分で設定できる環境でなければならず、レンタルサーバーでは実現出来ないことが多々あります。

ファイルにて認証する場合、指定されたパスに指定されたファイルを置き、それを確認するというものです。
これは多くの方が実行可能でしょう。ホームページを運営しているなら、ファイルをアップできない、なんてことはあり得ませんから。

しかし、メールサーバーなどではこれは可能でないかもしれません。そんなときはDNS認証を行います。

認証を行う仕組み - ACME

認証の仕組みは少し専門用語が多くなります。暗号化に対する基礎知識がないと厳しいかもしれません。

でも大丈夫です。認証の仕組みを知らなくてもちゃんと使えるようになっています!

認証には、ACMEという通信プロトコルにて、クライアントソフトと認証局とのやりとりが行われます。

まず、クライアントソフトは認証してほしいドメイン認証局に通知します。

認証局はその通知に対して、認証に必要な情報をクライアントソフトに送ります。
ここで送られる情報は、認証用の番号認証用ファイルで、認証局によって自動的に生成されます。
認証用ファイルは、先ほど説明したファイル認証でサーバーにアップロードする為のもので、DNS認証の場合にはファイルの代わりに登録すべきDNSレコードが送られます。

クライアント側は認証に必要な設定(ファイル認証なら指定のパスにファイルをアップロードする)を行った後、認証のための準備ができたことを認証局に通知します。
このとき同時に、先ほど送られた認証用番号をクライアントソフトが生成した秘密鍵で署名し、公開鍵とともに認証局へ送ります。

認証局が認証に必要な設定がされたかを確認し、またクライアントソフトから送られてきた認証用番号の確認を行います。

すべて確認が終了すると、正式に認証されたことがクライアントソフトに通知されます。

この一連の流れで認証が自動で行われます。私たちが直接行わなければならないのはクライアントソフトの実行認証のための設定のみです。
認証自体の仕組みについては理解する必要はありません。

一度証明書が発行されたら、更新するのは簡単で、認証作業は必要ありません。

こちらが大変わかりやすく、参考になりました。詳しくは公式ページにも書かれています。

Q4.今後なくなることはないのか

Webサービスは、突如開発が中止されることはよくあります。

また、どこかの企業に吸収されてしまう、ということもしばしばです。

急に有料化してしまったら、httpsに対応させたものをわざわざhttpに戻さないといけないかもしれません。

それは非常に面倒ですよね。

では、無くなることはないのでしょうか。

A4.無くならない可能性が高い

正直なところ、Let'sEncryptが今後なくなる可能性はないとは言えません

しかし、googleSSLに対応しているかどうかを検索順位に考慮する、と発表するように、httpsの利用はさらに重視され普及が進むと思います。

ISRGが掲げる理念を基に考えると、この団体に金銭的な問題が起こらない限り、Let'sEncryptは無くならないでしょう。

スポンサーを見ると、主要なブラウザを開発する団体が資金提供を行っていますから、金銭的問題も起こりにくいのではないでしょうか。

つまり、Let'sEncryptが急になくなるとは考えにくいように思います。

Q5.誰でも発行できれば、サイトの信頼性を保証できないのではないか

最後の疑問となりました。
いろいろ調べていて、ふと思いました。

誰もが証明書を取得できたら、信頼性のある証明書では無いのではないでしょうか。

例えば、詐欺を行おうとする人であっても取得できるわけですから、サイトに対する信頼性を証明することが出来ないのではないか、と。

しかし、ここに私の思い違いがありました。

A5.サイト自体の信頼性を保証するSSL証明書は種類が別

SSL証明書httpsによって通信するためのツールであって、サイト自体の安全性を必ずしも保証するものではないのです。

私自身、『SSL証明書 = 安全性を保証する』という感覚を持っていましたが、実際にはそうとは限りません。

こちらにその事が丁寧に書かれています。

このページから引用すると、

SSL/TLSサーバ証明書には「ドメイン認証」「企業実在認証」「Extended Validation(EV)」の3種類が存在します。ドメイン認証は最も手軽な反面、ドメインの使用権のみを認証する証明書しか発行できません。組織の実在認証をするためには「企業実在認証」、「EV」を導入する必要があります。また企業実在認証もドメインの使用権と組織の法的実在の認証は可能ですが、それ以上の「組織の物理的実在」「組織の運営」などのより高度な認証を行うにはEVの導入が必要です。

と書かれています。

ここで書かれているように、企業実在認証EVでなければちゃんとした通信相手なのかを保証することはできないということです。

Let'sEncryptはドメイン認証を行うだけですから、ドメインが存在することを証明しただけですから、相手がどうであるかは証明されていないのです。

しかし、ブラウザでは緑の鍵マークがでて、いかにも安全です、という印象を与えます。

これでは、もし詐欺サイトで使われていた場合、間違った印象を与えるでしょう。

私はこれがLet'sEncryptの欠点なのではないかと思います。

証明書が有料であった昔は、証明書が安全の証のようになっていましたが、これを改める時が来たのかもしれません。

最後に

長々と書いてまいりましたが、いかがだったでしょうか。

Let'sEncryptは大変素晴らしいサービスですので、皆さんにぜひぜひ使っていただきたいです。

ではまた。

会員制の動画共有サイトの構築した

f:id:takebo_blog:20170706074140j:plain

こんにちは。
今日は、会員制Webページの構築についてです。

まずは、構築したきっかけから。
お急ぎの方は読み飛ばして下さい。

  • とある日の会話にて
  • 会員向けサイトの仕様
    • ①サーバーは有料のサーバーで、十分なスペック
    • ②ログイン機能にて、会員以外は見れないようにする
    • ③ユーザー名とパスワードは事前に個々に送信し、全ユーザー共通
    • ④ユーザーの新規登録は必要ない
    • ⑤ホームビデオを共有
    • SSLによるセキュリティ対策
  • 参考にしたサイト
    • テンプレート
      • ログイン画面
      • メインページ
    • ログイン機能の実装
    • 動画のプレイヤー
  • 最後に

とある日の会話にて

ある日、こんなことを言われました。

依頼主『君はプログラミングできるから、ホームページ作れるよね。』

自分『はい?簡単そうに言いますけどそれは…』

依頼主『ホームページは会員だけが見られるようなもので、セキュリティは万全にしといてね。』

自分(もう断る雰囲気じゃないじゃん…)


みなさん、こんな無茶ぶりされたことありませんか!?笑
私はありましたよ、つい最近。

プログラミングできるから、ホームページも作れるって…

その理論でいくとプログラマー全員がホームページ作れて、Webデザイナーが仕事を失うことになるんですよ!

というツッコミを入れたいところですが、いつもお世話になってる方なので断れません。

ということで、はじめて会員サイトを作ってみました。

続きを読む

無料で使えるHTMLテンプレートサイト『HTML5 UP』が素晴らしい

f:id:takebo_blog:20170705100017p:plain
こんにちは。今日はHTMLのテンプレートについてです。

手軽で良いものが作れる『テンプレート』

こんなことってありませんか?

  • 見た目の良いページを作りたいけど、時間がない!
  • HTMLやCSSなどの知識がない

Web屋ではない人がホームを一から作るのはとても大変ですよね。

こんなとき、ホームページ制作に一役買ってくれるのが、テンプレートです。

テンプレートなら少しの知識でとても見た目の良いホームページを作れます。

今回は、スタイリッシュで使いやすいテンプレートがたくさんある、HTML5UPというサイトをご紹介します。

続きを読む

Javaから見たSwiftとの違い ~自作関数編~

こんにちは。
今日は、前回に続きSwiftネタです。

Javaを使ってた人がSwiftを使うと困るときあるよねー、というシリーズです。

前回の記事はこちら。
for文について書きました。

今回は、自作関数についての諸々です。

続きを読む