• 日本語
    • English (英語)
Avinton JapanAvinton JapanAvinton JapanAvinton Japan
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ

Certbotを使ってSSL証明書を発行し、HTTP通信を暗号化しよう

  • ルーティング
  • データベースの命名規則
  • 三目並べ – 2.〇×を交互にゲーム盤に入るようにしよう
  • 三目並べ – 3.勝敗がつくようにしよう
  • クリーンコード(Clean Code)
  • 三目並べ – 4.「スタート」「リセット」ボタンをつけよう
  • 三目並べ – 5.先攻後攻を決めて、コンピュータ対戦にしよう(前編)
  • インフラストラクチャー(サーバー、コンポーネント、RAID)
  • 機械学習入門者向け Support Vector Machine (SVM) に触れてみる
  • YOLOv8を用いた物体検出
  • 正規表現とパイプ
  • 機械学習エンジニアに必要なスキル
  • 軽量版Kubernetesディストリビューション – k0s クラスターの構築
  • ファイル操作コマンド
  • グループとユーザー
  • 困った時に使うコマンド
  • 一般グループのユーザーとグループ
  • プライバシーポリシー
  • 三目並べ – 6.先攻後攻を決めて、コンピュータ対戦にしよう(後編)
  • フロントエンド開発のための環境構築
  • ファイル検索コマンド
  • 質問
  • 仮想化環境のディスク容量を拡張する
  • ユーザー権限とアクセス権
  • データ分析基礎 – Part1
  • 三目並べ – 0.導入
  • テキスト処理
  • データベースへのデータロード
  • 機械学習概要1
  • 機械学習入門者向け Naive Bayes(単純ベイズ)アルゴリズムに触れてみる
  • ファイル管理
  • SSHを使用してホストOSからゲストOSに接続する
  • 機械学習入門者向け ChainerRLでブロック崩しの学習
  • 機械学習入門者向け ランダムフォレストによる Kaggle Titanic生存者予測
  • 機械学習概要2
  • データ分析基礎 – Part 2
  • 機械学習入門者向け 分類と回帰の違いをプログラムを書いて学ぼう
  • フロントエンドのWeb開発について
  • ダイナミックルーティング
  • 三目並べ – 1.ゲーム盤を作ろう
  • 【Python入門】Python Numpy チュートリアル
  • Amazon EC2 インスタンスの初期設定をしよう
  • AmazonEC2とVPCでネットワークとサーバーを構築しよう
  • Apache NiFi Exercise
  • Apache NiFi データパイプライン基礎
  • Apache NiFiの環境設定
  • Apache Spark 基礎
  • Apache SparkとApache Zeppelinの概要と環境構築
  • Apache Superset maptoolの使い方
  • Apache Superset 基礎
  • Apache Superset 概要と環境構築
  • Apache Zeppelin 基本機能
  • APIのデモンストレーション
  • Avinton Academy コンテンツガイド
  • AWS CLIをインストールしてコマンド操作しよう
  • AWS CLIを使ってEC2のファイルをS3へアップロードしよう
  • AWS Route 53を使って独自ドメインのWebページを表示させてみよう
  • AWSアカウントの作成と必ずやるべきセキュリティ対策
  • AWSのEC2インスタンスでWordPressブログを公開してみよう
  • AWS入門者向け 初心者が最初に理解すべきEC2とVPCの基本的な用語解説
  • CCNA
  • Certbotを使ってSSL証明書を発行し、HTTP通信を暗号化しよう
  • CISCO 1800ルータセットアップ
  • CSV import & export – Node.js, mySQL – 1
  • CSV import & export – Node.js, mySQL – 2
  • Docker Compose(Nginx + Flask + MySQL)演習
  • Docker Engineのubuntu上へのinstall
  • Docker 概要とセットアップ
  • Docker, Kubernetesの学び方について
  • Dockerコンテナイメージの最適化/ベストプラクティス
  • DockerとApacheを使ってWebサーバーを構築しよう
  • EC2からS3へ自動でぽいぽいアップロードするスクリプトの作成
  • ESP32-CAMのサンプルアプリケーションを実行する
  • 01 – Sparkfun Inventor’s Kit の準備
  • 02 – Sparkfun Inventor’s KitでLチカ
  • 03 ポテンショメータでLEDの点滅間隔をアナログ入力する
  • 04 フォトレジスタで明るさに反応するシステムをつくる
  • 05 LCDに文字列を表示する
  • 06 – BME280とLCDを組み合わせて温度計をつくる
  • ESP32とArduino IDE/PlatfromIOでHello Worldアプリケーションの実行
  • ESP32と超音波センサー HC-SR04 で物体の距離を計測する
  • ESXi – Switchの追加とVLAN
  • ESXi – VyOS
  • ESXi – 小規模ネットワーク 構築
  • Gitとは
  • VS CodeでGitHub Copilotを設定する
  • VSCode リモート開発環境
  • GNS3のセットアップ
  • Kubernetesクラスター上へのOpenVINOモデルサーバーを使用したサンプルアプリケーションのデプロイ
  • Linuxとは
  • NAT
  • NodeJSでWebアプリケーション開発 – React編
  • NodeJSでWebアプリケーション開発 – React編
  • NodeJSでWebアプリケーション開発 – React編
  • NodeJSでWebアプリケーション開発 – Socket.IO編
  • NVIDIA Cumulus VX + GNS3でBGPネットワークのシミュレーション
  • OpenCVのテストプログラム
  • PacketTracerのセットアップ
  • Pandasによる構造化データ分析
  • PCからルータ、スイッチへのSSH接続設定
  • PostGIS exercise
  • PostgreSQL – Python – Apache – Bootstrap
  • MySQLとMySQL Workbench のセットアップ
  • PostgreSQL Setup
  • PostgreSQL – インデックスを利用したパフォーマンス改善方法
  • PostgreSQL – パーティショニングを利用したパフォーマンス改善方法
  • PostgreSQLによるデータ分析
  • postgreSQLへのshp fileのimport
  • Python2.7とOpenCVのインストール
  • Python3.8 と OpenCV のインストール (Ubuntu20.04LTS)
  • Pythonでデータベースを操作する
  • Pythonで画像を分類するプログラムを作成する
  • Pythonによるマルチスレッドプログラミング実践
  • Raspberry Pi 4B のセットアップ
  • Raspberry PiとBME280を使用して温度と湿度、気圧を読み取る
  • REDIS
  • Redux基礎 – 主要な概念と用語
  • Ruby on Rails を MySQLでセットアップ
  • Ruby on Railsによる簡単なウェブアプリケーション
  • SampleアプリケーションのKubernetes上へのデプロイ
  • Scala 基礎
  • scikit-learnとは
  • Spark SQL エクササイズ
  • SparkMLによるKaggle Titanic生存者予測
  • SparkMLによる住宅価格予測
  • SQL 便利な関数
  • Ubuntuの基本設定
  • uhubctlでUSBデバイスのオンオフをコントロール
  • Terraform入門 2 – Terraformのstate管理
  • Terraform入門 1 – TerraformでAWS上にEC2インスタンスを作成する
  • Virtualisation and Container (仮想化とコンテナ) – Ansible, Docker and Kubernetes
  • viエディタ
  • VLAN
  • VMware ESXi サーバー構築
  • Webアプリ開発に欠かせないGoogle Chrome DevToolsの基本
  • Windows Server 2012 R2 Hyper-V
  • YOLOv5を用いた物体検出
Home Avintonアカデミー Certbotを使ってSSL証明書を発行し、HTTP通信を暗号化しよう

SSL通信による暗号化のイメージ-地球と通信網を背景に錠前が描かれている画像

IT業界ではセキュリティに対する意識が年々高まっています。

ショッピングサイトをはじめとした多くのWebサービスは誕生日やクレジットカード情報のやりとりが発生しますし、個人ブログではグーグルアドセンスやAmazonアソシエイトなどの広告ツールが当たり前のように使われている状況です。

上記のような広告配信ツールは、ユーザーの興味に応じた商品やサービスの広告を表示するため、Cookieや検索履歴、閲覧履歴など、サイトへのアクセスに関する情報を取得します。

通信が暗号化されていないと盗聴やなりすまし、データ改ざんのリスクがあり、ユーザーは安心してWebサービスを利用することができなくなってしまいます。

そのような背景から、サービスを提供する側は、ユーザーが安全にWebサイトへアクセスできるよう配慮する必要があります。

そこで今回は、Certbotを使ってSSL証明書を発行し、HTTP通信を暗号化します。

独自ドメインとDNSの設定が必要となりますので、↓こちらの記事で事前に設定を済ませましょう。

AWS Route 53を使って独自ドメインのWebページを表示させてみよう

SSL証明書とは

HTTP通信を暗号化するには次のファイルが必要となります。

  • ・サーバーの公開鍵(CSR)と秘密鍵(Key)
  • ・認証局(CA)が電子署名したSSL証明書(CRT)と中間CA証明書

SSL証明書はサーバについての情報と、サーバの公開鍵、証明書を発行した認証局の情報が署名されているファイルです。

サーバの公開鍵はクライアントとの通信を「暗号化」する際に使用し、署名は「なりすまし」を防ぐために使います。

署名は、証明書を発行するCAと呼ばれる第三者機関が、CSRの情報を元に行います。

中間CA証明書は、SSL証明書を発行する認証局またはその配下にある別の認証局によって署名されたファイルです。必須ではありませんが、セキュリティレベルの向上を理由に、中間CAを1つい上用いる階層構造とる認証が現在は主流となっています。

SSL証明書発行と設定の流れ

SSL証明書の発行には、次のような手順が踏まれます。

  • 1.自分のサーバーでCSRとKEYを作成
  • 2.CSRをCAへ送信して証明書の発行を申請
  • 3.CAから電子署名されたCRTと中間CA証明書を受け取る
  • 4.受け取った証明書類をWebサーバーへ設置する

SSL証明書発行と設置の流れ

この間にドメイン所有者の実在性の確認などが行われ、ランクの高い証明書の場合は発行までに10日間ほどかかる場合もあります。

これらの作業を手で行うのは非常に大変ですが、ランクの低い証明書であれば、Certbotを使って自動化が可能です。

Certbotとは

Certbotのwebページのトップ画像

Certbotは無料かつ自動でSSL証明書を発行できるツールです。

CSRとKEYファイルの作成からWebサーバーの設定まで自動で行ってくれます。

さらにCronと組み合わせることで、証明書の更新作業までも完全に自動化することが可能です。

証明書の署名と発行はLet’s Encryptと呼ばれる認証局によって行われます。

AWSにも AWS Certificate Manager と呼ばれる証明書管理サービスが存在しますが、 ELB または Cloud Front の使用が前提となっています。

ELB などは個人用途で利用するには料金的に少しハードルが高いため、このアカデミーコンテンツではCertbotを選択しました。

CertbotのインストールとSSL証明書の発行

それではCertbotを使って証明書を発行しましょう。

EC2インスタンスへSSHし、Dockerコンテナにログイン後、yumコマンドでインストールします。

1
yum -y install certbot

インストール後、次のコマンドで証明書を発行します。

1
certbot --apache certonly

Apacheの設定が自動で検出され下記のようにドメインがリストアップされるので、対象のものを選択します。

CertbotでSSL証明書を発行する様子

発行された証明書は /etc/letsencrypt/live/ ディレクトリの配下に置かれます。

Certbotで作成されたSSL証明書類の置き場所

VirtualHostの設定

発行したSSL証明書を設定します。

conf.d配下にconfファイルを新規作成し、

1
vi /etc/httpd/conf.d/vhost-ssl.conf

次の内容を追加してください。

1
2
3
4
5
6
7
<br />DocumentRoot "/var/www/html/"
ServerName YOUR_DOMAIN_NAME
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/YOUR_DOMAIN_NAME/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/YOUR_DOMAIN_NAME/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/YOUR_DOMAIN_NAME/chain.pem
  • ・SSLEngine on … SSL機能のON
  • ・SSLCertificateFile CERTFICATION_FILE … SSL証明書を指定
  • ・SSLCertificateKeyFile PRIVATE_KEY_FILE … 秘密鍵を指定
  • ・SSLCertificateChainFile CHAIN_FILE … 中間CA証明書を指定

ブラウザで対象のURLヘアクセスすると、HTTPS化されたことが確認できます。

正常にSSL暗号化されているか確認1

Webサイトに当てられているSSL証明書の確認方法

Chrome developerツールによる確認方法

Webサイトに当てられている証明書の情報をより詳しく調べたい時が、私たちにはあります。

そのような時、Google Chromeであれば次のように情報を確認することができます。

  • 1.Mac: Command + Option + I, Windows: F12 or Ctrl + Shift + I
  • 2.Securityタブを開く
  • 3.View certificateをクリック

Webサイトに当てられているSSL証明書の詳細をChromeのディベロッパーツールで確認している画像

Webサイトに当てられているSSL証明書の詳細をChromeのディベロッパーツールで確認している画像2

コマンドラインからの確認方法

もちろんコマンドラインから確認することもできます。

コマンドラインから確認するにはOpensslコマンドを使います。

下記はAvintonのホームページを対象にopensslコマンドを実行しています。

1
openssl s_client -connect www.avinton.com:443 -showcerts

Webサイトに当てられているSSL証明書の詳細をコマンドラインで確認している画像

httpからhttpsへのリダイレクト設定

SSL暗号化通信ができるようになりました。しかし今の設定では、暗号化されていないhttpのURLもネット上に存在していることになります。

httpとhttps両方のURLが存在していると、Wユーザーはどちらが正規のURLなのか混乱してしまいますし、アクセス解析が困難になります。また、Webサイトへのアクセスが2分化するため、SEOにも悪影響が出るでしょう。

http://~の設定を削除しても良いですが、その場合はhttpのURLをお気に入りに登録してくれたユーザーを置き去りにすることになります。

そこで、httpのURLからhttpsのURLへリダイレクトする設定を追加します。

ポート80番で設定したVirtualHostに下記を追記します。

1
2
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

RewriteEngine On … リダイレクト機能のON
RewirteRule A B [Option] … AからBへリダイレクトさせるための記述

Apacheのリダイレクトの設定

ここで設定しているRewriteRuleは301リダイレクトと呼ばれ、リダイレクト元のURLが存在しないことを示します。

この設定により、 http://~ へアクセスすると、 https://~ へリダイレクトされます。

まとめ

Certbotを用いたSSL証明書の発行とVirtualHostの設定、そしてリダイレクトの設定についてまとめました。

Webサービスを公開する時は、ユーザーが安全にWebサービスを利用できるよう通信を暗号化しましょう。

あなたも、Avintonでこのような最先端技術を習得し活用してみませんか?

社員の成長を導きながら、AIやビッグデータなどの最先端技術をプロジェクトに活用していくことが私たちのビジョンです。Avintonの充実した技術研修でスキルアップを図り、あなたのキャリア目標を一緒に達成しませんか?

採用情報

採用情報

採用情報

Categories

  • 相互学習
  • 採用
  • 社員インタビュー
  • 学習&資格取得
  • 技術解説
  • イベント告知
  • 学内説明会&講義
  • 産学連携
  • 就職活動
  • イベントレポート
  • その他
  • 技術ブログ&インタビュー
  • mainpage
  • New Graduates Interviews
  • 中途エンジニア
  • カテゴリーなし
  • ニュースリリース&イベント

Avinton SDGs

SDGsへの貢献

Search

タグ

AIエンジニア AI導入 Apatch AvintonAcademy CKA DevOps KiX Kubernetes Notion PM&PMO PyTorch SDGs Innnovation Hub UI YOLOv5 アカウントマネージャー インタビュー インフラエンジニア エッジAIカメラ セキュリティエンジニア ソフトスキル ツール開発 データサイエンティスト ネットワークエンジニア フルスタックエンジニア フロントエンド ベテランエンジニア ボランティア マイクロサービス モーフィング ローカルイベント 中瀬幸子、サーバークラスター 中途採用 人材育成 協働パートナー 国際自動制御連盟 地域創生 基本情報技術者 強化学習 技術 新卒、キャリア 新卒採用 田中研之輔 社会貢献 経団連 顔認証
© 2023 Avinton | All Rights Reserved | プライバシーポリシー
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ
  • 日本語
    • English (英語)
Avinton Japan