versucht, eine HTTPS-Sitzung mit Client-Zertifikaten von einer selbstsignierten Zertifizierungsstelle arbeiten. Die Verbindung sollte überprüfen, ob alle Zertifikate gültig sind, sowohl auf Client- als auch auf Serverseite.Client-Zertifikate von meiner eigenen CA mit Apache
Der Prozess folgte ich rundweg sich wie folgt:
erstellen Certificate Authority
openssl genrsa -out CA.key 4096 openssl req -new -key CA.key -out CA.csr openssl x509 -req -days 365 -in CA.csr -out CA.crt -signkey CA.key
erstellen Serverzertifikat
openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr openssl ca -in server.csr -cert CA.crt -keyfile CA.key -out server.crt
erstellen Client-Zertifikat
openssl genrsa -out client.key 4096 openssl req -new -key client.key -out client.csr openssl ca -in client.csr -cert CA.crt -keyfile CA.key -out client.crt
konfigurieren Apache
<VirtualHost _default_:443> SSLEngine on SSLCertificateFile "server.crt" SSLCertificateKeyFile "server.key" SSLCACertificateFile "CA.crt" <Directory "/var/www"> SSLVerifyClient optional SSLVerifyDepth 10 SSLOptions +StdEnvVars +ExportCertData </Directory> </VirtualHost>
Jetzt versuche ich, und eine Testverbindung zu machen:
wget \
--post-data 'id=1234' \
--certificate=client.crt \
--ca-certificate=CA.crt \
https://test.example.com:443
Die resultierende Ausgabe von wget zeigt (über und über), teilweise:
HTTP request sent, awaiting response... No data received.
Retrying.
Überprüfung der SSL-Fehlerprotokoll von Apache geben Sie mir die folgenden Meldungen:
[debug] ssl_engine_io.c(1606): [client xx.xx.xx.xx] total of 41 bytes in buffer, eos=1
[client xx.xx.xx.xx] Requesting connection re-negotiation
[debug] ssl_engine_io.c(1908): OpenSSL: I/O error, 5 bytes expected to read on BIO#80b075190 [mem: 80b0ca003]
[debug] ssl_engine_kernel.c(771): [client xx.xx.xx.xx] Performing full renegotiation: complete handshake protocol (client does support secure renegotiation)
[debug] ssl_engine_kernel.c(1892): OpenSSL: Handshake: start
[debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSL renegotiate ciphers
[debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSLv3 write hello request A
[debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSLv3 flush data
[debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSLv3 write hello request C
[info] [client xx.xx.xx.xx] Awaiting re-negotiation handshake
[debug] ssl_engine_kernel.c(1892): OpenSSL: Handshake: start
[debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: before accept initialization
[debug] ssl_engine_io.c(1908): OpenSSL: I/O error, 5 bytes expected to read on BIO#80b075190 [mem: 80b0ca003]
[debug] ssl_engine_kernel.c(1929): OpenSSL: Exit: error in SSLv3 read client hello B
[error] [client xx.xx.xx.xx] Re-negotiation handshake failed: Not accepted by client!?
[debug] ssl_engine_io.c(1650): [client xx.xx.xx.xx] read from buffered SSL brigade, mode 0, 8192 bytes
[debug] ssl_engine_io.c(1725): [client xx.xx.xx.xx] buffered SSL brigade exhausted
[debug] ssl_engine_io.c(1650): [client xx.xx.xx.xx] read from buffered SSL brigade, mode 2, 0 bytes
[info] [client XX:XX:XX:XX::xx] Connection to child 3 established (server register.kiosk.tain.com:443)
[info] Seeding PRNG with 656 bytes of entropy
[debug] ssl_engine_kernel.c(1892): OpenSSL: Handshake: start
[debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: before/accept initialization
die OpenSSL-Client ausführen, um zu sehen, ob es etwas ist hier drin zu helfen:
openssl s_client \
-showcerts \
-connect test.example.com:443 \
-cert client.crt \
-key client.key \
-CAfile CA.crt
In der Antwort ich folgendes sehen:
"Keine Client-Zertifikat CA-Namen gesendet" sieht anders aus, was ich erwarte. Ich möchte Client-Zertifikate.
Wohin gehe ich falsch?
Wahrscheinlich besser auf ServerFault. – Bruno