スキップしてメイン コンテンツに移動

IPアドレス指定の自己サーバー証明書で、iPad/iPhoneから httpsでアクセスする

enter image description here

やりたい事

iPad/iPhoneから、IPアドレス指定で、社内のWEBサーバとhttps通信します。

通常は、サーバ証明書を、ドメイン名で発行して https化します。
しかし、iPad/iPhoneから、ローカルサーバにドメイン名(ホスト名)でアクセスするには、名前解決の為のDNSサーバが必要になります。

ドエミン名(ホスト名),での接続イメージ
[ドメイン名(ホスト名)で iPad/iPhoneからアクセスする場合]

開発用途の為に、DNSサーバを用意するのは面倒なので、今回はOpenSSLを使って、IPアドレスに対してサーバ証明書を発行していきたいと思います。
そうすれば、https://192.168.xxx.xxxなどのIPアドレス指定で、https通信が可能となり、結果DNSサーバが不要になります。

IPアドレスでの接続イメージ
[IPアドレスで iPad/iPhoneからアクセスする場合]

環境

今回構築する環境は以下の通りです。

  • Webサーバ

・Windows Server 2012
・IIS

  • クライアント

・iPad, IPhone ( IOS 12 )

CA証明書(ルート証明書)の作成

まずは、自己CA証明書を作成していきます。

CA証明書の秘密鍵を作成

openssl genrsa 2048 > ca.key

CA証明書要求を作成

コマンド入力後、いくつかの質問をされるので、適切に答えます。

openssl req -new -key ca.key -out ca-certificate-request.csr

[質問の内容と回答の例]

Country Name (2 letter code) []:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) []:Minato-ku
Organization Name (eg, company) []:my-company
Organizational Unit Name (eg, section) []:my-section
Common Name (eg, fully qualified host name) []:Local System CA
Email Address []:sample@example.com

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

CA証明書要求に自己署名し、CA証明書を作成

CA証明書の期限切れが発生しないよう、有効期限-daysに大きめの日数を入力しています。

openssl req -x509 -key ca.key -in ca-certificate-request.csr -out ca-certificate.crt -days 3650

CA証明書をインストール (信頼済みの証明書として登録)

作成した自己CA証明書を、Windows Server / iPad・IPhone に登録します。

  • Windows Server
  1. ca-certificate.をダブルクリックします。

CA証明書をダブルクリック

  1. [インストール]をクリック

証明書のインストール

  1. 証明書ストアに[信頼されたルート証明機関]を選択

証明書ストアの選択

  • iPad / iPhone

iPadでの画面イメージで説明します。(iPhoneでも同じ手順です)

  1. CA証明書ca-certificate.crtをメール等で、 iPadに送りつけます。(DropBox等でも可)

CA証明書をタップ

  1. ファイルをクリックして、CA証明書をインストールします。

インストールボタンをタップ

警告画面で再度インストールボタンをタップ

  1. 設定 -> [一般] -> [証明書信頼設定]を選択します。

証明書信頼メニューをタップ

  1. インストールしたCA証明書の信頼設定をONにします。

CA証明書を信頼設定をONにする

サーバ証明書の作成

IISでサーバー証明書要求を作成

インターネット インフォメーション(IIS)マネージャーを開いて、サーバ証明書のアイコンを選択します。

ホーム画面からサーバ証明書アイコンをクリック

「証明書の要求の作成」のリンクをクリック

証明書要求の作成リンクをクリック

識別名プロパティに、必要事項を入力します。
一般名には、Webサーバのホスト名を入力して下さい。

識別名プロパティを入力

暗号化プロバイダを選択して[次へ]

暗号化サービスプロバイダーの選択

サーバ証明書要求の保存先を選択して、[保存]をクリック
※ 保存先は、CA証明書を作ったフォルダと同じ所を指定して下さい

証明書要求の保存先選択

extfileの作成

v3.extというファイル名で、以下の内容のファイルを作成します。
ファイルの保存先は、CA証明書を作ったフォルダと同じ所です。

[v3.ext]

[SAN]
subjectAltName=@alt_names
basicConstraints=CA:FALSE
[alt_names]
DNS.1=My-Server
IP.1=192.168.111.111 
IP.2=127.0.0.1

DNS.1を、Webサーバのホスト名に書き換える
IP.1を、WebサーバのIPアドレスに書き換える

サーバ証明書の作成

以下のコマンドで、サーバー証明書要求を、CA秘密鍵で署名して、サーバ証明書を作成します。
ここでも、証明書の期限切れが発生しないよう、有効期限-daysに大きめの日数を入力しています。

openssl x509 -req -CA ca-certificate.crt -CAkey ca.key -CAcreateserial -CAserial ca-serial.srl -in server-certificate-request.txt -out server-certificate.crt -days 3650 -extfile v3.ext -extensions SAN

IISで証明書要求の完了を行う

再度、インターネット インフォメーション(IIS)マネージャーを開いて、「証明書の要求の完了」クリック。

証明書作成要求の完了をクリック

作成したサーバ証明書を選択して、[完了]をクリック。

サーバ証明書の選択

登録が成功すると、証明書の一覧に表示されます。

証明書一覧に登録したサーバ証明書が表示される

バインドの編集 (https化)

https化するWebサイトの上で、右クリック -> [バインド]を選択します

右リックバインドの編集

[追加]ボタンをクリックします。

追加ボタンクリック

[種類]にhttpsを選択し、[SSL証明書]に登録したサーバ証明書を選択します

[種類]にhttpsを選択[SSL証明書]に登録したサーバ証明書を選択

動作確認

設定が終わったら、https化されているか確認しましょう。

ブラウザを開いて、アドレスに https://<WEBサーバのIPアドレス>を入力します。
開いたページのアドレスバーを見て、下のイメージのようになっていればOKです。

最後に

正直手順が多くて、少し大変でした。
でも、一度環境を作ってしまえば、証明書の期限を気にせず、ずっと使えるので、かなり重宝すると思います。

参考にしたサイト

https://kanasys.com/tech/47

スポンサーリンク
スポンサーリンク
スポンサーリンク

コメント

このブログの人気の投稿

axiosの使い方まとめ (GET/POST/例外処理)

axiosの使い方まとめ (GET/POST/例外処理)最近何かとよく使うJavaScriptでAJAX通信を行うaxiosについて、簡単に使い方をまとめました。GETリクエストをaxiosで送るまずはGETリクエストをaxiosで送る方法です。const res =await axios.get('/users') console.log(res.data)分割代入の記法を使うと、以下のようにも書けますconst{data}=await axios.get('/users') console.log(data)クエリパラメータ (URLパラメータ)を指定クエリパラメータを指定する方法は2つあります。1つ目は、axios.getに指定するURLに直接記述する方法です。axios.get('/user?id=123')2つめは、axios.getの第2引数に、オプション指定する方法です。axios.get('/user',{ params:{ id:123}})POSTリクエストをaxiosで送る次はPOSTリクエストをaxiosで送る方法です。JSON形式でPOSTするJSON形式でPOSTする場合は、axios.postの第2引数に、送信するデータをJavaScriptオブジェクトで指定します。const res =await axios.post('/user',{ id:123, name:'Yamada Tarou'})application/x-www-form-urlencoded形式でPOSTするapplication/x-www-form-urlencoded形式でPOSTする場合は、URLSearchParamsを使います。var params =newURLSearchParams() params.append('id',123) params.append('name','Yamada Tarou')const res =await axios.post('/user', params)axios でファイルをアップロードする画像などのファイルを、axiosでアッ…

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決する

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決するタイトルの通りですが、Windows 8 以降では Windows Form アプリケーションで、コントロールの ImeMode に Katakana や KatakanaHalf を設定しても、カタカナになってくれません。なぜ ImeMode が効かないのか?Windows 8 以降、IME Mode の切り替えは、ユーザー単位で切り替わるようになった為、アプリから IME Mode 制御が出来ないようになりました。
(IME をON にした場合、常に ひらがな モードになます)※ Windows 7までは、IME Modeの切り替えはアプリ単位で行われていた為、問題なくアプリから IME制御が行えました。対処方法Windows 8 以降、IMEの制御は、InputScope クラスの利用が推奨されています。
しかし、InputScope クラスは、WPF、Windows ストアアプリでしか使えない為、Windows Formアプリでは使用できません。
(Windows Form はもう使うな!という事でしょうか (涙) )結論としては、コントールパネルの設定で、IMEの制御をユーザ単位から アプリ単位に変更する事ができます。
これで、Windows Formアプリでも 従来通りIMEの制御を行う事が出来ます。おわりにこの方法だと、アプリをインストールする端末すべてに設定が必要となり、とっても面倒です。。。
しかし、今の所これしか方法がない状態です。
これからは Windows Formではなく、WPFや Windows ストアアプリで作れという事ですかね (^^;)

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]MailKitを使ってメールを送るサンプルコードです。(C#)UTF8/iso-2022-jpのエンコーディング指定、GMail/YahooのSMTPサーバで送るなど、4つのサンプルコードでMailKitの使い方を紹介します。MailKitって何?2017年に.NET標準のSystem.Net.Mail.SmtpClientが廃止予定となり、Microsoftより今後はオープンソースライブラリである、MailKitに置き換えるとアナウンスがありました。既にSmtpClientは非推奨になっており、今後は廃止されていきます。現在、SmtpClientを使用したソースコードには、Visual StudioからMailKitを使うよう警告が出るようになっています。さっそく、MailKitを使ってメールを送信するサンプルコードを作っていきます。UTF8でメールを送信文字エンコーディングを、UTF8でメールを送信するサンプルコードです。
MailKitは、デフォルトの文字エンコーディングがUTF8なっている為、シンプルなコードでメールを送信する事ができます。var host ="<smtp server name>"; var port =25;// or 587using(var smtp =new MailKit.Net.Smtp.SmtpClient()){//SMTPサーバに接続する smtp.Connect(host, port, MailKit.Security.SecureSocketOptions.Auto);//認証が必要な場合は、以下のコメントを解除//smtp.Authenticate("<id>", "<password>");//送信するメールを作成する var mail =new MimeKit.MimeMessage(); var builder =new MimeKit.BodyBuilder(); mail.From.Add(new MimeKit.MailboxAddress("",&quo…