3

SSL接続用に5671ポートをリッスンするRHEL7上のRabbitMQサーバーに接続しようとしています。

RabbitMQ server's SSL listener has been configured like this:
[
  {rabbit, [
     {ssl_listeners, [5671]},
     {ssl_options, [{cacertfile,"/etc/pki/tls/certs/samqp.dcu.ie.chain"},
                {certfile,"/etc/pki/tls/certs/samqp.dcu.ie.crt"},
                {keyfile,"/etc/pki/tls/private/samqp.dcu.ie.key"},
                {verify,verify_peer},
                {fail_if_no_peer_cert,false}]}
   ]}
]

クライアント側では、次の例外メッセージが表示されます。

クライアント マシンは Ubuntu 14.04 LTS です。

クライアントは、「vidalvaro/php-amqplib」ライブラリを使用してサーバーと通信する Moodle カスタム プラグインです。

ドキュメントに従って作成された自己署名証明書の実際のパスとファイル名は次のとおりです: https://www.rabbitmq.com/ssl.html

$sslOptions = array(
            'cafile' => '/home/duro/testca/cacert.pem',
            'local_cert' => '/home/duro/client/key-cert.pem',
            'peer_name'=>'samqp.dcu.ie',
            'verify_peer_name' => true
            );

PHP には、1 つのファイルに連結された証明書とキーを使用する必要があるようです。したがって、'key-cert.pem' です。

これは、実際のURLを含め、クライアントから接続する方法です:

$connection = new AMQPSSLConnection('samqp.dcu.ie.crt', 5671, 'rMQUsername', 'rMQPasswd', '/', $sslOptions)

クライアント側では、次の例外メッセージが表示されます。

"stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed" 

サーバー側で /var/log/rabbitmq/rabbit@sphinx.log を見ると、次のエラーが表示されます。

=ERROR REPORT==== 3-Mar-2016::14:08:26 ===
SSL: certify: ssl_alert.erl:93:Fatal error: unknown ca

では、この接続を機能させるにはどうすればよいでしょうか。

4

2 に答える 2

1

... エラー:14090086:SSL ルーチン:ssl3_get_server_certificate:証明書の検証に失敗しました"

次の名前のサーバーに接続していますsphinx.dcu.ie:

$connection = new AMQPSSLConnection('sphinx.dcu.ie', 5671, ...)

ただし、証明書のホスト名は次のsamqp.dcu.ieとおりです。

X509v3 Subject Alternative Name: 
    DNS:samqp.dcu.ie

2 つのうちのいずれかを行う必要があります。最初に、証明書で指定されたサーバーに対して RabbitMQ 要求を行います。または 2 番目に、使用する DNS 名で発行された新しい証明書を取得します。

Subject Alternate Name (SAN)には、いくつでも DNS 名を配置できます。localhost、、 などのデバッグ名とテスト名を入力することがよくlocalhost.localdomainあり127.0.0.1ます。


編集:この問題について:

...そしてサーバーのログには次のように書かれています:

=ERROR REPORT==== 3-Mar-2016::09:52:41 ===
SSL: certify: ssl_handshake.erl:1490:Fatal error: unknown ca

質問のリビジョン 9程度の情報と次の情報に戻る必要があります。

depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert  High Assurance EV Root CA
verify return:1
depth=1 C = NL, ST = Noord-Holland, L = Amsterdam, O = TERENA, CN =   TERENA SSL High Assurance CA 3
verify return:1
depth=0 businessCategory = Government Entity, jurisdictionC = IE,   serialNumber = Government Entity, street = Glasnevin, street = Dublin City   University, postalCode = IE, C = IE, ST = Ireland, L = Dublin, O = Dublin  City University, OU = ISS, CN = samqp.dcu.ie
verify return:1

何百もの CA を含み、そのほとんどが間違っているファイルは必要ありません。ca-cert.pem必要な CA は 1 つだけで、かつてはDigiCert High Assurance EV Root CAと呼ばれていました。TERENA SSL High Assurance CA 3と呼ばれる中間のものも必要です

DigiCert 高保証 EV ルート CA 証明書

DigiCert 高保証 EV ルート CAは、 DigiCert Trusted Root Authority Certificatesからダウンロードできます。次の属性があります。

  • シリアル番号: 02:AC:5C:26:6A:0B:40:9B:8F:0B:79:F2:AE:46:25:77
  • 拇印: 5FB7EE0633E259DBAD0C4C9AE6D38F1A61C7DC25

ダウンロードすると、DER形式になります。次を使用してPEM形式に変換する必要があります。

$ openssl x509 -inform der -in DigiCertHighAssuranceEVRootCA.crt \
    -outform PEM -out DigiCertHighAssuranceEVRootCA.pem

それで:

$ cat DigiCertHighAssuranceEVRootCA.pem 
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
...
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----

TERENA SSL 高保証 CA 3 証明書

次に、 TERENA SSL High Assurance CA 3で同じことを行う必要があります。TERENA SSL High Assurance CA Root Certificatesで見つけることができると思います。その属性を持つもの:

  • シリアル番号 0b:5c:34:35:67:5b:24:67:c0:d7:32:37:f9:0d:5f:94
  • 指紋 SHA1 A7:8A:AB:DE:7F:5B:77:15:40:D3:33:B5:05:87:4C:82:04:AA:D2:06

MY-CACERT.pem

パス構築に必要な CA を取得したら、次の手順を実行します。

$ cat DigiCertHighAssuranceEVRootCA.pem > my-cacert.pem
$ cat TERENA_SSL_High_Assurance_CA_3.pem >> my-cacert.pem
$ echo "" >> my-cacert.pem

それで:

$ cat my-cacert.pem 
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
...
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE4DCCA8igAwIBAgIQC1w0NWdbJGfA1zI3+Q1flDANBgkqhkiG9w0BAQsFADBs
...
dnnqz5SeAs6cbSm551qG7Dj8+6f/8e33oqLC5Ldnbt0Ou6PjtZ4O02dN9cnicemR
1B0/YQ==
-----END CERTIFICATE-----

最後に、 を使用しますmy-cacert.pem


OpenSSL のs_client. しかし、私は外の世界から接続できないようです:

$ openssl s_client -connect sphinx.dcu.ie:5671 -tls1 \
    -servername sphinx.dcu.ie -CAfile my-cacert.pem 

接続できる場合は、Verify Ok (0)(私の記憶が正しければ)を取得する必要があります。

于 2016-03-02T22:26:22.867 に答える