質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
WCF

WCFは、.NET Frameworkの提供する機能の一つ。サービス指向アプリケーション構築のためのフレームワークです。ネットワークを通して、異なるコンピュータ上で動くソフトウェア間の通信が可能になります。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

受付中

巷で行われているクライアント証明書の作成・クライアントへのインストールを知りたい。

firstlast
firstlast

総合スコア138

WCF

WCFは、.NET Frameworkの提供する機能の一つ。サービス指向アプリケーション構築のためのフレームワークです。ネットワークを通して、異なるコンピュータ上で動くソフトウェア間の通信が可能になります。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0回答

0リアクション

1クリップ

488閲覧

投稿2019/11/16 05:41

編集2019/11/17 05:57

#概要
動作確認できているセルフホスト式のRESTFul WEBサービスをSSLで通信するように修正しました。
ルート証明書(オレオレ)、クライアント証明書を作り、ルート証明書とポート番号を紐づけ、クライアント証明書をクライアントにインストールしました。
ちゃんと動作することは確認できたのですが、やってることは大雑把にあっていますでしょうか?
よろしくお願いいたします。

#質問内容
###1. クライアント証明書の作成方法は、以下で特におかしくないでしょうか?

PowerShell

#5.クライアント証明書を作成する。 $client_cert = New-SelfSignedCertificate -Type Custom -DnsName $client_cert_name -KeySpec Signature -Subject "CN=${client_cert_name}" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -Signer $root_cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")

###2. クライアント証明書のインストール手順は以下で正しいでしょうか?
サーバーで、クライアント証明書をエクスポート
クライアントで、クライアント証明書をインポートする

サーバーで、クライアント証明書をエクスポートする手順
図1.サーバーで、クライアント証明書をエクスポートする手順

図2.クライアントで、クライアント証明書をインポートする手順
図2.クライアントで、クライアント証明書をインポートする手順

###3. サーバーで、クライアント証明書をエクスポートする作業(図1)を、PowerShellのExport-PfxCertificateコマンドを使ってバッチ処理に組み込みたいのですが、クライアントでのインポート時にパスワードエラーになってインポートできません。何が原因でしょうか?
図3
図3

###4. その他の疑問

  • サーバー上でクライアント証明書用のpfxファイルを作成する際に同梱する秘密鍵は、SSL通信が行われるときに各クライアントがサーバーが送ってくる共通鍵を解読するために使われるものでしょうか?
  • クライアント証明書は、クライアントコンピューターに配布してインストールしてもらうものですか?
  • クライアント証明書を複数のクライアントコンピューターにインストールする度に、クライアント証明書を作らなくても大丈夫でしょうか?
参考にしたサイト

PowerShell を使用したポイント対サイトの証明書の生成とエクスポート
PFXとは

よろしくお願い致します。

ソースコード

PowerShell

$current_directory = 'D:\Work\TestService2' $root_cert_name = 'FirstRootCert' $client_cert_name = 'FirstClientCert' #$imd_sert_name = 'FirstImdCert' $pwd = 'xxxxxxxx' $port_no = 5000 $service_guid = '541eea84-c788-4d23-b6b2-f5210bcdf5c5' #1.カレントディレクトリを変更する。 Set-Location $current_directory #2.パスワードを暗号化する。 [System.Security.SecureString]$secure_pwd = ConvertTo-SecureString -String $pwd -Force -AsPlainText #3.ルート証明書を作成する。 $root_cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=${root_cert_name}" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign #4.ルート証明書から個人情報交換ファイルと秘密キーをエクスポートする。 [String]$rootCertPath = Join-Path -Path 'cert:\CurrentUser\My\' -ChildPath "$($root_cert.Thumbprint)" Export-PfxCertificate -Cert $rootCertPath -FilePath "${root_cert_name}.pfx" -Password $secure_pwd Export-Certificate -Cert $rootCertPath -FilePath "${root_cert_name}.crt" #5.クライアント証明書を作成する。 $client_cert = New-SelfSignedCertificate -Type Custom -DnsName $client_cert_name -KeySpec Signature -Subject "CN=${client_cert_name}" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -Signer $root_cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2") #6.クライアント証明書から個人情報交換ファイルと秘密キーをエクスポートする。 [String]$rootCertPath = Join-Path -Path 'cert:\CurrentUser\My\' -ChildPath "$($client_cert.Thumbprint)" Export-PfxCertificate -Cert $rootCertPath -FilePath "${client_cert_name}.pfx" -Password $secure_pwd Export-Certificate -Cert $rootCertPath -FilePath "${client_cert_name}.crt" #7.ルート証明書によって署名された新しい証明書を作成する #$imd_cert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "${imd_sert_name}" -KeyExportPolicy Exportable -KeyLength 2048 -KeyUsage DigitalSignature,KeyEncipherment -Signer $root_Cert #[String]$imdCertPath = Join-Path -Path 'cert:\LocalMachine\My\' -ChildPath "$($imd_cert.Thumbprint)" #Export-PfxCertificate -Cert $imdCertPath -FilePath "${imd_sert_name}.pfx" -Password $secure_pwd #Export-Certificate -Cert $imdCertPath -FilePath "${imd_sert_name}.crt" #8.ローカルコンピューター(LocalMachine)の信頼されたルート証明機関(Root)にルート証明書をインポートし、捺印を取得する。 $temp_cert = Import-PfxCertificate -FilePath "${root_cert_name}.pfx" -CertStoreLocation Cert:\LocalMachine\Root -Password $secure_pwd $hash_code = $temp_cert.Thumbprint #9.ポート番号にSSL証明書を紐づける。 $Command = "http delete sslcert ipport=0.0.0.0:${port_no}" $Command | netsh $Command = "http add sslcert ipport=0.0.0.0:${port_no} certstorename=Root certhash=${hash_code} appid={${service_guid}} clientcertnegotiation=enable " $Command | netsh

環境

Microsoft Windows 10 Pro (Version 1903)
Microsoft Visual Studio Community 2019
Microsoft .NET Framework 4.7.2

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

WCF

WCFは、.NET Frameworkの提供する機能の一つ。サービス指向アプリケーション構築のためのフレームワークです。ネットワークを通して、異なるコンピュータ上で動くソフトウェア間の通信が可能になります。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。