curl (и openssl) двухсторонняя аутентификация всегда терпит неудачу
Проблема Я пытаюсь использовать curl для отправки запроса POST веб-службе, развернутой на tomcat, с проверкой хоста и клиента (двухсторонняя аутентификация), но я всегда получаю ответ 404 Not Found
. Тот же результат достигается использованием openssl s_client. Я понятия не имею, что я делаю неправильно.
Команда cURL, которую я использовал Ниже приведены команды, которые я использовал и собрал из man-страниц curl, а также поиска в Интернете.
curl 'https://hostURL:<port>/webservice/' -d '{"someRequest": {"name": "lol"}}' -v --cert webserver-cert.pem --key webserver-key.pem --cacert root-ca.pem
Вывод команды выше:
* Trying <ip>... * Connected to <host> port <port> (#0) * found 1 certificates in root-ca.pem * found 872 certificates in /etc/ssl/certs * ALPN, offering http/1.1 * SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256 * server certificate verification OK * server certificate status verification SKIPPED * common name: <common-name> (matched) * server certificate expiration date OK * server certificate activation date OK * certificate public key: RSA * certificate version: #3 * <data> * compression: NULL * ALPN, server did not agree to a protocol > POST /webservice/ HTTP/1.1 > Host: host:port > User-Agent: curl/7.47.0 > Accept: */* > Content-Length: 32 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 32 out of 32 bytes < HTTP/1.1 404 Not Found < Server: Apache-Coyote/1.1 < Content-Type: text/html;charset=utf-8 < Content-Language: en < Content-Length: 1034 < Date: Tue, 19 Sep 2017 05:42:56 GMT < <!DOCTYPE html><html><head><title>Apache Tomcat/8.0.14 - Error report</title><style type="text/css">H1 H2 H3 BODY B P A A.name .line </style> </head><body><h1>HTTP Status 404 - /webservice/</h1><div class="line"></div><p><b>type</b> Status report</p><p><b>message</b> <u>/webservice/</u></p><p><b>description</b> <u>The requested resource is not available.</u></p><hr class="line"><h3>Apache Tomcat/8.0.14</h3></bo* Connection #0 to host host left intact dy></html>
Команда openssl s_client, которую я использовал Следующая команда openssl, которую я использовал, построена на чтении ее страниц руководства и поиске в Интернете:
openssl s_client -connect host:port -cert webserver-cert.pem -key webserver-key.pem -CAfile root-ca.pem -msg -state
Следующий вывод:
CONNECTED(00000003) SSL_connect:before/connect initialization >>> TLS 1.2 [length 0005] 16 03 01 01 2c >>> TLS 1.2 Handshake [length 012c], ClientHello <data> SSL_connect:SSLv2/v3 write client hello A <<< ??? [length 0005] 16 03 03 0c 65 <<< TLS 1.2 Handshake [length 0051], ServerHello <data> SSL_connect:unknown state <<< TLS 1.2 Handshake [length 0ac3], Certificate <data> depth=1 C = FR, ST = state, L = name, O = name, CN = name CA verify return:1 depth=0 C = FR, ST = country, L = state, O = host, OU = Web server, CN = host verify return:1 SSL_connect:unknown state <<< TLS 1.2 Handshake [length 014d], ServerKeyExchange <data> SSL_connect:unknown state <<< TLS 1.2 Handshake [length 0004], ServerHelloDone 0e 00 00 00 SSL_connect:unknown state >>> ??? [length 0005] 16 03 03 00 46 >>> TLS 1.2 Handshake [length 0046], ClientKeyExchange <data> SSL_connect:unknown state >>> ??? [length 0005] 14 03 03 00 01 >>> TLS 1.2 ChangeCipherSpec [length 0001] 01 SSL_connect:unknown state >>> ??? [length 0005] 16 03 03 00 28 >>> TLS 1.2 Handshake [length 0010], Finished 14 00 00 0c 86 20 94 8c f1 d2 32 1d 95 10 40 7c SSL_connect:unknown state SSL_connect:unknown state <<< ??? [length 0005] 14 03 03 00 01 <<< TLS 1.2 ChangeCipherSpec [length 0001] 01 <<< ??? [length 0005] 16 03 03 00 28 <<< TLS 1.2 Handshake [length 0010], Finished 14 00 00 0c 04 c9 ef 15 6e cf 7f 28 2b 8f b3 4e SSL_connect:unknown state --- Certificate chain 0 s:/C=FR/ST=country/L=state/O=host/OU=Web server/CN=host i:/C=FR/ST=state/L=name/O=name/CN=name CA 1 s:/C=FR/ST=state/L=name/O=name/CN=name CA i:/C=FR/ST=state/L=name/O=name/CN=name CA --- Server certificate -----BEGIN CERTIFICATE----- <data> -----END CERTIFICATE----- subject=<data> issuer=<data> --- No client certificate CA names sent Peer signing digest: SHA512 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 3229 bytes and written 431 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure RenFRotiation IS supported Compression: NONE Expansion: NONE No ALPN nFRotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-GCM-SHA256 Session-ID: <data> Session-ID-ctx: Master-Key: <data> Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1505765192 Timeout : 300 (sec) Verify return code: 0 (ok) ---
Затем я ввожу запрос на почту следующим образом:
POST /webservice/ HTTP/1.1 Host: <host>:<port> Accept: */* Content-Length: 86 Content-Type: application/json }
Я также получаю ту же ошибку 404 впоследствии.
Подробнее
Я уверен, что путь к веб-сервису существует. На самом деле, у меня есть клиент, встроенный в Java, который успешно взаимодействует с веб-сервисом. (это также означает, что кот правильно настроен)
Я уверен, что URL и порт, а также сертификат CA являются правильными. Использовали их для связи с другим веб-сервисом, который не требует аутентификации клиента, и они работали просто отлично.
Ниже приведены версии curl и openssl.
локон
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
OpenSSL
OpenSSL 1.0.2g 1 Mar 2016 built on: reproducible build, date unspecified platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) compiler: cc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM OPENSSLDIR: "/usr/lib/ssl"
Я схожу с ума здесь, поскольку я просматривал команды, чтобы удостовериться, что каждый введенный мной символ является правильным. Делали это несколько раз. Поискал в интернете и узнал, что команды, которые я использую, правильные (по крайней мере, я так думаю).
Кроме того, почему я получаю ALPN, server did not agree to a protocol
от curl и SSL_connect:unknown state
от openssl?
Любая помощь по этому вопросу будет принята с благодарностью.
Заранее спасибо.
0 ответов на вопрос
Похожие вопросы
-
9
В чем разница между командами "su -s" и "sudo -s"?
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
4
Каковы различия между основными дистрибутивами Linux? Я замечу?
-
-
2
Ограничить использование процессора для Flash в Firefox?
-
2
Как мне заставить мой микрофон работать под Debian GNOME?
-
2
Конки установки - образцы / идеи?
-
3
Каковы различия между оконными менеджерами Linux?
-
2
ThunderBird / Синхронизация освещения с SE k770i
-
4
Файловая система Linux
-
6
Полноэкранная медленная вспышка в KDE 4