PHP お問い合わせフォーム

 

C# DataTableをモデルクラスへ代入

直接カラム名を書いてしまうことが多いけど、リフレクションで作ってみる。

 

SSH、SSL/TLS メモ

SSH、SSL/TLSは分かりづらいのでメモ

SSH

1.ユーザーがサーバーに公開鍵を渡しておく。

2.ユーザーが秘密鍵を使って署名を作成、その署名をサーバー側が公開鍵を使って検証する。

3.公開鍵はユーザーも持っていて(秘密鍵に含まれる)ユーザーと公開鍵の対応が適切かどうかも判断。

公開鍵送付>公開鍵照合>署名送付>署名検証
という流れ。

SSL/TLS

1.サーバーはユーザーに公開鍵を送付

2.ユーザーは公開鍵を使って共通鍵を暗号化しサーバーに送付

3.サーバーは暗号化された共通鍵を秘密鍵で復号

4.サーバーとユーザーは一致した共通鍵を使って暗号通信

基本的にSSLの通信は共通鍵暗号となる。

この方法では、サーバーがユーザーに送る公開鍵が正しいかどうかチェックする必要がある。

1.サーバーは通信用公開鍵と署名を送付
(ここでの署名は通信用公開鍵のハッシュを署名用の秘密鍵で暗号化したもの)
(そもそも署名とはハッシュ化し秘密鍵で暗号化すること)
(認証局は署名用の秘密鍵を保持している)
(ここで渡すものがSSLサーバー証明書となる)

2.ユーザーは署名を署名用公開鍵で復号化しハッシュを得る

3.受け取った通信用公開鍵のハッシュを生成、比較し一致すれば公開鍵が正しいと判断

実際、通信用公開鍵と署名を入れ替えられてしまう恐れがあるため、通信用公開鍵+ドメイン名などの情報ファイル(CSR)に対して署名する。さらに、認証局自体の正当性チェックのための中間CA証明書もあり、通信用公開鍵+署名+中間CA証明書が初回リクエストでのサーバーから返すものとなる。

認証>通信用の公開鍵、秘密鍵が使い捨てで生成される。

サーバーでのSSL設定手順。

1.サーバーで秘密鍵からCSR作成。

2.CSRを認証局に渡しSSLサーバー証明書の発行を依頼

3.ドメイン認証

4.SSLサーバー証明書と中間CA証明書が届き、サーバーに設置

GCP Cloud SQL(MySQL) 使い方

先日VPS(Indigo)のSQLite→MySQLの実験を行ってみたが、GCPでもやってみることにした。

・初期設定

Cloud SQL 無料トライアルを実行する。
(既にクレジット等の情報は登録済みなのでそのまま完了)

コンソールにログイン>左側メニューのSQLを選択。
プロジェクト(すでにMyFirstProjectが存在している)をクリック。
インスタンスを作成をクリック。
MySQLをクリック。

インスタンスID、rootパスワードを入力する。
無料トライアルだが、実際運用を始めれば安く利用したいので、
asia-northeast1(東京)/db-f1-micro
SSD/10GB
自動バックアップしない
を選択する。インスタンス生成には少し時間がかかる。

・インスタンス作成後

コンソールにログイン>左側メニューのSQLを選択。
作成したインスタンスを選択。

左側メニューの接続を選択。
SSL接続のみ許可をクリック。
クライアント証明書を作成をクリックし、一意のIDを追加し作成。

・サーバー証明書:server-ca.pem
・クライアントの公開鍵証明書:client-cert.pem
・クライアント秘密鍵:client-key.pem
という3つのファイルをダウンロードする。

同じく左側メニューの接続から、ネットワークを追加をクリック。
ネットワークの項目:0.0.0.0/0
を追加し完了>保存を実行。

左側メニューの概要を選択、パブリックIPアドレスを確認。

・MySQL Wokbenchから接続

Standard TCP/IPを選択。

Parametersタブより
Hostname:パブリックIPアドレス
Port:3306
Username:root
パスワード:インスタンス作成時のrootパスワード

SSLタブより
Use SSL:Require and Verify CA
SSL Key File, SSL CERT File, SSL CA File
それぞれ、ダウンロードしたファイルを選択

とりあえずこれでつながる。

・C#(MySqlConnection)から接続

.Netではpemが使えないため、
(https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl-pfx.html)
opensslのある環境上で(今回はVPSで実行)
openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out test.pfx
を実行し、pfxファイルを作成する。(test部は任意の名前)

接続文字列
“server=IPアドレス;port=3306;database=DB名;user=MySQLユーザー名;password=MySQLパスワード;SslMode=Required;CertificateFile=test.pfx;CertificatePassword=pfxパスワード”;

MySQLのConnectorはNuGetでもインストーラーでもいける。インストーラなら参照設定から登録。

・VBAからの接続

 

・SQLiteのデータ整形

以下参考。

Ubuntu(Indigo) 初期設定

MySQLにインポート

・データベース作成

コンソール>SQL>インスタンス選択>データベース>データベースの作成をクリック。

文字セット:utf8
照合:デフォルトの照合

・ファイルアップロード(Storage)

コンソール>Storage>ブラウザ>バケットを作成をクリック。

バケットに一意の名前をつける。

ロケーションタイプ:Region
ロケーション:asia-northeast1(東京)
ストレージクラス:Standard
アクセス制御:均一

コンソール>Storage>ブラウザ>バケットを選択>ファイルをアップロードをクリック。

・インポート

コンソール>SQL>インスタンス選択>概要>インポートをクリック。

ソースにファイルを指定:アップロードしたファイル選択
ファイル形式:SQL
インポート先:作成したデータベース名

VPSのMySQLへはSQLiteで作成したファイルを直接インポートできたが、GCPではできなかったため、とりあえず今回はSQLite>MySQL(VPS)>MySQL(GCP)という流れになった。

Python 組み込みサーバー

 

・組み込みサーバーでCGIを処理

Win10設定>アプリ>アプリと実行エイリアス
python.exeをオフにする

sysdm.cpl>詳細設定>環境変数
からパスを通す
C:\Users\mail\AppData\Local\Programs\Python

バッチファイルを作成

バッチと同じ階層にpython.pyを作成

バッチと同じ階層にindex.htmlを作成

binファルダ以下にtest.pyを作成

 

Python XML・Json

 

Python データベース基本

 

Python ファイル関連

 

Python 基本文法

新しい言語を少し触ってみようかなということでPythonをはじめた。

VBA 並び替え

いつも忘れてしまうので。