| SSLTAP(1) | NSS Security Tools | SSLTAP(1) |
نام (NAME)
ssltap - پروکسی پایش و شنود بستهها و ارتباطات رمزنگاریشده SSL و TLS
خلاصه دستور (SYNOPSIS)
ssltap [-fhlsvx] [-p port] [hostname:port]
وضعیت (STATUS)
این مستندات هنوز در حال تکمیل است. لطفاً در بازبینی اولیه در Mozilla NSS bug 836477[1] مشارکت کنید.
توضیحات (DESCRIPTION)
ابزار اشکالزدایی SSL با نام ssltap یک پروکسی خط فرمانی آگاه از SSL (SSL-aware) است. این ابزار اتصالات TCP را رصد کرده و دادههای در حال عبور را نمایش میدهد. اگر اتصال از نوع SSL باشد، نمایش دادهها شامل رکوردهای تفسیرشده SSL و مراحل دستتکانی (handshaking) خواهد بود.
گزینهها (OPTIONS)
-f
-h
-l prefix
-p port
شماره درگاههای شناختهشده و متداول به شرح زیر هستند:
* HTTP 80
* HTTPS 443
* SMTP 25
* FTP 21
* IMAP 143
* IMAPS 993 (پروتکل IMAP بر بستر SSL)
* NNTP 119
* NNTPS 563 (پروتکل NNTP بر بستر SSL)
-s
اگر ابزار یک زنجیره گواهی را شناسایی کند، گواهیهای با کدگذاری DER را در فایلهایی در دایرکتوری جاری ذخیره میکند. نام این فایلها بهصورت cert.0x خواهد بود که در آن x شماره ترتیبی گواهی است.
اگر گزینه -s همراه با -h استفاده شود، برای هر رکورد دو بخش مجزا چاپ میشود: خروجی هگز/اسکی ساده و خروجی تجزیهشده SSL.
-v
-x
کاربرد و مثالها (USAGE AND EXAMPLES)
شما میتوانید از ابزار اشکالزدایی SSL برای رهگیری اطلاعات هر اتصالی استفاده کنید. اگرچه میتوانید این ابزار را در سادهترین حالت تنها با اجرای دستور ssltap بدون هیچ گزینهای به جز hostname:port اجرا کنید، اما اطلاعاتی که از این طریق به دست میآورید چندان کاربردی نیست. برای مثال، فرض کنید رایانه توسعه شما intercept نام دارد. سادهترین روش برای استفاده از این ابزار اشکالزدایی، اجرای دستور زیر از یک شل خط فرمان است:
$ ssltap www.netscape.com
برنامه منتظر دریافت یک اتصال ورودی روی درگاه پیشفرض 1924 میماند. در پنجره مرورگر خود، نشانی اینترنتی http://intercept:1924 را وارد کنید. مرورگر صفحه درخواستی را از سرور در www.netscape.com دریافت میکند، اما صفحه توسط ابزار اشکالزدایی روی رایانه intercept رهگیری شده و به مرورگر تحویل داده میشود. در مسیر انتقال به مرورگر، دادهها در شل خط فرمانی که دستور را از آن اجرا کردهاید چاپ میشوند. دادههای ارسالشده از کلاینت به سرور با نمادهای روبهرو احاطه میشوند: --> [ data ] و دادههای ارسالشده از سرور به کلاینت با نمادهای روبهرو احاطه میشوند: <-- [ data ]. جریان داده خام به خروجی استاندارد ارسال شده و به هیچ وجه تفسیر نمیشود. این موضوع میتواند اثرات نامتعارفی نظیر پخش صدا، چشمک زدن صفحه و حتی کرش کردن پنجره شل خط فرمان در پی داشته باشد. برای نمایش یک تفسیر اولیه و قابل چاپ از دادهها، از گزینه -h یا اگر در حال بررسی یک اتصال SSL هستید از گزینه -s استفاده کنید. متوجه خواهید شد که صفحه دریافتشده در مرورگر ناقص به نظر میرسد. دلیل این امر آن است که بهطور پیشفرض، ابزار پس از پایان نخستین اتصال بسته میشود، بنابراین مرورگر قادر به بارگذاری تصاویر نخواهد بود. برای اینکه ابزار همچنان به پذیرش اتصالات ادامه دهد، حالت تکرار را با گزینه -l روشن کنید. مثالهای زیر خروجی حاصل از ترکیبهای پرکاربرد گزینهها را نشان میدهند.
مثال ۱
$ ssltap.exe -sx -p 444 interzone.mcom.com:443 > sx.txt
خروجی
Connected to interzone.mcom.com:443
-->; [
alloclen = 66 bytes
[ssl2] ClientHelloV2 {
version = {0x03, 0x00}
cipher-specs-length = 39 (0x27)
sid-length = 0 (0x00)
challenge-length = 16 (0x10)
cipher-suites = {
(0x010080) SSL2/RSA/RC4-128/MD5
(0x020080) SSL2/RSA/RC4-40/MD5
(0x030080) SSL2/RSA/RC2CBC128/MD5
(0x040080) SSL2/RSA/RC2CBC40/MD5
(0x060040) SSL2/RSA/DES64CBC/MD5
(0x0700c0) SSL2/RSA/3DES192EDE-CBC/MD5
(0x000004) SSL3/RSA/RC4-128/MD5
(0x00ffe0) SSL3/RSA-FIPS/3DES192EDE-CBC/SHA
(0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA
(0x00ffe1) SSL3/RSA-FIPS/DES64CBC/SHA
(0x000009) SSL3/RSA/DES64CBC/SHA
(0x000003) SSL3/RSA/RC4-40/MD5
(0x000006) SSL3/RSA/RC2CBC40/MD5
}
session-id = { }
challenge = { 0xec5d 0x8edb 0x37c9 0xb5c9 0x7b70 0x8fe9 0xd1d3
0x2592 }
}
]
<-- [
SSLRecord {
0: 16 03 00 03 e5 |.....
type = 22 (handshake)
version = { 3,0 }
length = 997 (0x3e5)
handshake {
0: 02 00 00 46 |...F
type = 2 (server_hello)
length = 70 (0x000046)
ServerHello {
server_version = {3, 0}
random = {...}
0: 77 8c 6e 26 6c 0c ec c0 d9 58 4f 47 d3 2d 01 45 |
wn&l.ì..XOG.-.E
10: 5c 17 75 43 a7 4c 88 c7 88 64 3c 50 41 48 4f 7f |
\.uC§L.Ç.d<PAHO.
session ID = {
length = 32
contents = {..}
0: 14 11 07 a8 2a 31 91 29 11 94 40 37 57 10 a7 32 | ...¨*1.)..@7W.§2
10: 56 6f 52 62 fe 3d b3 65 b1 e4 13 0f 52 a3 c8 f6 | VoRbþ=³e±...R£È.
}
cipher_suite = (0x0003) SSL3/RSA/RC4-40/MD5
}
0: 0b 00 02 c5 |...Å
type = 11 (certificate)
length = 709 (0x0002c5)
CertificateChain {
chainlength = 706 (0x02c2)
Certificate {
size = 703 (0x02bf)
data = { saved in file 'cert.001' }
}
}
0: 0c 00 00 ca |....
type = 12 (server_key_exchange)
length = 202 (0x0000ca)
0: 0e 00 00 00 |....
type = 14 (server_hello_done)
length = 0 (0x000000)
}
}
]
--> [
SSLRecord {
0: 16 03 00 00 44 |....D
type = 22 (handshake)
version = { 3,0 }
length = 68 (0x44)
handshake {
0: 10 00 00 40 |...@
type = 16 (client_key_exchange)
length = 64 (0x000040)
ClientKeyExchange {
message = {...}
}
}
}
]
--> [
SSLRecord {
0: 14 03 00 00 01 |.....
type = 20 (change_cipher_spec)
version = { 3,0 }
length = 1 (0x1)
0: 01 |.
}
SSLRecord {
0: 16 03 00 00 38 |....8
type = 22 (handshake)
version = { 3,0 }
length = 56 (0x38)
< encrypted >
}
]
<-- [
SSLRecord {
0: 14 03 00 00 01 |.....
type = 20 (change_cipher_spec)
version = { 3,0 }
length = 1 (0x1)
0: 01 |.
}
]
<-- [
SSLRecord {
0: 16 03 00 00 38 |....8
type = 22 (handshake)
version = { 3,0 }
length = 56 (0x38)
< encrypted >
}
]
--> [
SSLRecord {
0: 17 03 00 01 1f |.....
type = 23 (application_data)
version = { 3,0 }
length = 287 (0x11f)
< encrypted >
}
]
<-- [
SSLRecord {
0: 17 03 00 00 a0 |....
type = 23 (application_data)
version = { 3,0 }
length = 160 (0xa0)
< encrypted >
}
]
<-- [
SSLRecord {
0: 17 03 00 00 df |....ß
type = 23 (application_data)
version = { 3,0 }
length = 223 (0xdf)
< encrypted >
}
SSLRecord {
0: 15 03 00 00 12 |.....
type = 21 (alert)
version = { 3,0 }
length = 18 (0x12)
< encrypted >
}
]
Server socket closed.
مثال ۲
گزینه -s تجزیه SSL را فعال میکند. از آنجا که گزینه -x در این مثال استفاده نشده است، مقادیر رمزگشایینشده بهصورت دادههای خام خروجی داده میشوند. خروجی به یک فایل متنی هدایت میشود.
$ ssltap -s -p 444 interzone.mcom.com:443 > s.txt
خروجی
Connected to interzone.mcom.com:443
--> [
alloclen = 63 bytes
[ssl2] ClientHelloV2 {
version = {0x03, 0x00}
cipher-specs-length = 36 (0x24)
sid-length = 0 (0x00)
challenge-length = 16 (0x10)
cipher-suites = {
(0x010080) SSL2/RSA/RC4-128/MD5
(0x020080) SSL2/RSA/RC4-40/MD5
(0x030080) SSL2/RSA/RC2CBC128/MD5
(0x060040) SSL2/RSA/DES64CBC/MD5
(0x0700c0) SSL2/RSA/3DES192EDE-CBC/MD5
(0x000004) SSL3/RSA/RC4-128/MD5
(0x00ffe0) SSL3/RSA-FIPS/3DES192EDE-CBC/SHA
(0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA
(0x00ffe1) SSL3/RSA-FIPS/DES64CBC/SHA
(0x000009) SSL3/RSA/DES64CBC/SHA
(0x000003) SSL3/RSA/RC4-40/MD5
}
session-id = { }
challenge = { 0x713c 0x9338 0x30e1 0xf8d6 0xb934 0x7351 0x200c
0x3fd0 }
}
]
>-- [
SSLRecord {
type = 22 (handshake)
version = { 3,0 }
length = 997 (0x3e5)
handshake {
type = 2 (server_hello)
length = 70 (0x000046)
ServerHello {
server_version = {3, 0}
random = {...}
session ID = {
length = 32
contents = {..}
}
cipher_suite = (0x0003) SSL3/RSA/RC4-40/MD5
}
type = 11 (certificate)
length = 709 (0x0002c5)
CertificateChain {
chainlength = 706 (0x02c2)
Certificate {
size = 703 (0x02bf)
data = { saved in file 'cert.001' }
}
}
type = 12 (server_key_exchange)
length = 202 (0x0000ca)
type = 14 (server_hello_done)
length = 0 (0x000000)
}
}
]
--> [
SSLRecord {
type = 22 (handshake)
version = { 3,0 }
length = 68 (0x44)
handshake {
type = 16 (client_key_exchange)
length = 64 (0x000040)
ClientKeyExchange {
message = {...}
}
}
}
]
--> [
SSLRecord {
type = 20 (change_cipher_spec)
version = { 3,0 }
length = 1 (0x1)
}
SSLRecord {
type = 22 (handshake)
version = { 3,0 }
length = 56 (0x38)
> encrypted >
}
]
>-- [
SSLRecord {
type = 20 (change_cipher_spec)
version = { 3,0 }
length = 1 (0x1)
}
]
>-- [
SSLRecord {
type = 22 (handshake)
version = { 3,0 }
length = 56 (0x38)
> encrypted >
}
]
--> [
SSLRecord {
type = 23 (application_data)
version = { 3,0 }
length = 287 (0x11f)
> encrypted >
}
]
[
SSLRecord {
type = 23 (application_data)
version = { 3,0 }
length = 160 (0xa0)
> encrypted >
}
]
>-- [
SSLRecord {
type = 23 (application_data)
version = { 3,0 }
length = 223 (0xdf)
> encrypted >
}
SSLRecord {
type = 21 (alert)
version = { 3,0 }
length = 18 (0x12)
> encrypted >
}
]
Server socket closed.
مثال ۳
در این مثال، گزینه -h قالب هگز/اسکی را فعال میکند. هیچ تجزیه یا رمزگشایی SSL انجام نمیشود. خروجی به یک فایل متنی هدایت میگردد.
$ ssltap -h -p 444 interzone.mcom.com:443 > h.txt
خروجی
Connected to interzone.mcom.com:443 --> [ 0: 80 40 01 03 00 00 27 00 00 00 10 01 00 80 02 00 | .@....'......... 10: 80 03 00 80 04 00 80 06 00 40 07 00 c0 00 00 04 | .........@...... 20: 00 ff e0 00 00 0a 00 ff e1 00 00 09 00 00 03 00 | ........á....... 30: 00 06 9b fe 5b 56 96 49 1f 9f ca dd d5 ba b9 52 | ..þ[V.I.\xd9 ...º¹R 40: 6f 2d |o- ] <-- [ 0: 16 03 00 03 e5 02 00 00 46 03 00 7f e5 0d 1b 1d | ........F....... 10: 68 7f 3a 79 60 d5 17 3c 1d 9c 96 b3 88 d2 69 3b | h.:y`..<..³.Òi; 20: 78 e2 4b 8b a6 52 12 4b 46 e8 c2 20 14 11 89 05 | x.K.¦R.KFè. ... 30: 4d 52 91 fd 93 e0 51 48 91 90 08 96 c1 b6 76 77 | MR.ý..QH.....¶vw 40: 2a f4 00 08 a1 06 61 a2 64 1f 2e 9b 00 03 00 0b | *ô..¡.a¢d...... 50: 00 02 c5 00 02 c2 00 02 bf 30 82 02 bb 30 82 02 | ..Å......0...0.. 60: 24 a0 03 02 01 02 02 02 01 36 30 0d 06 09 2a 86 | $ .......60...*. 70: 48 86 f7 0d 01 01 04 05 00 30 77 31 0b 30 09 06 | H.÷......0w1.0.. 80: 03 55 04 06 13 02 55 53 31 2c 30 2a 06 03 55 04 | .U....US1,0*..U. 90: 0a 13 23 4e 65 74 73 63 61 70 65 20 43 6f 6d 6d | ..#Netscape Comm a0: 75 6e 69 63 61 74 69 6f 6e 73 20 43 6f 72 70 6f | unications Corpo b0: 72 61 74 69 6f 6e 31 11 30 0f 06 03 55 04 0b 13 | ration1.0...U... c0: 08 48 61 72 64 63 6f 72 65 31 27 30 25 06 03 55 | .Hardcore1'0%..U d0: 04 03 13 1e 48 61 72 64 63 6f 72 65 20 43 65 72 | ....Hardcore Cer e0: 74 69 66 69 63 61 74 65 20 53 65 72 76 65 72 20 | tificate Server f0: 49 49 30 1e 17 0d 39 38 30 35 31 36 30 31 30 33 | II0...9805160103 <additional data lines> ] <additional records in same format> Server socket closed.
مثال ۴
در این مثال، گزینه -s تجزیه SSL و گزینه -h قالب هگز/اسکی را فعال میکند. هر دو قالب برای هر رکورد نمایش داده میشوند. خروجی به یک فایل متنی هدایت میشود.
$ ssltap -hs -p 444 interzone.mcom.com:443 > hs.txt
خروجی
Connected to interzone.mcom.com:443
--> [
0: 80 3d 01 03 00 00 24 00 00 00 10 01 00 80 02 00 | .=....$.........
10: 80 03 00 80 04 00 80 06 00 40 07 00 c0 00 00 04 | .........@......
20: 00 ff e0 00 00 0a 00 ff e1 00 00 09 00 00 03 03 | ........á.......
30: 55 e6 e4 99 79 c7 d7 2c 86 78 96 5d b5 cf e9 |U..yÇ\xb0 ,.x.]µÏé
alloclen = 63 bytes
[ssl2] ClientHelloV2 {
version = {0x03, 0x00}
cipher-specs-length = 36 (0x24)
sid-length = 0 (0x00)
challenge-length = 16 (0x10)
cipher-suites = {
(0x010080) SSL2/RSA/RC4-128/MD5
(0x020080) SSL2/RSA/RC4-40/MD5
(0x030080) SSL2/RSA/RC2CBC128/MD5
(0x040080) SSL2/RSA/RC2CBC40/MD5
(0x060040) SSL2/RSA/DES64CBC/MD5
(0x0700c0) SSL2/RSA/3DES192EDE-CBC/MD5
(0x000004) SSL3/RSA/RC4-128/MD5
(0x00ffe0) SSL3/RSA-FIPS/3DES192EDE-CBC/SHA
(0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA
(0x00ffe1) SSL3/RSA-FIPS/DES64CBC/SHA
(0x000009) SSL3/RSA/DES64CBC/SHA
(0x000003) SSL3/RSA/RC4-40/MD5
}
session-id = { }
challenge = { 0x0355 0xe6e4 0x9979 0xc7d7 0x2c86 0x7896 0x5db
0xcfe9 }
}
]
<additional records in same formats>
Server socket closed.
نکات کاربردی (USAGE TIPS)
هنگامی که SSL یک نشست قبلی را دوباره آغاز میکند، از اطلاعات کششده برای انجام یک دستتکانی جزئی (partial handshake) استفاده مینماید. اگر مایل به ثبت و ضبط یک دستتکانی کامل SSL هستید، مرورگر را مجدداً راهاندازی کنید تا کش شناسه نشست (session id cache) پاک شود.
اگر این ابزار را روی رایانهای غیر از سرور SSL که قصد اتصال به آن را دارید اجرا کنید، مرورگر هشدار خواهد داد که نام میزبان مورد نظر برای اتصال با نام موجود در گواهی متفاوت است. در صورت استفاده از بازخوانی پیشفرض BadCert (BadCert callback)، همچنان میتوانید از طریق یک کادر محاورهای متصل شوید. اما اگر از بازخوانی پیشفرض BadCert استفاده نمیکنید، بازخوانی ارائهشده توسط شما باید این امکان را مجاز بداند.
همچنین ببینید (SEE ALSO)
ابزارهای امنیتی NSS همچنین در نشانی زیر مستند شدهاند: http://www.mozilla.org/projects/security/pki/nss[2].
منابع بیشتر (ADDITIONAL RESOURCES)
برای کسب اطلاعات درباره NSS و سایر ابزارهای مرتبط با NSS (مانند JSS)، به ویکی پروژه NSS در نشانی http://www.mozilla.org/projects/security/pki/nss مراجعه کنید. وبسایت NSS مستقیماً به تغییرات کد و انتشار نسخههای NSS مربوط میشود.
فهرستهای پستی: https://lists.mozilla.org/listinfo/dev-tech-crypto
کانال IRC: سرور Freenode در کانال #dogtag-pki
نویسندگان (AUTHORS)
ابزارهای NSS توسط توسعهدهندگانی از Netscape، Red Hat، Sun، Oracle، Mozilla و Google نوشته شده و نگهداری میشوند.
نویسندگان: Elio Maldonado <emaldona@redhat.com>، Deon Lackey <dlackey@redhat.com>.
مجوز (LICENSE)
تحت مجوز عمومی موزیلا (Mozilla Public License)، نسخه ۲.۰ منتشر شده است. اگر نسخهای از MPL همراه با این فایل توزیع نشده است، میتوانید آن را از نشانی http://mozilla.org/MPL/2.0 دریافت کنید.
یادداشتها (NOTES)
- 1.
- Mozilla NSS bug 836477
| 19 May 2021 | nss-tools |