Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2022 when it's begining after/with CORONA Virus.

Windows Clang に openSSL を適用

2月
19
2023
Back
Alt+HOME


過日開発環境を Clang に変更したので、必要に迫られ Windows用 OpenSSL/TLS をインストールすることにしました。ソースをダウンロードしてコンパイルする方法も有るのですが、そのコンパイル環境も構築する必要が有るため今回はWindows用インストーラを作成してくれているサイトからダウンロードしました。


OpenSSL のオリジナルサイトは https://www.openssl.org です。

また、ソースのダウンロードは上記サイト内に記載されていますが、次の通りです。
https://github.com/openssl/openssl

OpenSSLのダウンロードとインストール



  1. 最適なものをダウンドーロする

  2. Win64 と Win32、また双方にフル版とライト版が有ります。使用しているWindowsに合ったものをダウンロードします。 開発用にはフル版を、一般にOpenSSLの機能を使用しているソフトを使用するだけならライト版を選択します。

    EXE と MSI が有りますが、どちらもダウンロード後はダブルクリックするだけでインストール出来ますので詳細は省きます。

  3. インストーラの指示に従ってインストールします。

  4. フォルダは選択できますが、規定どおりだと Program Files にインストールされます。

  5. インストールしたコマンド openssl.exe のパスをシステムのプロパティに追加設定します。

  6. [Windows] + [r] → 名前(O): [systempropertiesadvanced] → [Enter] : システムのプロパティ・ダイアログが開きます。
    [環境変数]をクリックし、[ユーザー環境変数] で [Path] を選択して、[編集]します。
    [新規] ボタンを押して、次の Path を追加します。

    C:\Program Files\OpenSSL-Win64\bin

    一度、再起動します。

  7. インストールされた場所へパスが通っているかを確認します。

  8. PS X:> Get-Command openssl
    
    CommandType     Name                                  Version    Source
    -----------     ----                                  -------    ------
    Application     openssl.exe                           3.0.8.0    C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.exe
    

    これで、opensslのコマンドユーティリティが使えるようになりました。

  9. このまま普通にコンパイルすると沢山エラーが発生します。

  10. 通常の Clang のコンパイルコマンドラインは clang test.c -o text.exe -lws2_32 でした。
    パラメータを加えます。

    PS X:> clang test.c -o test.exe -lws2_32 -llibssl -llibcrypto -isystem "C:\Program Files\OpenSSL-Win64\include" -L "C:\Program Files\OpenSSL-Win64\lib"
    

    まず注意点がひとつ。ライブラリの読み込みに関して通常は ssl.lib, crypto.lib なのですが OpenSSLフォルダ内では libssl.lib と libcrypto.lib になっています。 プログラム例などにはパラメータが -lssl (ssl.lib), -lcrypto (crypto.lib) の組み合わせが多いので、上記のように名前を対応させます。

    また、Clang の機能が、規定の icludeパスや libパス以外を検索できないので、 OpenSSLのそれらのフォルダにパスを引いても「ファイルが有りません。」エラーが発生します。 通常 Clang 自体をソースからコンパイルしてインストールする場合は、新たにフォルダを付け加えてからコンパイルすれば良い訳けですが、 今回はそれを承知でバイナリー版をインストールしましたので、Clang のコマンドラインでそれぞれを指定するようにします。

    -isystem "C:\Program Files\OpenSSL-Win64\include" -L "C:\Program Files\OpenSSL-Win64\lib" の部分

    Program Files がスペースを含んでいるのでパス全体をダブルクォーテーションで囲うようにします。


OpenSSLのクライアント証明書で使用するCA証明書を作成する


既存の信頼できる証明書から公開証明書をエクスポート

  1. [Win] + [r]で「ファイル名を指定して実行」を立ち上げ、[certmgr.msc] を実行します。

  2. 上図のように適当な信頼できる証明書から公開証明書をエクスポートします。( .pem 又は .cer )


  3. 証明書の上で [右ボタンクリック] から [すべてのタスク] → [エクスポート] → [次へ] と進みます。

    右のような画面が現れますので Base 64 エンコードを選択します。
  4. ファイル名を記述します。取り敢えずはデスクトップに名前 certca.cer として [次へ] → [完了]します。




公開証明書から CA 証明書をエクスポート


  1. 図のようにファイルを右クリックし、「プログラムから開く」の「暗号化シェル拡張」をクリックして証明書を開きます。


  2. [証明書のパス] タブを開きます。

  3. ここに複数行表示されるときは、ルートCAとその他中間CAのすべての証明書をエクスポートする必要が有ります。 これには、以下で説明するエクスポートをそれぞれに対して同様に行います。

    数行表示された最も上のルート証明書を選択すると[証明書の表示]ボタンが有効になるのでクリックします。

  4. 中間証明書が無い(ルート証明書が一つ)場合は、上記の操作をせずとも同じ画面表示にすでになっています。

  5. つまり複数有る場合の(2)を実行した後の画面と、一つしか無い場合の(1)直後の画面は同じです



  6. [詳細]タブを開きます。

  7. [ファイルにコピー]をクリックして「証明書のエクスポートウィザード」へ進み、[次へ]をクリックします。


  8. 前項(2)(3)の「信頼できる証明書から公開証明書をエクスポート」と全く同じ手順です。
  9. 但し、今回は公開証明書のエキスポートではなく、その公開証明書からルートCA証明書の詳細を抽出・エクスポートすることになるので、 名称を分かりやすいものにします。

    C:\Users\USER\Desktop\export_rootca.cer (一例)

    ルートCA証明書が一つだけの場合は、これで完了です。

  10. もし中間証明書などから複数の中間CA証明書とルートCA証明書が有った場合は次のようにして、一つにまとめます。

  11. type 中間CA証明書.cer export_rootca.cer > combined_ca.cer

OpenSSLのコマンド


サーバ側に接続し証明書を取得
PS X:\newcerts> openssl s_client -connect db-dev.satnogs.org:443 -showcerts

鍵ペアを生成する
PS X:\newcerts> openssl genrsa 2048 > nogs2048.key

鍵ペアの確認表示
PS X:\newcerts> openssl rsa -noout -text -in nogs2048.key

CSRの作成
PS X:\newcerts> openssl req -new -key nogs2048.key -sha256 -out nogs2048.csr
		:
-----
Country Name (2 letter code) [AU]:JP								// ユーザー情報入力
State or Province Name (full name) [Some-State]:kansai
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Name
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:*******
An optional company name []:

CSRの表示
PS X:\newcerts> openssl req -text -noout -in nogs4096.csr

自己署名証明書の発行
PS X:\newcerts> openssl x509 -days 3652 -in nogs4096.csr -req -signkey nogs4096.key -out nogs4096.cer
Certificate request self-signature ok
subject=C = JP, ST = kansai, O = Internet Widgits Pty Ltd, CN = Name	// CSR作成で入力した署名

CRLの表示
PS X:\newcerts> openssl crl -inform der -in fullcrl.crl -text -noout

P12ファイルの作成
PS X:\newcerts> openssl pkcs12 -export -in nogs4096.cer -inkey nogs4096.key -out nogs4096.p12
Enter Export Password: ********
Verifying - Enter Export Password: ********

秘密鍵をPEM形式で取り出す
PS X:\newcerts> openssl pkcs12 -in nogs4096.p12 -out nogs4096.pem -nodes -nocerts
Enter Import Password: ********

生成したファイルを確認
PS X:\newcerts> ls

    Directory: X:\newcerts

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2023/02/22    16:50           1174 nogs4096.cer
-a---          2023/02/22    16:41           1022 nogs4096.csr
-a---          2023/02/22    16:28           1732 nogs4096.key
-a---          2023/02/22    19:21           2563 nogs4096.p12
-a---          2023/02/23    13:57           1859 nogs4096.pem


Back
Alt+HOME