SanshouSichimiYa

備忘録の為のブログ

SSLの基本の報告

図解で学ぶネットワークの基礎: SSL編を読んだ内容を書き留めます。

SSL通信

webブラウザのステータスバーに錠前マークが出ているとSSL通信をしている。

また、アドレスがhttps://...というURLだった場合にもSSL通信をしている状態。

機能と位置付け

機能は大きくわけて2つ

  • データの暗号化
  • 通信相手が信頼できることの確認(認証)

データの暗号化と信頼の確認

SSLはインターネット上でやり取りするデータの暗号化を行う。

個人情報やクレジットカードの情報などをインターネットでやり取りする際に、データが見られてしまってもわからなくするように暗号化をして途中で盗み見られる事を防止している。

サーバー証明書」を利用しての信頼性の確認

データを送るサーバーが信頼できるかどうかをクライアントがサーバーから「サーバー証明書」を受け取り、検証をすることによって信頼できるかどうかの判断ができる。

SSLの通信全体から見た立ち位置

SSLはWebブラウザとTCPの間に位置する。

通信の流れは以下のようになる。

  1. Webブラウザがhttps://...宛のサーバーにデータを送る
  2. WebブラウザはTCPでは無くSSLにデータを渡す
  3. SSLはブラウザから受け取ったデータを暗号化してTCPへ渡す
  4. 暗号化データを受け取ったTCPはパケットに443port宛と明記する
  5. このデータがIP、イーサネットとわたって回線上に送り出される

※受信時は送信時の流れとは逆になる

SSLの概要

共通鍵暗号」「公開鍵暗号

SSLは「共通鍵暗号」と「公開鍵暗号」の2つの暗号方式を使う

共通鍵暗号」方式

  • 暗号化と復号に同じ鍵を使う
  • 暗号化と復号の処理が軽い
  • 送信側と受信側があらかじめ同じ鍵をもっていなければならない
  • 通信相手を特定していないインターネット通信で同じ鍵を事前に持つことが不可能
  • 鍵をやりとりする際に盗まれる可能性がある

公開鍵暗号」方式

  • 公開鍵と秘密鍵のペアの鍵を使う
  • 片方の鍵で暗号化したデータは、ペアの鍵でしか復号できない
  • 片方の鍵をインターネットで公開してももう片方の鍵を秘密にしておけば安全にデータを送れる

公開鍵暗号」で「共通鍵」を安全におくる

ふたつを組み合わせた通信のやりとりがSSL通信の概要である。

  1. クライアントがサーバーにSSL通信の要求を送る
  2. サーバーは自身の公開鍵が入った証明書をクライアントに返信
  3. クライアントはサーバーの公開鍵を使って共通鍵を暗号化してサーバーに送る
  4. 共通鍵を使ってクライアントとサーバーは本来の目的であるデータの暗号化/復号を高速・軽量に処理できるようになる

SSLの全貌

2つの仕様で構成

SSLで運ぶメッセージはレコードと呼ばれている。

  • レコード・プロトコル :メッセージフォーマット
  • ハンドシェーク・プロトコル :メッセージを使って暗号通信を実現するまでの手順

レコード・プロトコル

  • レコードの構成するそのもの
  • レコードはヘッダー部分とデータ部分に分かれている
  • データ部分にハンドシェーク・プロトコルが入る

ハンドシェーク・プロトコル

  • データ部分に入る
  • メッセージや、暗号通信時の暗号化データが入る
  • 暗号通信をするにあたっての必要な情報をやりとりする際に使われる
  • ここのメッセージは種類が決まっている
    • ClientHello
    • ServerHello

一般的なやりとり

以下のやりとりを行い、それ以降はクライアントとサーバーは共通鍵を使って暗号化通信を実施する

  1. 暗号通信時に使う暗号方式を決める
    • クライアントがサーバーに暗号通信で使う暗号通信方式などを提案する
      • 暗号方式だけでなく,サーバー認証の方式,鍵交換の方式,ハッシュ関数の種類など
    • サーバーは提案のあった方式から適切なものを選択して返答する
  2. Certificateメッセージの利用
  3. ClientKeyExchangeメッセージの送信
    • クライアントは入手したサーバー証明書からサーバーの公開鍵を取り出す
    • クライアントは公開鍵使って暗号通信に使う共通鍵の基になる秘密の値(プレマスタ・シークレット)を暗号化して送信する
      • 実際のSSL通信において、共通鍵を直接やりとりするのではなく、共有鍵の基になるプレマスタ/シークレットをやりとりし、そこからクライアントとサーバーが互いに共通鍵を生成する仕組み
  4. ハンドシェーク終了
    • クライアントはこれまで決めた暗号方式の採用を宣言し、ハンドシェークの終了をサーバーに知らせる
    • サーバーの動作もクライアントと同様にハンドシェークの終了をクライアントに知らせる
    • ハンドシェーク終了

通信相手のサーバーが信頼できるかの検証

証明書の「署名」

サーバー証明書はサーバーの管理者が「認証局」に申請して発行してもらう。

サーバー証明書の中にある情報

  • サーバー運営者の組織名
  • 認証局の組織名
  • 証明書の有効期限
  • サーバーの公開鍵
  • 認証局の署名
    • 署名は、証明書の内容をハッシュした値を認証局秘密鍵で暗号化したデータ

認証局の信頼性の判断

  1. ルート認証局の証明書の取得
    1. サーバー証明書と同時に署名を施した認証局の証明書もクライアントに送られる
    2. 認証局が他の認証局から署名を受けていた場合はさらにその署名を受けた認証局の証明書も送られる
    3. 最終的に一番上位に位置する「ルート認証局」の証明書が必ず送られる
  2. ルート認証局の確認
    1. PCにあらかじめインストールされている信頼できるルート認証局の証明書によって判断する

本日の学習 (2016年08月20日(土))

本日、こちらでは最高気温が35°です。

さらに雨も降りますので雷も発生することでしょう。

vi

viの基本

チュートリアルやります。

iTermやTerminalで以下のコマンドでチュートリアルが起動します。

$ vimtutor

f:id:sanshou-shichimi:20160820102453p:plain

Linux

UNIXLinuxとは

これ読みます。

Linuxは、現在、最も勢いのあるUNIXであると言えるだろう。Linuxは、世界中のボランティアが協力して開発を続けており、しくみ(ソースコード)は全て公開されており、GPLという規約の元で、誰でも自由に改変・再配布できる(そのようなソフトをオープンソース・ソフトという)。

Debianをインストールする

Parallelsvagrant の環境があったので、parallels/debian-8.5のボックスを持ってきて立ち上げ。

Discover Vagrant Boxes

f:id:sanshou-shichimi:20160820123056p:plain

Linuxのファイル操作の基本

これをやります。

※以下は個人的な備忘録で、コマンド・手順などを掲載しているわけではないので注意してください。

再入門 体で覚えるLinuxの基本

全体的な印象としてはシェル周りは以前に行った「黒い画面入門」と似ており、さらにあちらの方がとっつきやすいので、復習するならあっち。

ログインとログアウト

この「再入門」では「Linux」を,「カーネルやライブラリ,コマンドなどで構成されたOS」という意味で用います。特にカーネルを指す場合は,「Linuxカーネル」という言葉を用います。

言葉は正しく。

「マルチユーザー/マルチタスク」,「ファイル・システム」,「シェルと多様なコマンド群」,「X Window System」といったキーワードが挙げられます。

機能面の特徴。

ファイルの仕組みと操作法

別の言葉でファイル・システムを表現することもあります。それは,「ファイルを格納するために,特定のファイル・システムの格納形式に従って整備されたストレージ・デバイス」というものです。これは,ファイル・システムの機能よりも,ファイルの物理的な在りかに着目した表現だと言えるでしょう。

ファイル・システムについての表現。

ファイルの保護機能で大きな役割を果たすのが,パーミッションです。パーミッションは,アクセス権とも呼ばれることから分かるように,「だれがアクセスできるのか」を記した情報です。パーミッションはファイルが持つ属性情報の一つです。

マルチユーザーの為の保護機能。パーミッション

シェルの基本操作法

ユーザーがキーボードからコマンドライン*に入力したコマンドを解釈してその実行を制御するプログラムを,コマンド・インタプリタと言います。LinuxなどUNIX系OSで使われるコマンド・インタプリタ*1が,今回説明するシェルです。

シェルの簡単な説明(わかりやすいとは言っていない)。

標準入出力などにはデフォルトの割り当てがありますが,これをユーザーが自由に変更できます。これを「リダイレクション」(入出力の切り換え)と言います。 リダイレクション機能を利用するときには,メタキャラクタで指定します。

リダイレクションでよく利用しそうなメタキャラクタは以下。

  • < 標準入力の切り替え
  • > 標準出力の切り替え
  • >> 標準出力の切り替え(追加出力)

リダイレクションに類似した機能にパイプ(あるいはパイプライン)があります。パイプ機能とは,あるコマンドの標準出力と別のコマンドの標準入力を連結することです(図7[表示])。パイプのメタキャラクタは「|*7」です。パイプ機能は2つのコマンドの連結に限定されるわけではなく,3つ以上のコマンドを連結することもできます。

パイプ便利です。

シェル・スクリプト

シェル・スクリプトは,「対話形式でコマンドを実行するのと同じ手順を自動的に実行したい」場合によく利用されます。一連の処理の自動化ということでは,システムの起動時や各種設定,あるいはソフトのインストールなどでも,シェル・スクリプトが利用されています。

f:id:sanshou-shichimi:20160820230153p:plain

こんな感じで使う。実行には、sh.コマンドを利用。

システムに役立つコマンド 1 / 2
  • uname システム情報を表示
  • hostname ホスト名の設定と表示
  • uptime システムの連続稼働時間を表示
  • ps プロセスの表示
  • date 日付と時刻の表示、設定
  • whoami ユーザー名を表示
  • last 最近ログインしたユーザーリストを表示

aptの基本

別の投稿を参照

sudoの設定

こちらを参照

debianでsudoの設定

sshの基本

vagrant + parallels で立ち上げたサーバーに対して以下の事を行う。

  1. パスワード認証ログインを禁止にする
  2. rootでのログインを禁止にする
  3. Port22 でログインできない

f:id:sanshou-shichimi:20160821045121p:plain

Debian 8(jessie)をインストールするときのまとめ

SSLの基本

読みます。

図解で学ぶネットワークの基礎:SSL編

SSLが持つ機能は大きく二つある。「データの暗号化」と「通信相手が信頼できることの確認」(認証)

備忘録をこちらにまとめています。

mysqlの基本

立ち上げたサーバーに対してmysqlをインストールを行う。

終了

初めて触れたサーバーOSがCentOSだったのでそれをそのまま何も考えずに使っていました。

しかし、Linuxゲリラ戦記を読んで、これからはDebianを使っていってみよう。そう思いました。

おしまい

「aptの基本」の報告

パッケージシステムとは?

パッケージ管理システム -wiki

パッケージ管理システムとは、OSというひとつの環境で、各種のソフトウェアの導入と削除、そしてソフトウェア同士やライブラリとの依存関係を管理するシステムである。

APT

DebianではAPTというパッケージ管理システムを利用する。

APT -wiki

APT (Advanced Packaging Tool) は、Debian用に開発されたパッケージ管理システムである。dpkgのフロントエンドとして動作するように設計されたが、現在はRPMに対応するように移植されたapt-rpmもある。

基本的な使い方

例)vimのインストール

リポジトリの更新
$ sudo apt-get update

f:id:sanshou-shichimi:20160821010431p:plain

vimの検索
$ apt-cache search vim
vimの情報表示

vimのバージョンなど確認できる。

$ apt-cache show vim

f:id:sanshou-shichimi:20160821010241p:plain

vimのインストール
$ sudo apt-get install vim
vimの削除
$ sudo apt-get remove vim

moo

$ apt-get moo

f:id:sanshou-shichimi:20160821010806p:plain

Have you mooed today?

本日の学習 (2016年08月19日(金))

CSSの基本を学びます。

CSSの基本を理解

CODEPENを使って試してみると手軽でいいです。

ドットインストールCSS入門

動画で学習します。

ドットインストールCSS3入門

さらに動画で学習します。

CSS3がうまく動かない場合は、 Can I useを使ってチェック。

CSS3 Generator

色々なCSS試せます。試します。

[Flexbox Froggy]{http://flexboxfroggy.com}

ゲーム感覚でFLEXBOXの学習。

演習の実施

成果物: CSS TUTORIAL

演習を行った際に参照したサイトなど

終了

最後の演習ですごく時間がかかりました。一日中やってた気がします…。

作図する事が慣れておらず、試行錯誤で色々とググりながらやったのが時間がかかった一番の要因です。

おしまい

本日の学習 (2016年08月18日(木))

本日の天気は雨ですし。雨の日に外に出なくていいってのはそれだけでテンションあがります。

HTMLの基本を理解する

30分間HTML入門

よいHTMLを身につけます。

標準に従って文書の構造を示すように書かれたHTMLは、ブラウザの種類やバージョンに関係なく、常に正しく情報を伝えることができます。たとえ見かけ上の表現方法が変わっても、「見出し」や「段落」という構造表現の概念は変わることがないからです。大切な情報を息長く活用できるようにするためにも、ぜひ「よいHTML」を書くようにしてください。

ドットインストールHTML入門

ここで動画使って学習します。

リファレンス

リファレンスはちゃんと読むべきです。 課題とセットで調べつつマークアップしていったらびっくりするくらい勉強になりました。

終了

知識をアップデートしていなかったせいもあって学ぶことが多かったです。 特にリファレンスは重要だと認識しました。今までの自分は正しい使い方ができていたのか(いやできていない)が不安になりました。

本や色々なブログ読むより良いなぁという印象うけました。

おしまい

「本当は怖くない」"黒い画面"入門の作業報告

Terminalの基本を覚えるプラクティス

Terminalの基本を覚える為のプラクティスとしてWebデザイナーの為の「本当は怖くない」"黒い画面"入門シリーズを行った作業報告です。

打ち込んだり学んだり履歴的なもの

雑ですが備忘録として残しておきます。

ls コマンド

ファイルやディレクトリの一覧を表示

f:id:sanshou-shichimi:20160818033910p:plain

pwd コマンド

現在のディレクトリパスを表示

f:id:sanshou-shichimi:20160818033108p:plain

echo コマンド

引数として与えた文字を画面に表示

f:id:sanshou-shichimi:20160818033211p:plain

環境変数

PATH

PATHに設定されているディレクトリはディレクトリ名を省略して実行が可能。

lspwd/bin/ls/bin/pwdと入力しなくても良いのはこのPATHが設定してあるから。

設定されているPATHはecho $PATHで確認が可能

f:id:sanshou-shichimi:20160818033732p:plain

他の環境変数

PATH以外の環境変数envコマンドによって確認が可能

cd コマンド

引数に与えたディレクトリにワーキングディレクトリを変更する

f:id:sanshou-shichimi:20160818035023p:plain

引数とオプション

引数

コマンドに渡す文字列

f:id:sanshou-shichimi:20160818040152p:plain

オプション

ハイフンから始まっているものがオプション。

ls-aのオプションをつけるとドットファイルを含んだすべてのファイルを表示する。

f:id:sanshou-shichimi:20160818040500p:plain

man コマンド

マニュアルを見る。

-hなどのヘルプは簡易的なもの。

cURL コマンド

ファイルをダウンロードできる。 オプション-oでファイル名を指定して保存する。

f:id:sanshou-shichimi:20160818041823p:plain

open コマンド

開くコマンド。 $open .は現在のディレクトリをFinderで開く

f:id:sanshou-shichimi:20160818041832p:plain

ファイル操作の基本

touch コマンド

ファイルの作成

mkdir コマンド

ディレクトリの作成 -pオプションを使うと階層を持つディレクトリを作成することができる

cp コマンド

ファイルのコピー -rオプションでディレクトリごとコピー

mv コマンド

ファイルの移動

rm コマンド

ファイルの削除 -rオプションでディレクトリごと削除

cat コマンド

ファイルの中身を表示する

作業の自動化

ファイルにコマンドを羅列し、shコマンドで実行が可能

このコマンドが羅列されたファイルをScriptという

f:id:sanshou-shichimi:20160818050948p:plain

終了

打ち込んだコマンドを羅列していこうと思ってましたけど、そんなコマンドだけの説明ではなかったので履歴的な部分の構成を変更しないといけないなぁと思いつつ結局変更せずでした。

おしまい

256 INTERNS開始しました。

今回、合同会社フィヨルドさまの提供している256 INTERNSにリモートインターンとして参加しました。

256 INTERNS って?

学習とインターンがミックスされ、それがリモートやローカルで提供されているものです。

参加者は学習しつつ実践の場が与えられています。

詳しくはこちらを見るとわかります。

参加経緯

名古屋でもくもくとRubyだったりRailsを学習しながら身近な案件に投入してたんですが、正直ツラくなってきた為です。

ツラくなってきた主な理由は以下です。

僕がツラくなってきた理由

  1. どのレベルでどこまでの範囲を習得すればいいのかわからなくて不安
  2. 相談する人がいないので、ググってなんとか解決するけど本当にこれでいいか不安
  3. その場しのぎで、なんだか汚いコードになっても誰にも怒られないし苦言も呈されないのでそのままになるけどどう考えてもヤバイ
  4. そもそも使う案件が少なく、実践の機会が少ないので不満
  5. 寂しい

お盆のまっただ中にそんなことを思いながらネットサーフィンしてましたら、合同会社フィヨルドさまの提供しているリモートインターンにたどり着き、即日申し込みをしました。 そして現在に至ります。

このブログは何?

日々のインターンの記録を残すものです。

日々書きます。