ÃֽŠ°Ô½Ã±Û(OS/WAS)
2017.06.12 / 13:30

À¥ ¼­ºñ½º HTTPS ¿¬°á½Ã ¼ÒÄÏ ²÷±è Çö»ó ¹× ÇØ°á»ç·Ê

Ŭ·¡½Ä·Î¾â
Ãßõ ¼ö 233

°ú°Å¿¡ https ¿¬°áÇؼ­ Å×½ºÆ®ÇÑ ÀûÀÌ ÀÖ¾ú°í, ±× ÀÌÈÄ¿¡ ¾²Áö ¾Ê´Ù°¡ ÃÖ±Ù¿¡ https·Î »ç¿ëÇØ¾ß Çؼ­ https·Î Å×½ºÆ®ÇÏ´ø Áß¿¡ ¹ß°ßµÇ¾ú½À´Ï´Ù. 

ºê¶ó¿ìÁ®»óÀÇ ¿¡·¯

(Å©·Ò) : err_connection_reset ¿¡·¯ ¹ß»ý


IE ÂÊ



Apache Http ¼­¹öÀÇ ¼³Á¤ÆÄÀÏÀ̳ª java ¿¬°áºÎºÐ, ÀÎÁõ¼­ ºÎºÐ¿¡µµ Ưº°ÇÑ ¹®Á¦Á¡À» ÆľÇÇÏÁö ¸øÇß½À´Ï´Ù.

¿¡·¯ ·Î±×¿¡¼­µµ Ưº°ÇÑ Â¡Èĸ¦ ãÀ» ¼ö ¾ø¾ú½À´Ï´Ù.

 

±×·¡¼­ Å͹̳ο¡¼­ ÇØ´ç ¼­¹ö¿¡ ·Î±×ÀÎ ÇÑ ÈÄ, opensslÀ» ÀÌ¿ëÇؼ­ µð¹ö±ëÀ» Çغ¸¾Ò½À´Ï´Ù.

localhostÀÇ 443Æ÷Æ®¿¡ Á¢¼ÓÇؼ­ ssl Åë½ÅÀ» üũÇÏ¿´½À´Ï´Ù.


#  openssl s_client -host localhost -port 443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:error in SSLv2/v3 read server hello A
write:errno=104


 

ssl Åë½ÅÀº ÃÖÃÊ Åë½ÅÀÇ ½ÃÀÛÀ» hello ¶ó´Â ÆÐŶÀ» client¿Í server ¿¡ ¼­·Î Àü´ÞÇϴµ¥. ±× ºÎºÐ¿¡¼­ ¿¡·¯°¡ ¹ß»ýÇÑ °ÍÀÔ´Ï´Ù. Àú´Â Á» ´õ »ó¼¼ÇÑ Á¤º¸¸¦ º¸±â À§Çؼ­ linuxÀÇ ½Ã½ºÅÛ ÄÝ°ú ¿¡·¯ ³»¿ë¿¡ ´ëÇؼ­ Á¤È®È÷ ºÐ¼®Çϱâ À§Çؼ­ strace ¶ó´Â ¸®´ª½º ¸í·É¾î¸¦ ÀÌ¿ëÇß½À´Ï´Ù.

# strace openssl s_client -host localhost -port 443 -state
gettimeofday({1318989368, 765821}, NULL) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])
send(4, "\204\27\1\0\0\1\0\0\0\0\0\0\20_kerberos-master\4_u"..., 49, MSG_NOSIGNAL) = 49
poll([{fd=4, events=POLLIN}], 1, 1000)  = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4, "\204\27\205\203\0\1\0\0\0\1\0\0\20_kerberos-master\4_u"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.22.64.6")}, [16]) = 100
close(4)                                = 0
write(3, "\200t\1\3\1\0K\0\0\0 \0\0009\0\0008\0\0005\0\0\26\0\0\23\0\0\n\7\0\300"..., 118) = 118
write(2, "SSL_connect:SSLv2/v3 write clien"..., 42SSL_connect:SSLv2/v3 write client hello A
) = 42
read(3, 0x89bc4d0, 7)                   = -1 ECONNRESET (Connection reset by peer)
write(2, "SSL_connect:error in SSLv2/v3 re"..., 50SSL_connect:error in SSLv2/v3 read server hello A
) = 50
write(2, "write:errno=104\n", 16write:errno=104
)       = 16
shutdown(3, 0 /* receive */)            = -1 ENOTCONN (Transport endpoint is not connected)
close(3)                                = 0
exit_group(0)                           = ?




 

¼­¹ö¿¡¼­ Á¢¼ÓÀ» ²÷¾ú´Ù´Â ECONNRESET (error number 104) À̶ó´Â ¿¡·¯°¡ ¹ß»ýµÇ¾úÀ½À» Á¤È®È÷ È®ÀÎÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù.

 

ECONRESET Àº  TCP Åë½Å°ú ¿¬°üÀÌ ÀÖ½À´Ï´Ù

 

fig1o.png

 

 

A,B ³ëµå°¡ ÀÖ´Ù°í °¡Á¤ÇÏ°í, A°¡ Syn ÆÐŶÀ» ÅëÇØ connectionÀ» ½ÃµµÇßÁö¸¸, ¼­¹ö¿¡¼­ port°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª Áß°£¿¡ ¼ÒÄÏ¿¡ ¹®Á¦°¡ »ý°Ü ¼­¹ö·ÎºÎÅÍ RST ÆÐŶÀ» ¹Þ°Ô µË´Ï´Ù. ÀÌ ¶§, -1ÀÌ ¸®Åϵǰí ECONNRESETÀÌ errono·Î ¼ÂÆõǸç, Connection reset by peer ¸Þ½ÃÁö¸¦ º¸¿© ÁÝ´Ï´Ù.


 


ÀϹÝÀûÀÎ ÄÉÀ̽º´Â ¾ÆÆÄÄ¡ ¿¡·¯ ·Î±×(LogLevel debug ¼³Á¤)¿¡ º¸¿©Áö±âµµ ÇÏÁö¸¸, À̹ø °æ¿ì´Â ¿¡·¯ ·Î±×¿¡ ³²Áö ¾Ê¾Ò½À´Ï´Ù. ±× ÀÌÀ¯´Â Http ´Ü ¿¬°áÀÌ ¾Æ´Ñ TCP ´Ü¿¡¼­ÀÇ ¿¬°á¿¡¼­ Á¾·áµÇ¾ú±â ¶§¹®ÀÔ´Ï´Ù.

 

¸¸¾à Á¤»óÀûÀÎ ¿¬°áÀ̾ú´Ù¸é, ¾Æ·¡¿Í °°ÀÌ SSL Åë½ÅÇÏ°í Ŭ¶óÀ̾ðÆ®¿¡¼­ ÀÎÁõ¼­¸¦ ¹Þ´Â ÇüÅ·Π°¡°Ô µË´Ï´Ù.


 

# openssl s_client -host localhost -port 443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=1 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
verify error:num=20:unable to get local issuer certificate
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
---
Certificate chain
 0 s:/C=KR/ST=adsfsdf/L=dddad/O=NHN/OU=GAT/OU=Terms of use at www.crosscert.com/rpa (c) 04/OU=Authenticated by KECA, Inc./OU=Member, VeriSign Trust Network/CN=google.com
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
---
Server certificate
Server certificate
-----BEGIN CERTIFICATE-----
MIIFgDCCBGigAwIBAgIQFZkr7WyBWj+WqYaiWeajwzANBgkqhkiG9w0BAQUFADCB
tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug
YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMm
VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwHhcNMTAxMjA2
MDAwMDAwWhcNMTIxMjA1MjM1OTU5WjCB7zELMAkGA1UEBhMCS1IxEDAOBgNVBAgT
B0t5dW5nZ2kxFDASBgNVBAcUC0p1bmdqYS1kb25nMQwwCgYDVQQKFANOSE4xDDAK
BgNVBAsUA0dBVDE1MDMGA1UECxMsVGVybXMgb2YgdXNlIGF0IHd3dy5jcm9zc2Nl
cnQuY29tL3JwYSAoYykgMDQxJDAiBgNVBAsTG0F1dGhlbnRpY2F0ZWQgYnkgS0VD
QSwgSW5jLjEnMCUGA1UECxMeTWVtYmVyLCBWZXJpU2lnbiBUcnVzdCBOZXR3b3Jr
MRYwFAYDVQQDFA15YTkubmF2ZXIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDf6nldrBCfR7cgGBA7PcVkGT7xvF7X/KadRBzWtFYnba2rxd/dpQ4k5UkM
4wLr2xK6clCS1xodZp9mhLI0ig79qY6IloAghkJEmjz13Ui1c0o0ZincqbUsa7Rp
+VYSesEguUYdmj5FwWmtMC6do6TrRGjp1ExThvMEEiqMhi48FwIDAQABo4IB0jCC
Ac4wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwRQYDVR0fBD4wPDA6oDigNoY0aHR0
cDovL1NWUlNlY3VyZS1HMy1jcmwudmVyaXNpZ24uY29tL1NWUlNlY3VyZUczLmNy
bDBFBgNVHSAEPjA8MDoGC2CGSAGG+EUBBxcDMCswKQYIKwYBBQUHAgEWHWh0dHBz
Oi8vd3d3LmNyb3NzY2VydC5jb20vcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjAfBgNVHSMEGDAWgBQNRFwWU0TBgn4dIKsl9AFj2L55pTB2BggrBgEF
BQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBA
BggrBgEFBQcwAoY0aHR0cDovL1NWUlNlY3VyZS1HMy1haWEudmVyaXNpZ24uY29t
L1NWUlNlY3VyZUczLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFn
ZS9naWYwITAfMAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRw
Oi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQAD
ggEBAFkByKz9YKlUV59kvdxMwwpvOLc4SNu4Q9mh1QKzQCyZ4oJoZ2FjNxJKU9rq
6YwkC5DrSZ5KZYzSt1CyoksVuWKNkU8E9Tr+np3Hl9inq8OBtUmMTujwtBW7DOK5
3VQfZIa9L4ftuLBBBrkchaIJAO+Wt6QOaxj8nPCdtFz6jE5+y0Tcegnh/37lgTvJ
A0FO+Q9flceQfXOhML/FSfqFTfTDZaXZsrNabSaZqmdbX28TTbsj8wPx71IsxdBs
yKbTF1oz5ywx9xNN6QYhCu0SyQQbxr62e0Oo3o5XFP/ljyjmzIoneWheo5UgsKvI
wDT/ZiM6lixt0CWxSHFNfm9m4yM=
-----END CERTIFICATE-----
subject=/C=KR/ST=Kyunggi/L=Jungja-dong/O=NHN/OU=GAT/OU=Terms of use at www.crosscert.com/rpa (c) 04/OU=Authenticated by KECA, Inc./OU=Member, VeriSign Trust Network/CN=google.com
issuer=/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
---
No client certificate CA names sent
---
SSL handshake has read 3499 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 8F2B9AB40A4AD05C46DE0F4F04D80355308840534ADAFE4C68FF3389B46981EB
    Session-ID-ctx: 
    Master-Key: 5610D7F76F9BD9EE4896F5C9599323CBCA58111579FDECA32BDF05E570D159C65F395B030442E4BC432109B71A238DA5
    Key-Arg   : None
    Krb5 Principal: None
    Start Time: 1318991229
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---






ssl Åë½Å(handshaking) Àº ´ÙÀ½°ú °°½À´Ï´Ù.

1. Client(Å͹̳ο¡¼­ openssl ¿äû, ºê¶ó¿ìÁ®)°¡ Https¸¦ ÀÌ¿ëÇؼ­ Server(google.com) URL·Î Åë½ÅÀ» ½ÃµµÇÑ´Ù. Hello ¶ó´Â Åë½ÅÀε¥, Áö¿ø °¡´ÉÇÑ ¾ÏÈ£¹æ½Ä, Å° ±³È¯ ¹æ¹ý, ¾ÐÃà ¹æ½ÄÀ» ¼­·Î ÀÇ»ç¼ÒÅëÇÕ´Ï´Ù. 

2. Server(google.com)°¡ ÀÎÁõ¼­¸¦ client¿¡ Àü´ÞÇÕ´Ï´Ù. 

3. Client¿¡¼­´Â Server ÀÎÁõ¼­ public key ¾ò¾î¿É´Ï´Ù. (±âº»ÀûÀÎ ÀÎÁõ¼­¿¡ ´ëÇÑ °ËÁõ ÀýÂ÷¸¦ °Åħ. ÀÎÁõ¼­ÀÇ µµ¸ÞÀΰú ½ÇÁ¦ ¿äûÇÏ´Â µµ¸ÞÀÎÀÌ °®ÀºÁö. CA°¡ Á¤È®ÇÏ°Ô ÀÎÁõÇß´ÂÁö µîµî)

5. Client¿¡¼­´Â public key¸¦ ÀÌ¿ëÇÑ pre-master key(RSA Å°±³È¯) ¸¦ »ý¼ºÇÏ°í ¼­¹ö¿¡ Àü´ÞÇÏ¿© »óÈ£°£ÀÇ Å°¸¦ ±³È¯Çϵµ·Ï ÇÕ´Ï´Ù..  (key exchange)

6. Client¿¡¼­ ÀÎÁõ¼­ °ËÁõ Á¤º¸¸¦ º¸³»°í,  SSL Åë½Å¿¡ ÀÇÇØ °áÁ¤µÈ ¾ÏÈ£¹æ½Ä, Å°±³È¯ ¹æ¹ý, ¼­¸í¹æ½Ä, ¾ÐÃà¹æ½ÄÀ» ´ÙÀ½ºÎÅÍ Àû¿ëÇÒ °ÍÀ» Á¤ÇÕ´Ï´Ù. (cipher spec)

6. Server´Â Client·ÎºÎÅÍ ¹ÞÀº pre-master key(¶Ç´Â pre master secret)¸¦ private key·Î µðÄÚµùÇÏ°í Session ticketÀ¸·Î »ý¼ºÇÏ°í Client¿¡ Àü¼ÛÇÕ´Ï´Ù.  (session ticket)

7. Server ¿¡¼­´Â Session Ticket¸¦ ÀÌ¿ëÇÏ¿© Server¿Í Client°£ÀÇ ¹ß»ýÇÏ´Â ¸ðµç Åë½ÅÀº ¾Ïȣȭ°¡ µÇ°Ô ÇÕ´Ï´Ù




Åë½Å ¿¡·¯´Â client->server ·Î SSL Handshake Çϴ ù¹ø° ´Ü°è("1. Client(Å͹̳ο¡¼­ openssl ¿äû, ºê¶ó¿ìÁ®)°¡ Https¸¦ ÀÌ¿ëÇؼ­ Server(google.com) URL·Î Åë½ÅÀ» ½ÃµµÇÑ´Ù. Hello ¶ó´Â Åë½ÅÀε¥, Áö¿ø °¡´ÉÇÑ ¾ÏÈ£¹æ½Ä, Å° ±³È¯ ¹æ¹ý, ¾ÐÃà ¹æ½ÄÀ» ¼­·Î ÀÇ»ç¼ÒÅëÇÕ´Ï´Ù. ")¿¡¼­ ¹®Á¦°¡ ¹ß»ýÇÑ °ÍÀ̾ú½À´Ï´Ù.

 

ÀÌ¿¡ ´ëÇÑ Á¤È®ÇÑ Áø´ÜÀ» À§Çؼ­ ¾ÆÆÄÄ¡ ¼­¹öÀÇ ¼³Á¤ ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿´½À´Ï´Ù.

 

Prefork ¼³Á¤¿¡¼­ StartServer¿Í MaxClient¸¦ 1·Î ÁÖ¾î ¸®½ºÅ¸Æ®¸¦ ÇÏ¿´½À´Ï´Ù.

 

# vi /usr/local/apache/conf/httpd.conf
StartServer 1
MaxClient 1


# /usr/local/apache/bin/httpd -k restart
[ÇÁ·Î¼¼½º Àç½ÃÀÛ]


# ps -ef | grep httpd
1111 root /usr/local/apache/bin/httpd
1112 www  /usr/local/apache/bin/httpd

 


 

root ±ÇÇÑÀ¸·Î µ¿ÀÛÇÏ´Â httpd µ¥¸ó°ú www ±ÇÇÑÀ¸·Î µ¿ÀÛÇÏ´Â httpd µ¥¸ó(worker)¸¸ÀÌ ¸®´ª½º¿¡¼­ ½ÇÇàÇÏ°Ô µË´Ï´Ù.

Http ¿äûÀÌ À¥¼­¹ö¿¡ µé¾î¿À¸é 1111 root ±ÇÇÑÀ¸·Î ½ÇÇàµÇ´Â httpd µ¥¸óÀÌ 1112 ¶ó´Â httpd·Î ¿äûÀ» Àü´Þ½Ãŵ´Ï´Ù.

±×·¡¼­, www ±ÇÇÑÀ¸·Î µ¿ÀÛÇÏ´Â httpd µ¥¸ó¿¡´Ù°¡ ½Ã½ºÅÛ ÄÝÀ» È®ÀÎÇÏ´Â strace¸¦ ºÙ¿©¼­ ÇÁ·Î¼¼½º°¡ ¾î¶² ÀÏÀ» ÇÏ´ÂÁö È®ÀÎÇÕ´Ï´Ù.

 

strace ·Î ÇÁ·Î¼¼½º¸¦ ¶ç¿ì°í, openssl·Î https ÆÐŶÀ» ³¯¸®¸é ´ÙÀ½ÀÇ °á°ú¸¦ ¾ò°Ô µË´Ï´Ù.

 

# strace -p 1112
 
....
gettimeofday({1318989190, 741852}, NULL) = 0
writev(12, [{"HTTP/1.1 200 OK\r\nDate: Wed, 19 O"..., 289}, {"Total Accesses: 1\nTotal kBytes: "..., 396}], 2) = 685
gettimeofday({1318989190, 742236}, NULL) = 0
gettimeofday({1318989190, 742348}, NULL) = 0
write(15, "127.0.0.1 - - [19/Oct/2011:10:53"..., 128) = 128
gettimeofday({1318989190, 742594}, NULL) = 0
gettimeofday({1318989190, 742693}, NULL) = 0
times({tms_utime=0, tms_stime=0, tms_cutime=0, tms_cstime=0}) = -2134126829
gettimeofday({1318989190, 742955}, NULL) = 0
shutdown(12, 1 /* send */)              = 0
poll([{fd=12, events=POLLIN}], 1, 2000) = 1 ([{fd=12, revents=POLLIN|POLLHUP}])
read(12, "", 512)                       = 0
close(12)                               = 0
read(6, 0xbfbe39c7, 1)                  = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1318989190, 743670}, NULL) = 0
semop(21954565, 0x5a9898, 1)            = 0
epoll_wait(8, {}, 2, 10000)             = 0
epoll_wait(8, {}, 2, 10000)             = 0
epoll_wait(8, {}, 2, 10000)             = 0
epoll_wait(8, {}, 2, 10000)             = 0
epoll_wait(8, {}, 2, 10000)             = 0
epoll_wait(8, {}, 2, 10000)             = 0
epoll_wait(8, {{EPOLLIN, {u32=137901384, u64=137901384}}}, 2, 10000) = 1
accept(5, {sa_family=AF_INET, sin_port=htons(51035), sin_addr=inet_addr("127.0.0.1")}, [16]) = 12
fcntl64(12, F_GETFD)                    = 0
fcntl64(12, F_SETFD, FD_CLOEXEC)        = 0
semop(21954565, 0x5a98a4, 1)            = 0
gettimeofday({1318989258, 992134}, NULL) = 0
getsockname(12, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
time(NULL)                              = 1318989258
fcntl64(12, F_GETFL)                    = 0x2 (flags O_RDWR)
fcntl64(12, F_SETFL, O_RDWR|O_NONBLOCK) = 0
gettimeofday({1318989258, 993069}, NULL) = 0
time(NULL)                              = 1318989258
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
chdir("/home/www/apps/httpd-2.2.21")    = 0
rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_INTERRUPT}, {SIG_DFL, [], SA_RESETHAND}, 8) = 0
kill(1112, SIGSEGV)                     = 0
sigreturn()                             = ? (mask now [])
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
Process 1112 detached




 

httpd µ¥¸ó¿¡¼­ Áß°£¿¡ read ÄÝ ÀÌÈÄ¿¡ Resource temporarily unavailable ÀÌ ÀϾ°í.
³ªÁß¿¡´Â SIGSEGV (Segmentation fault)°¡ ¹ß»ýÇÏ°Ô µÇ¾ú½À´Ï´Ù. ¸¶Áö¸·¿¡´Â www ÇÁ·Î¼¼½º°¡ Á¾·áµÇ¾úÀ½À» È®ÀÎÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. (kill(1112, SIGSEGV))


Áï, ¿äûÀÌ µé¾î¿Ã ¶§¸¶´Ù www ÇÁ·Î¼¼½º(apache worker)°¡ µ¿ÀÛÇÏ´Ù°¡ Segment fault°¡ ¹ß»ýÇÑ °ÍÀ̾ú½À´Ï´Ù. 
±×¸®°í, ps ¸í·É¾î¸¦ ÀÌ¿ëÇؼ­ ÇÁ·Î¼¼½º È®ÀÎÀ» ÇÏ´Ï. »õ·Î¿î ÇÁ·Î¼¼½º°¡ ¶°Á® ÀÖ´Â °ÍÀ» È®ÀÎÇß½À´Ï´Ù.

 

# ps -ef | grep httpd
1111 root /usr/local/apache/bin/httpd
1114 www  /usr/local/apache/bin/httpd

 


 

¾ÆÆÄÄ¡¿¡ ¹®Á¦°¡ ÀÖ´Â °ÍÀº È®ÀÎÇß½À´Ï´Ù. ±× ÁßÀÇ ¾îµð¼­ ¹®Á¦°¡ ÀÖ´ÂÁö È®ÀÎÀ» ÇØ¾ß Çß½À´Ï´Ù.

 

vhost.conf ¼³Á¤ ÆÄÀÏÀº ÀÌ·±½ÄÀ¸·Î µÇ¾î ÀÖ½À´Ï´Ù.

¸ÕÀú ȸ»ç¿¡¼­ ¸¸µç ƯÁ¤ ¸ðµâÀ» Àаí, mod_sslÀ» Àд ±¸Á¶·Î µÇ¾î ÀÖ½À´Ï´Ù.

 


NameVirtualHost *:80
NameVirtualHost *:443
 
LoadModule session_auth_module modules/mod_auth.so
<IfModule mod_auth.c>
....
 </IfModule>
 
#SSL Module
LoadModule ssl_module modules/mod_ssl.so
 
<IfModule mod_ssl.c>
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    Listen 443
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
    SSLPassPhraseDialog  exec:conf/sslcert.pass
    SSLSessionCache         dbm:/usr/local/apache/logs/ssl_scache
    SSLSessionCacheTimeout  300
    SSLMutex  file:/usr/local/apache/logs/ssl_mutex
</IfModule>

<VirtualHost *:80>
..
</VirtualHost>
 
<VirtualHost *:443>
..
</VirtualHost>




Á» ´õ ÀÚ¼¼È÷ ¹®Á¦¸¦ È®ÀÎÇϱâ À§Çؼ­ httpd µ¥¸ó¿¡ ´ëÇؼ­ µð¹ö±ë(gdb)¸¦ ÇÏ¿´½À´Ï´Ù.


# gdb httpd 
GNU gdb Fedora (6.8-27.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
(gdb)  b ap_process_request
Breakpoint 1 at 0x80923f9: file http_request.c, line 276.
(gdb) 
Note: breakpoint 1 also set at pc 0x80923f9.
Breakpoint 2 at 0x80923f9: file http_request.c, line 276.
(gdb) run -X -d /usr/local/apache
Starting program: /home/www/apps/httpd-2.2.21/bin/httpd -X -d /usr/local/apache
[Thread debugging using libthread_db enabled]
[New Thread 0xb7f85700 (LWP 8718)]
Detaching after fork from child process 8721.
Detaching after fork from child process 8722.
Detaching after fork from child process 8723.
Detaching after fork from child process 8724.
Detaching after fork from child process 8725.
Detaching after fork from child process 8726.
Detaching after fork from child process 8727.
Detaching after fork from child process 8728.
Detaching after fork from child process 8729.
Detaching after fork from child process 8730.
Detaching after fork from child process 8731.
Detaching after fork from child process 8732.
Detaching after fork from child process 8733.
Detaching after fork from child process 8734.
Detaching after fork from child process 8735.
(¿äû ³¯¸², openssl s_client....)
Program received signal SIGSEGV, Segmentation fault.
0x003a91bd in ssl23_accept () from /lib/libssl.so.6
(gdb) bt
#0  0x001451bd in ssl23_accept () from /lib/libssl.so.6
#1  0x010c9341 in SSL_accept () from /usr/local/apache/modules/mod_auth-test.so
#2  0x00000000 in ?? ()
(gdb) n
Single stepping until exit from function ssl23_accept, 
which has no line number information.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists

.



ȸ»ç¿¡¼­ ¸¸µç ƯÁ¤ ¸ðµâÀÇ SSL_accept ¸Þ¼Òµå¿¡¼­ ¹®Á¦°¡ µÇ¾úÀ½À» È®ÀÎÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù.

 

´ã´çÀںв² È®ÀÎÇÏ´Ï auth¸ðµâ¿¡¼­´Â ÀÚüÀûÀÎ ssl ÀÎÁõ ¸ðµâÀ» static linkingÇؼ­ °¡Áö°í ÀÖ´Ù°í ÇÕ´Ï´Ù.

Áï, mod_sslÀ» ¾²Áö ¾Ê°í auth ¸ðµâÀ» »ç¿ëÇϴ À¥ ¼­¹ö¸¦ À§Çؼ­ ¸¸µé¾î Áø °ÍÀä. ÀÌ ºÎºÐÀÌ ÀúÈñ°¡ »ç¿ëÇÏ°í ÀÖ´Â mod_sslÀÇ ssl ¹öÀü°ú Ãæµ¹ÀÌ ³­ °ÍÀÔ´Ï´Ù. ±×·¡¼­ segmentation fault°¡ ³­ °ÍÀÔ´Ï´Ù.

¸ÕÀú authÀ» Àоú°í, mod_sslÀ» Àд ±¸Á¶¿¡¼­ mod_sslÀ» Àаí, authÀ» Àд ±¸Á¶·Î º¯°æÇß´õ´Ï ¹«»çÇÏ°Ô µ¿À۵Ǿú½À´Ï´Ù.



Ãâó: http://knight76.tistory.com/entry/À¥-¼­ºñ½º-HTTPS-¿¬°á½Ã-¼ÒÄÏ-²÷±è-Çö»ó-¹×-ÇØ°á»ç·Ê [±è¿ëȯ ºí·Î±×(2004-2017)]