1

カウボーイの ssl ディレクトリには、3 つのファイル cowboy-ca.crtが 表示さserver.crtれ ますserver.key。おそらく、必要のないディレクトリのどこかにあるでしょうcowboy-ca.key

cowboy-ca.crtこれはデフォルトの CA の公開鍵であり、サーバーのキー ペアの csr ファイルを使用して署名するために使用されていると推測できserver.crtます。クライアントがカウボーイに接続すると、server.crt ファイルをダウンロードしてインストールし、安全な接続を確立します。サーバー、私は正しいですか?問題は、openssl と自分の CA を使用して、これらすべてのファイルをどのように生成するかです。

4

2 に答える 2

2

これについてはネット上にチュートリアルがありますが、たまたま以前に行った記録があります。必要以上に多くの情報が含まれていますが、独自の CA とそれから署名された証明書を作成する基本を達成する方法を示します。以下に貼り付けた私の記録は、CA を作成し、CA によって署名された中間 CA を作成し、最後にサーバーで使用できる証明書を作成します。明らかに中間 CA は必要ないため、中間部分をスキップして、中間 CA ではなくルート CA で最終 / 終了証明書に署名する必要があります。たとえば、end.crtを作成するときは、.. /inter_ca/inter.key 、 ../root_ca/rootca.keyなどを使用します。

ここで正しい質問をしていて、自己署名証明書が本当に必要なものであると仮定しています。

証明書とキーの作成後、Apache の構成に関するガイダンスと、OpenSSL ツールを使用して正しく動作していることを確認する方法の説明もあります (任意の SSL TCP 接続で、Cowboy やその他のものにも適用できます)。 )。これにより、信頼チェーンが表示されますが、中間 CA を省略するため、深さ 2 ではなく深さ 1 になります。

操作するディレクトリをいくつか作成します。

mkdir inter_ca_demo
cd inter_ca_demo
mkdir root_ca inter_ca end_cert
cd root_ca

キーを作成します。

openssl genrsa -out rootca.key 2048

出力は次のようになります。

Generating RSA private key, 2048 bit long modulus
...........................................................+++
.............................+++
e is 65537 (0x10001)

自己署名してルート CA 証明書を作成します (証明書にエンコードされるさまざまな情報を入力する必要があります)。

openssl req -x509 -new -nodes -key rootca.key -days 1024 -out rootca.pem

次のようになります (ここで入力内容を確認できます)。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:GB
State or Province Name (full name) [Some-State]:London
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Method Analysis Ltd
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:methodanalysis.com
Email Address []:ca_admin@methodanalysis.com

中間証明書に進む前に、ルート証明書の名前を変更するか、コピーするか、ルート証明書へのリンクを作成して、ハッシュ アルゴリズムで見つけられるようにする必要があります。これは、CA パスに信頼できる証明書が多数ある場合にパフォーマンスが低下しないようにするためです。これを行うには、次のコマンドを使用してハッシュが何であるかを調べる必要があります。

openssl x509 -noout -hash -in rootca.pem

出力は次のようになります。

03ed4e37

次に、リンクを作成し、YOUR HASHに.0を追加します (前のコマンドからの出力として):

ln -s rootca.pem 03ed4e37.0

次に、中間 CA キーと CSR (証明書署名要求) を作成します (証明書にエンコードされるさまざまな情報を入力する必要があります)。

cd ../inter_ca
openssl genrsa -out inter.key 2048
openssl req -new -key inter.key -out inter.csr

次のようになります。

$ openssl genrsa -out inter.key 2048
Generating RSA private key, 2048 bit long modulus
.........................................+++
..............................................................+++
e is 65537 (0x10001)
$ openssl req -new -key inter.key -out inter.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:GB
State or Province Name (full name) [Some-State]:London
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Intermediate certificates R US Ltd    
Organizational Unit Name (eg, section) []:               
Common Name (e.g. server FQDN or YOUR name) []:intermediatecasrus.com
Email Address []:ca_admin@intermediatecasrus.com

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

ここで、これが中間 CA であることを示すデータを含むファイル (v3x509extensions.txt) を作成し、ルート CA で署名して中間証明書を生成します。

echo 'basicConstraints=CA:TRUE' > v3x509extensions.txt
openssl x509 -req -extfile v3x509extensions.txt -in inter.csr -CA ../root_ca/rootca.pem -CAkey ../root_ca/rootca.key -CAcreateserial -out inter.crt -days 200

次のようになります。

Signature ok
subject=/C=GB/ST=London/L=London/O=Intermediate certificates R US Ltd/CN=intermediatecasrus.com/emailAddress=ca_admin@intermediatecasrus.com
Getting CA Private Key

次に、最終的なキー (SSL Web サイト (たとえば) に使用するキー) を作成し、そこから CSR を作成し、中間証明書で署名して、新しい証明書を生成します。

cd ../end_cert
openssl genrsa -out end.key 2048
openssl req -new -key end.key -out end.csr
openssl x509 -req -in end.csr -CA ../inter_ca/inter.crt -CAkey ../inter_ca/inter.key -CAcreateserial -out end.crt -days 500

次のようになります。

$ openssl genrsa -out end.key 2048
Generating RSA private key, 2048 bit long modulus
................................................+++
.....................................................+++
e is 65537 (0x10001)
$ openssl req -new -key end.key -out end.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:GB
State or Province Name (full name) [Some-State]:London
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:End User Ltd
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:intermediatecademo-enduser.com
Email Address []:support@intermediatecademo-enduser.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$ openssl x509 -req -in end.csr -CA ../inter_ca/inter.crt -CAkey ../inter_ca/inter.key -CAcreateserial -out end.crt -days 500
Signature ok
subject=/C=GB/ST=London/L=London/O=End User Ltd/CN=intermediatecademo-enduser.com/emailAddress=support@intermediatecademo-enduser.com
Getting CA Private Key

この時点で、信頼チェーンを検証することで、問題がないように見えることを確認できます。ここでは、中間証明書と「エンド」証明書を連結し、ルート CA パスのみを使用してそれらを検証します (「エンド」証明書は検証できないことに注意してください)。中間 CA がないため、「エンド」証明書で指定する必要があります):

cat ../inter_ca/inter.crt end.crt | openssl verify -CApath ../root_ca

出力は次のようになります。

stdin: OK

たとえば、これらのキーを apache で使用した場合、次のように構成できます。

SSLCertificateFile       FULL_PATH_TO/inter_ca_demo/end_cert/end.crt
SSLCertificateKeyFile    FULL_PATH_TO/inter_ca_demo/end_cert/end.key

SSLCertificateChainFile  FULL_PATH_TO/inter_ca_demo/inter_ca/inter.crt

SSLCACertificatePath     FULL_PATH_TO/inter_ca_demo/root_ca

Apache は独自の証明書とともに中間証明書を提供するようになりました。これにより、Web クライアントは「openssl verify」を使用して上記と同じ種類の検証を (他のチェックと共に) 実行できます。

これらの証明書を apache で使用し、作成した「エンド」証明書に合わせて「intermediatecademo-enduser.com」という名前の Web サイトを作成した場合は、openssl を使用して、クライアントの観点から証明書を検証することもできます。

openssl s_client -connect intermediatecademo-enduser.com:443 -CApath root_ca -verify 5

出力は次のようになります。

verify depth is 5
CONNECTED(00000004)
depth=2 C = GB, ST = London, L = London, O = Method Analysis Ltd, CN = methodanalysis.com, emailAddress = ca_admin@methodanalysis.com
verify return:1
depth=1 C = GB, ST = London, L = London, O = Intermediate certificates R US Ltd, CN = intermediatecasrus.com, emailAddress = ca_admin@intermediatecasrus.com
verify return:1
depth=0 C = GB, ST = London, L = London, O = End User Ltd, CN = intermediatecademo-enduser.com, emailAddress = support@intermediatecademo-enduser.com
verify return:1
---
Certificate chain
 0 s:/C=GB/ST=London/L=London/O=End User Ltd/CN=intermediatecademo-enduser.com/emailAddress=support@intermediatecademo-enduser.com
   i:/C=GB/ST=London/L=London/O=Intermediate certificates R US Ltd/CN=intermediatecasrus.com/emailAddress=ca_admin@intermediatecasrus.com
 1 s:/C=GB/ST=London/L=London/O=Intermediate certificates R US Ltd/CN=intermediatecasrus.com/emailAddress=ca_admin@intermediatecasrus.com
   i:/C=GB/ST=London/L=London/O=Method Analysis Ltd/CN=methodanalysis.com/emailAddress=ca_admin@methodanalysis.com
---
Server certificate

...
...
...

    Start Time: 1445696823
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

データが送信されるのを待ってハングします。CTRL+C で終了できます。

于 2016-01-15T16:30:13.477 に答える
0

基本的に、証明書の関係については正しいです。サーバー証明書と秘密鍵、および CA 証明書があります。

これらはテスト目的のみを目的としているため、カウボーイの作成者は、サーバー証明書の生成に使用した CA 秘密鍵をわざわざ含めなかったと思います。

SSL 証明書に関して言えば、カウボーイについて特別なことは何もありません。ssl_hello_world の例を見ていると仮定すると、証明書がssl_hello_world_app.erlで使用されていることがわかります。

そこから、これらの SSL オプションが Erlang SSL アプリケーションに渡されます

ドキュメントには、これらが標準の PEM でエンコードされた証明書とキー ファイルであると記載されています (完全には明らかではありません)。たとえば、OpenSSL を使用して生成できます。

于 2016-02-07T20:52:02.513 に答える