2020年2月24日月曜日

Visual Studio C++ でDLL作成

[前提条件]
・Windows 10
・Visual Studio 2019 インストール済み

具体的な手順は以下のサイトを参照する。
チュートリアル: 独自のダイナミックリンクライブラリを作成してC++使用する ()
https://docs.microsoft.com/ja-jp/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019

Backup
https://drive.google.com/drive/folders/1PwTSJMICm0EA1gbfARqJrhYmuv66Ni60

OpenSSLの証明書検証

OpenSSLの証明書検証について記載する。

【証明書検証の無効化】
SSL_VERIFY_NONEをパラメータで指定し、OpenSSLのSSL_CTX_set_verify()を呼び出す。
SSL_VERIFY_NONEを指定した場合、OpenSSLの証明書検証結果を無視し、TLS/SSLハンドシェイクを継続する。

【証明書検証の有効化】
証明書検証を実行するための修正点を記載する。

1.証明書検証機能の有効化
SSL_CTX_set_verify()に指定するSSL_VERIFY_NONEをSSL_VERIFY_PEERに変更し、証明書検証機能を有効化する。

2.OpenSSLへの信頼された証明書の読み込み
SSL_CTX_load_verify_locations()を使用して、OpenSSLに信頼された証明書を読み込ませる。信頼された証明書の指定は、第2引数にPEMファイルのファイルパスを指定する。

3.証明書検証エラーのエラーマッピング
TLS通信エラーが発生した場合、証明書検証のエラーメッセージとERR_error_string()で取得した文字列比較をし、一致した場合、証明書検証のエラーとして、マッピングする。

■証明書検証のエラーメッセージ
「error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed」
TLS通信エラーが発生した場合、OpenSSLのエラーメッセージをERR_error_string()で取得することができる。

【参考】
IBMの開発者サイト:独自の信頼できる証明書の提供
https://www.ibm.com/developerworks/jp/linux/library/l-openssl2/index.html

OpenSSL公式サイト
https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_load_verify_locations.html

Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする
https://www.atmarkit.co.jp/ait/articles/1602/05/news039.html

boost ビルド

以下にboost ビルド手順を記載する。
バージョンは、V1.72.0になる。

[前準備]
1.VC++ 2019をインストールする

2.最新のboost ソースコードをダウンロードする。
https://www.boost.org/users/download/#live

[ビルド手順]
1.ダウンロードしたソースコードを解凍する

2.解凍したディレクトリに移動する
> cd (解凍したディレクトリ)

3.bootstrap.batを実行する
> bootstrap.sh

4.b2.exe,bjam.exeが生成されているか確認する

5.boostのビルドを実行する。
以下は、ビルド時のオプションパラメータのサンプル。

 // MD ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared release stage

// MDd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared debug stage

// MT ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage

// MTd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static debug stage

// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system

[オプションパラメータの知識]
・show
コンパイル対象のboostライブラリの一覧を表示する。後述のwithにて指定するboostライブラリの名前の検索に使う。

// コンパイル対象のboostライブラリの一覧を表示
b2 --show-libraries

・toolset
boostビルド時に指定するVC++のコンパイルバージョンを指定ができる。
--toolset=msvc-14.2 : VS2019用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0

例:Visual Studio2019の指定。
b2.exe --toolset=msvc-xx.x link=static runtime-link=static

↓[xx.x]を14.2に置き換える。14.2は、Visual Studio2019のバージョン指す。

b2.exe --toolset=msvc-14.2 link=static runtime-link=static

・link
static or shared。
生成物の種類の指定。動的リンク(DLLファイル)。それとも静的リンク(libファイル)

 // 動的リンク(DLLファイル)
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage

// 静的リンク(libファイル)
>b2.exe --toolset=msvc-14.2 link=shared runtime-link=static debug stage

・runtime-link
static or shared。
VC++ の標準ライブラリを動的リンク(DLLファイル)。それとも静的リンク(libファイル)するかどうかを指定。
VC++ プロジェクトで /MT を指定する場合には runtime-link=static,
VC++ プロジェクトで /MD を指定する場合には runtime-link=shared にしないとライブラリのリンクで問題が発生するぽっい。
→MT, MTdそれとも、MD, MDd。

・with
ビルドするboostライブラリの指定ができる

// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system

[参考サイト]
以下、boostビルドに参考にさせていただいたサイト。感謝。

Boostライブラリのビルド方法
https://boostjp.github.io/howtobuild.html

--toolset=msvc-10.0 : VS2010用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0
http://www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?build_boost

Boostのヘッダオンリー or ビルドが必要なライブラリ
https://boostjp.github.io/tips/build_link.html

b2.exe のオプションについて
http://krustf.hateblo.jp/entry/20100804/1280873428
http://umezawa.dyndns.info/wordpress/?p=5823
http://www.kmonos.net/pub/BoostBook/1st/vctk.html

boost::asioでhttps-post
http://eiki.hatenablog.jp/entry/20130617/1371436691

Visutal Studio で Boost C++ Libraries をビルドする
https://clown.cube-soft.jp/entry/20110323/1300886446

boostを真面目にVisualC++2010でコンパイルしてみた
http://krustf.hateblo.jp/entry/20100804/1280873428