Windows 10でのOpenSSL:包括的なPowerShellガイド

SSL証明書の生成は困難な作業であり、多くの挫折と悲しみが伴います。しかし、そうする必要はありません!Windows 10とOpenSSLがあれば、このチュートリアルの助けを借りて、問題なく進むことができます。

この記事では、Windows 10にOpenSSLをインストールする方法、SSL証明書の生成、証明書のトラブルシューティングやデバッグ、および形式の変換について学びます。

では、PowerShellでWindows 10上のOpenSSLをマスターしましょう!

関連記事:Windows Certificate ManagerとPowerShellを使用した証明書の管理

前提条件

この記事では、実際に手を動かして学ぶ方法を紹介します。OpenSSLは元々Linux用のユーティリティですが、Windowsでも使用することができます。

このガイドのスクリーンショットは、Windows 10ビルド1909とPowerShell 7から取得されました。

PowerShellとChocolateyを使用してWindows 10にOpenSSLをインストールする

Chocolateyを使用してインストール手順に従ってインストールしたと仮定します。最初のタスクは、Windows 10にOpenSSLをインストールすることです。これを行うには、PowerShellコンソールを開き、以下のようにchoco install OpenSSL.Lightを実行します。

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

以上です!これでPowerShellでOpenSSLがインストールされました。

作業ディレクトリを設定する

このチュートリアルでは、学習用にいくつかの証明書を作成します。ここで行うすべての作業が後でクリーンアップできる単一のフォルダに制限されるようにするために、フォルダを作成してください。

このチュートリアルでは、すべての証明書と関連ファイルをC:\certsフォルダに保存します。次のコマンドを実行して、PowerShellでフォルダを作成できます。

New-Item -ItemType Directory -Path C:\certs

さあ、OpenSSLを設定しましょう。

OpenSSLの設定

デフォルトでは、Windows 10のOpenSSLには設定ファイルが含まれていません。これは意図的なものですが、カスタマイズできる多くの設定オプションがあるため、このガイドでは、セキュリティ要件に最適に合わせて後でカスタマイズできるサンプルの設定を使用します。

PowerShellを開き、以下のコマンドを実行します。このコマンドは、MITからサンプルの設定ファイルをダウンロードし、現在の作業ディレクトリにopenssl.cnfとして保存します。

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

これで、openssl.cnfファイルを開くことができ、以下のような内容が表示されます。

Sample OpenSSL configuration file

ダウンロードした設定は現在のままで動作します。本番環境ではデフォルトを使用しないでください!

PowerShellプロファイル環境変数の更新

スムーズに進めるために、Windows 10でPowerShellプロファイルを変更する必要があります。いくつかの環境変数を設定することで、インストールしたOpenSSLの異なるバージョン間を簡単に切り替えることができます。

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

以下に、既にプロファイルを持っていない場合にPowerShellプロファイルを作成する方法が示されています。このコマンドはOpenSSLバイナリのパスをPATHに追加し、設定ファイルのパスをOPENSSL_CONFに割り当てます。

# 環境変数をPowerShellプロファイルに追加
# プロファイルの存在をテストし、見つからない場合は作成する!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# 以下の行を追加してプロファイルを編集
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

環境変数を使用するためには、プロファイルを再読み込みするには. $profileと入力するか、PowerShellを閉じて再度開いてください。

これで、PowerShellのどの場所からでも以下に示すようにopensslバイナリを簡単に呼び出すことができます。

Verifying OpenSSL version in PowerShell

Windows 10でのOpenSSLを使用してCSRと秘密鍵を生成する

SSL証明書を作成する前に、証明書署名要求(CSR)を生成する必要があります。CSRは、公開鍵を証明機関(CA)と共有するためのエンコードされたファイルです。このファイルには識別情報、署名アルゴリズム、デジタル署名が含まれています。さあ、最初のCSRと秘密鍵を作成しましょう。

関連情報:一般人のためのX509証明書ガイド

CSRを作成するには、以下のコマンドを実行します。次のデモンストレーションで示されるように、OpenSSLは識別情報の入力を求めます。

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

完了すると、有効なCSRと秘密鍵が生成され、SSL証明書の発行に使用できます。

設定ファイルのデフォルト値は、CSRを生成するたびにデータを入力したくない場合に、さらに編集することができます。

利用可能なCSRオプションについての詳細や、マニュアルページでのサンプル設定の表示もご覧いただけます。OpenSSLには例も含まれている活発なGitHubリポジトリもあります。

RSAキーペアの生成

OpenSSLを使用してRSAキーペア(公開鍵/秘密鍵)も作成することができます。以下のように、まずgenrsaサブコマンドを使用して秘密鍵を作成してください。

以下のコマンドを実行すると、Windows 10上のOpenSSLは、鍵長が2048ビットのRSA秘密鍵を生成します。この鍵は、現代のハードウェアではほぼ即座に生成されます。結果として得られる鍵は、作業ディレクトリに出力されます。

# 2048の最大鍵サイズを使用して秘密鍵を生成
# 鍵サイズは512、758、1024、1536、または2048にすることができます。
openssl genrsa -out rsa.private 2048

次に、作成したばかりの秘密鍵を使用して公開鍵を生成します。以下の構文は、rsa.privateの秘密鍵から作業ディレクトリにrsa.publicという公開鍵を作成します。

# 秘密鍵を使用して公開鍵を生成
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

自己署名証明書の生成

場合によっては、自己署名証明書を生成する必要があるかもしれません。自己署名証明書は、ラボ使用には適していますが、本番環境で使用するには安全な方法ではありません。

次のタスクに移る前に、自己署名証明書を作成しましょう。そうするためには、以下のコマンドを入力してX509 SSL証明書を作成します。この証明書は、SHA256暗号化を使用し、2048ビットのRSA鍵長を使用して365日間有効となります。証明書は作業ディレクトリに保存されます。

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

これで、証明書をブラウザやサーバーにインポートする準備ができました。

OpenSSLを使用したCSR、証明書、鍵の検証

CSR、秘密鍵、証明書、またはPKCS#12の情報を確認すると、SSLエラーのトラブルシューティングに時間を節約できます。たとえば、証明書の作成に間違ったキーが使用されている場合があります。証明書に誤った識別情報が含まれている可能性もあります。

まず、reqコマンドといくつかのパラメータを使用してCSRを確認しましょう:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

このガイドの最初にCSRを作成する際に入力した国名、組織名、およびメールアドレスなどの詳細情報は、正確に一致している必要があります。

また、x509サブコマンドを使用して証明書を確認することもできます。いくつかのパラメータを指定します:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

OpenSSLを使用して証明書を変換する

特定の証明書形式を使用しないアプリケーションがある場合があります。たとえば、HAproxyというアプリケーションでは、DER形式の証明書(.crt .cer .der)が必要な場合に、PEM形式の証明書が提供される可能性があります。

証明書の変換を実演するために、以前に作成した自己署名証明書をDER形式(certificate.crt)からPEM形式に変換してみましょう。以下のコードスニペットのコードを使用します。

次のコマンドは、-informパラメータを使用して-inファイルの形式に一致する形式で-out形式を指定しています。

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

PEMからDER形式への変換も同じように逆の順序で行うこともできます。以下に示すように。

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

そして最後に、PKCS#12をPEM形式に変換したり、PEMをPKCS#12に変換したりすることもできます。これは、秘密鍵と証明書を含むファイル形式です。PEM形式に変換するには、pkcs12サブコマンドを使用します。

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

また、-exportを使用してPEM形式の証明書と秘密鍵をPKCS#12形式に変換することもできます。以下の例では、SomeCertificate.crtを入力ソースとして、秘密鍵を使用してPKCS#12形式の証明書をエクスポートしています。-certfileオプションの値にMyCACert.crtを使用することで、SomeCertificate.crtを検証することもできます。

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

トラブルシューティングとデバッグ

CSR、証明書、およびキーペアの作成と変換ができるようになったので、それらのトラブルシューティングとデバッグ方法を学ぶ時が来ました。OpenSSLには、問題をトラブルシューティングするためのコマンドが用意されています。

また、OpenSSLを使用して証明書のファイル整合性をチェックし、データの破損の可能性をテストすることもできます。MD5チェックサムを使用して、次のコード例を使用して証明書、キー、およびCSRをテストできます。

# 証明書
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# 公開鍵/秘密鍵
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# 証明書要求
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# 外部SSL接続のチェック
openssl s_client -connect www.google.com:443

元のハッシュを取得したら、その元のハッシュと現在のハッシュを比較して、証明書が変更されたり破損していないことを確認できます。

以下は、PowerShellで実行された場合のコードのサンプルです:

Sample troubleshooting command output with OpenSSL in PowerShell

概要

この記事では、Windows 10にOpenSSLをインストールおよび設定する方法、CSR、キーペア、およびSSL証明書の作成方法について学びました。さらに、異なる証明書形式間の変換や、組み込みのサブコマンドを使用した基本的なトラブルシューティング方法についても学びました。

追加リソース

Source:
https://adamtheautomator.com/openssl-windows-10/