なぜこれが必要なのですか?
2台のサーバーがあり、それらが自分で動作し、定期的にHTTP / HTTPSプロトコルを使用して相互に何かを尋ねたいとします。
HTTPプロトコルは安全ではなく、ハニーサーバー間の通信にHTTPSプロトコルを使用することは論理的です。
このような通信を整理するには、2つのSSL証明書が必要です。
サーバーが1つの組織に属している場合、証明書を購入するよりも自分で証明書に署名する方が簡単で安全です。
CAを作成します
最初のコマンドはルートキーを作成します
openssl genrsa -out rootCA.key 2048
私にとっては、2048ビットキーで十分です。必要に応じて、4096ビットキーを使用できます。
2番目のコマンドは、ルート証明書を作成します。
openssl req -x509 -new -key rootCA.key -days 10000 -out rootCA.crt
ここで、質問に答えることができます。
Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg server FQDN or YOUR name) []: Email Address []:
有効期限である10,000日間は、GoogleがGoogle PlayのAndroidアプリケーションに署名する必要があるおよその証明書の有効期限です。 あなたが警鐘を鳴らしているなら、1、2年の間サインアップしてください。
それだけです! これで、サーバー用の証明書を作成し、クライアントコンピューターにルート証明書をインストールできます。
CAによって署名された証明書を作成します
キーを生成します。
openssl genrsa -out server101.mycloud.key 2048
証明書要求を作成します。
openssl req -new -key server101.mycloud.key -out server101.mycloud.csr
サーバー名を示すことが重要です:ドメインまたはIP(たとえば、 server101.mycloudドメイン)
Common Name (eg, YOUR name) []: server101.mycloud
ルート証明書で証明書リクエストに署名します。
openssl x509 -req -in server101.mycloud.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server101.mycloud.crt -days 5000
クライアントはルート証明書rootCA.crtをインストールする必要があります
rootCA.crt-友人に与える、インストールする、サーバーではなくコピーする、公開アクセスする
rootCA.key-秘密にすべき
ルート証明書のインストール
窓
IE、Chrome-Windows証明書リポジトリを使用します。
それへの私の道はこれです:
Chrome-設定-証明書の管理...
[信頼されたルート証明機関]-[インポート]-[rootCA.crt]タブを選択します
クロムを再起動
Windows上のFireFoxには独自のリポジトリがあります。
Javaには独自のリポジトリがあります。
Mac OS X
Safari、FireFox、Chrome-システムリポジトリを使用します。
KeyChain Accessを起動します。
[ファイル]メニュー-[アイテムのインポート(ログインまたはシステム)]-[ rootCA.crtファイルを選択します。
尋ねられたら、答えます-常に信頼します。
![](https://habrastorage.org/storage3/c10/72a/8ab/c1072a8abc92f1be5eab3f1c990a0a33.png)
個人用のSafariの場合は、ログインを選択するだけです。
![](https://habrastorage.org/storage3/8e9/2c8/ea0/8e92c8ea0716f45c8f957bcf3340ee4b.png)
Ubuntuで
sudo mkdir /usr/share/ca-certificates/extra sudo cp rootCA.crt /usr/share/ca-certificates/extra/rootCA.crt sudo dpkg-reconfigure ca-certificates sudo update-ca-certificates
Goサーバープログラム
Goのサーバープログラムはmyserver.goで、署名済み証明書を使用します。
package main import ( "log" "net/http" ) func main() { http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("./files/")))) go func() { log.Fatal(http.ListenAndServeTLS(":8443", "server101.mycloud.crt", "server101.mycloud.key", nil)) }() http.ListenAndServe(":8080", nil) }
go run myserver.go
server101.mycloudサーバーでプログラムを実行すると、ブラウザーはページhttps://server101.mycloud:8443 /で誓うことはなく、ルート証明書としてシステムにrootCA.crtをインストールした場合、ネイティブとして開きます。
![](https://habrastorage.org/storage3/a92/389/84e/a9238984eb1c214f02c801079b28cac9.png)
Pythonのサーバー
import BaseHTTPServer, SimpleHTTPServer, ssl httpd = BaseHTTPServer.HTTPServer(('localhost', 8443), SimpleHTTPServer.SimpleHTTPRequestHandler) httpd.socket = ssl.wrap_socket (httpd.socket, certfile='server101.mycloud.pem', server_side=True) httpd.serve_forever()
# cat server101.mycloud.key server101.mycloud.crt > server101.mycloud.pem # python myserver.py
PS
ワイルドカード証明書は安全ではないことに言及することが重要だと思います。攻撃者が1つのサーバーからワイルドカード証明書を取得すると、他のすべてのサーバーが危険にさらされます。 仮想クラウドサーバーはこれまでになく人気があります。 多くの場合、バックグラウンドタスクは個別の仮想サーバーで実行されます。 このようなサーバーの数は常に増加しています。 その認証局は、システム全体の重要なセキュリティ要素です。