banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Tăng thời gian expired của certificate đã hết hạn.  XML
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 10/07/2009 04:01:02 (+0700) | #1 | 185888
messi655
Member

[Minus]    0    [Plus]
Joined: 23/03/2009 16:42:20
Messages: 7
Offline
[Profile] [PM]
Chào bạn,

Trong công ty mình có tạo cho mỗi user một certificate riêng để họ sử dụng trong quá trình gởi e-mail. Hiện tại một số certificate đã hết hạn. Họ yêu cầu cấp lại cho họ certificate mới. Nhưng nếu họ dùng certificate mới được cấp thì họ không thể đọc được các e-mail cũ trước đây.

Vậy cho mình hỏi có cách nào tăng thời gian expired của certificate hiện tại lên không. Để mình có thể sử dụng bình thường và đọc được các e-mail cũ.

Cảm ơn mọi người.
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 10/07/2009 05:22:22 (+0700) | #2 | 185894
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
lý do kô đọc được email cũ đơn giản là email cũ được mã hóa bằng public-key cũ (nằm trong cert cũ), nên cái private key mới được cấp không thể giải mã được chúng.

mgẫm nghĩ thì thấy có cách là lấy cái cert cũ, xuất hết thông tin trong đó ra, như là common name, email, đặc biệt là public key, rồi dựa vào những thông tin này để tạo ra một cái cert mới, làm sao cái cert mới khác với cert cũ ở chỗ expired date thôi. đương nhiên là phải ký lại rồi.

cái này thì phải biết cách xử lý thủ công X.509 cert. bạn phải coi phần mềm mà bạn đang sử dụng để làm CA có làm được hay không. nếu mà nó không làm được, thì có một option khác là tìm hiểu OpenSSL hay là Cryptlib để tự làm. còn nếu không nữa thì liên hệ mình, mình viết cho một cái utility nhỏ, giá cả phải chăng :-D.

mà đã thử coi email client nó có cho phép import nhiều private key khác nhau, rồi khi cần decrypt thì cho phép user chọn key chưa? mình xài Thunderbird/Enigma nó hỗ trợ phẻ re cái này mà.

cập nhật: giải thích tại sao không đọc được email cũ khi dùng cert mới.

-m
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 10/07/2009 07:43:27 (+0700) | #3 | 185915
[Avatar]
ham_choi
Member

[Minus]    0    [Plus]
Joined: 03/09/2006 21:42:03
Messages: 396
Offline
[Profile] [PM]
mình viết cho một cái utility nhỏ, giá cả phải chăng :-D. 


LOL , tranh thủ quá nhỉ !
If love were human it would know me
In a lost space come and show me
Hold me and control me and then
Melt me slowly down
Like chocolate !
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 15/07/2009 11:34:32 (+0700) | #4 | 186319
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
@ham_choi: cho có thêm động lực thôi mà :-p.

@messi655: sao rồi, bạn đã tìm được giải pháp chưa? mình nghĩ là email client nào cũng có support cái option đó. tìm trên google thì cũng có nhiều người gặp vấn đề giống bạn nhưng mà chủ yếu là ở cert dùng cho web server thôi.

-m
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 16/07/2009 04:37:56 (+0700) | #5 | 186397
messi655
Member

[Minus]    0    [Plus]
Joined: 23/03/2009 16:42:20
Messages: 7
Offline
[Profile] [PM]
Thanks bạn, Mong bạn có thể chỉ rõ hơn. Mình dùng openssl để tạo certificate.
Hay bạn có tài liệu nào cho share cho mình với.
cảm ơn bạn rất nhiều
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 16/07/2009 10:40:47 (+0700) | #6 | 186435
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
@messi665: trời bó tay, mình hướng dẫn các hướng giải quyết vậy là rõ ràng chi tiết lắm rồi. còn giờ đòi chi tiết hơn nữa thì chắc chỉ có nước mình ngồi viết code cho các bạn luôn :-p.

-m
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 16/07/2009 23:50:49 (+0700) | #7 | 186491
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]
Đừng tạo cert mới, hãy renew (hay nói cách khác là ký lại các cert request), rồi gửi cho họ cái cert mới để overwrite lên là xong. Key vẫn như cũ, mọi thông số như cũ, chỉ khác là ký ở thời điểm mới nên expire mới.
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 17/07/2009 02:10:59 (+0700) | #8 | 186507
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
@messi665: mình tìm được cách sử dụng openssl để làm rồi nè. giờ bạn tìm lại xem bạn còn lưu cái cert sign request cũ của user không. nếu còn thì chỉ cần ký lại cái đó với ngày giờ mới thì nó sẽ ra cert mới có cùng pub-key và private-key với cert cũ.

nếu không có thì bạn có thể sử dụng private key hiện tại của user để tạo ra một cái CSR bằng cái lệnh sau đây:

Code:
openssl req -key <private_key> -new -out newreq.pem


rồi sau đó thì ký cái newreq.pem bình thường là được.

-m
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 17/07/2009 04:47:17 (+0700) | #9 | 186525
messi655
Member

[Minus]    0    [Plus]
Joined: 23/03/2009 16:42:20
Messages: 7
Offline
[Profile] [PM]
OK! cảm ơn bạn rất nhiều, mình sẽ làm tiếp. nếu có gì mong bạn giúp đỡ cho.

Đây là toàn bộ command mình tạo certificate cho user:

# openssl genrsa -des3 -passout pass:" . $user_passwd . " -out /opt/lhvCA/usercerts/" . $user_name . ".key 1024

# openssl req -subj /CN=" . $user_name . "/O=LHV\\ Software/OU=IT\\ Group/L=Hochiminh/ST=Saigon/C=VN/emailAddress=" . $user_name . "\@lhv.vn -passin pass:" . $user_passwd . " -new -key /opt/lhvCA/usercerts/" . $user_name . ".key -out /opt/lhvCA/usercerts/" . $user_name . ".csr

# openssl ca -batch -in /opt/lhvCA/usercerts/" . $user_name . ".csr -cert /opt/lhvCA/CA/lhvCA.crt -keyfile /opt/lhvCA/CA/lhvCA.key -out /opt/lhvCA/usercerts/" . $user_name . ".crt

# openssl pkcs12 -name " . $user_name . " -certfile /opt/lhvCA/CA/lhvCA.crt -passin pass:" . $user_passwd . " -passout pass:" . $user_passwd . " -export -clcerts -in /opt/lhvCA/usercerts/" . $user_name . ".crt -inkey /opt/lhvCA/usercerts/" . $user_name . ".key -out /opt/lhvCA/usercerts/" . $user_name . ".lhv.vn.p12



Thanks bạn
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 17/07/2009 04:48:16 (+0700) | #10 | 186526
rcrackvn
Elite Member

[Minus]    0    [Plus]
Joined: 27/03/2007 02:04:05
Messages: 42
Offline
[Profile] [PM]

mrro wrote:
lý do kô đọc được email cũ đơn giản là email cũ được mã hóa bằng public-key cũ (nằm trong cert cũ), nên cái private key mới được cấp không thể giải mã được chúng.

mgẫm nghĩ thì thấy có cách là lấy cái cert cũ, xuất hết thông tin trong đó ra, như là common name, email, đặc biệt là public key, rồi dựa vào những thông tin này để tạo ra một cái cert mới, làm sao cái cert mới khác với cert cũ ở chỗ expired date thôi. đương nhiên là phải ký lại rồi.

cái này thì phải biết cách xử lý thủ công X.509 cert. bạn phải coi phần mềm mà bạn đang sử dụng để làm CA có làm được hay không. nếu mà nó không làm được, thì có một option khác là tìm hiểu OpenSSL hay là Cryptlib để tự làm. còn nếu không nữa thì liên hệ mình, mình viết cho một cái utility nhỏ, giá cả phải chăng :-D.

mà đã thử coi email client nó có cho phép import nhiều private key khác nhau, rồi khi cần decrypt thì cho phép user chọn key chưa? mình xài Thunderbird/Enigma nó hỗ trợ phẻ re cái này mà.

cập nhật: giải thích tại sao không đọc được email cũ khi dùng cert mới.

-m 


Mình không hiểu process của mrro ở các điểm sau:
- CA không sign certificate, CA chỉ tạo ra signed certificate từ CSR (certificate signing request). Sau đây là kết quả mình sign trực tiếp 1 crt (modified crt theo concept của mrro) để tạo ra newly-signed crt:
Code:
# openssl x509 -req -days 365 -in client.crt -signkey ca.key -out new.crt
1194:error:0906D06CsmilieEM routinessmilieEM_read_bio:no start line:/usr/src/lib/libssl/src/crypto/pem/pem_lib.c:650:Expecting: CERTIFICATE REQUEST

- OpenSSL cho phép tạo ra CSR mới từ old cert:
Code:
# openssl x509 -in client.crt -signkey client.key -x509toreq -out new.csr
Getting request Private Key
Generating certificate request


- Nội dung của new.csr:
Code:
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=VN, ST=HCMC, L=HCMC, O=Test org, OU=Email Users, CN=user1/emailAddress=user1@test.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:d6:6c:b7:cd:9b:7a:27:6d:b0:10:13:d1:d6:e2:
                    e5:55:4d:fc:42:16:ca:55:a9:0e:6e:02:cc:48:85:
                    75:96:80:d9:f9:2e:23:5a:e4:28:58:e5:5f:24:59:
                    49:23:5d:21:66:09:e0:aa:1b:96:58:7a:51:d6:8c:
                    8b:0f:ac:83:bc:cf:98:c7:ae:54:62:eb:a1:17:22:
                    23:87:9c:73:92:40:6e:56:44:7f:87:81:d7:67:38:
                    77:f9:6a:61:4b:09:1d:8f:1a:80:75:5d:10:46:0a:
                    73:49:f5:6a:0d:87:0c:c9:4f:ac:06:6e:75:a4:0d:
                    9b:35:be:45:91:ba:93:f0:29
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha1WithRSAEncryption
        0b:6e:7c:cf:d2:1a:57:fd:ea:0f:b7:1d:88:65:4a:c7:50:97:
        55:85:55:ef:55:4d:60:eb:9d:5b:b7:52:0e:2b:93:f1:d5:6a:
        24:6c:a8:98:6e:e0:95:a4:ac:e1:ea:fe:bd:85:ff:1d:4a:75:
        56:14:da:15:34:54:96:b0:0d:fd:ab:13:ec:0b:3c:80:6c:9b:
        ce:5d:6f:86:bf:19:b6:24:5c:f3:eb:73:b4:0b:df:62:6c:00:
        a3:62:d9:e0:74:9a:b3:28:40:15:02:eb:4d:02:84:df:b9:7b:
        78:30:30:aa:0b:07:2b:51:8b:8b:b4:c7:bc:d2:a4:f6:25:86:
        a3:b4
-----BEGIN CERTIFICATE REQUEST-----
MIIBxDCCAS0CAQAwgYMxCzAJBgNVBAYTAlZOMQ0wCwYDVQQIEwRIQ01DMQ0wCwYD
VQQHEwRIQ01DMREwDwYDVQQKEwhUZXN0IG9yZzEUMBIGA1UECxMLRW1haWwgVXNl
cnMxDjAMBgNVBAMTBXVzZXIxMR0wGwYJKoZIhvcNAQkBFg51c2VyMUB0ZXN0Lm9y
ZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1my3zZt6J22wEBPR1uLlVU38
QhbKVakObgLMSIV1loDZ+S4jWuQoWOVfJFlJI10hZgngqhuWWHpR1oyLD6yDvM+Y
x65UYuuhFyIjh5xzkkBuVkR/h4HXZzh3+WphSwkdjxqAdV0QRgpzSfVqDYcMyU+s
Bm51pA2bNb5FkbqT8CkCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4GBAAtufM/SGlf9
6g+3HYhlSsdQl1WFVe9VTWDrnVu3Ug4rk/HVaiRsqJhu4JWkrOHq/r2F/x1KdVYU
2hU0VJawDf2rE+wLPIBsm85db4a/GbYkXPPrc7QL32JsAKNi2eB0mrMoQBUC600C
hN+5e3gwMKoLBytRi4u0x7zSpPYlhqO0
-----END CERTIFICATE REQUEST-----

- CSR request được encode bởi ASN.1, mình parse thử content của nó:
Code:
# openssl asn1parse -in new.csr
0:d=0  hl=4 l= 452 cons: SEQUENCE
    4:d=1  hl=4 l= 301 cons: SEQUENCE
    8:d=2  hl=2 l=   1 prim: INTEGER           :00
   11:d=2  hl=3 l= 131 cons: SEQUENCE
   14:d=3  hl=2 l=  11 cons: SET
   16:d=4  hl=2 l=   9 cons: SEQUENCE
   18:d=5  hl=2 l=   3 prim: OBJECT            :countryName
   23:d=5  hl=2 l=   2 prim: PRINTABLESTRING   :VN
   27:d=3  hl=2 l=  13 cons: SET
   29:d=4  hl=2 l=  11 cons: SEQUENCE
   31:d=5  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
   36:d=5  hl=2 l=   4 prim: PRINTABLESTRING   :HCMC
   42:d=3  hl=2 l=  13 cons: SET
   44:d=4  hl=2 l=  11 cons: SEQUENCE
   46:d=5  hl=2 l=   3 prim: OBJECT            :localityName
   51:d=5  hl=2 l=   4 prim: PRINTABLESTRING   :HCMC
   57:d=3  hl=2 l=  17 cons: SET
   59:d=4  hl=2 l=  15 cons: SEQUENCE
   61:d=5  hl=2 l=   3 prim: OBJECT            :organizationName
   66:d=5  hl=2 l=   8 prim: PRINTABLESTRING   :Test org
   76:d=3  hl=2 l=  20 cons: SET
   78:d=4  hl=2 l=  18 cons: SEQUENCE
   80:d=5  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
   85:d=5  hl=2 l=  11 prim: PRINTABLESTRING   :Email Users
   98:d=3  hl=2 l=  14 cons: SET
  100:d=4  hl=2 l=  12 cons: SEQUENCE
  102:d=5  hl=2 l=   3 prim: OBJECT            :commonName
  107:d=5  hl=2 l=   5 prim: PRINTABLESTRING   :user1
  114:d=3  hl=2 l=  29 cons: SET
  116:d=4  hl=2 l=  27 cons: SEQUENCE
  118:d=5  hl=2 l=   9 prim: OBJECT            :emailAddress
  129:d=5  hl=2 l=  14 prim: IA5STRING         :user1@test.org
  145:d=2  hl=3 l= 159 cons: SEQUENCE
  148:d=3  hl=2 l=  13 cons: SEQUENCE
  150:d=4  hl=2 l=   9 prim: OBJECT            :rsaEncryption
  161:d=4  hl=2 l=   0 prim: NULL
  163:d=3  hl=3 l= 141 prim: BIT STRING
  307:d=2  hl=2 l=   0 cons: cont [ 0 ]
  309:d=1  hl=2 l=  13 cons: SEQUENCE
  311:d=2  hl=2 l=   9 prim: OBJECT            :sha1WithRSAEncryption
  322:d=2  hl=2 l=   0 prim: NULL
  324:d=1  hl=3 l= 129 prim: BIT STRING

- Trong CSR không có field nào chứa validity period info để request CA phải approve 1 validity period.

Mình download source của openssl 0.9.8j về check thử, file apps/x509.c, line 1201-1240
Code:
static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest,
                                                CONF *conf, char *section)
        {

        EVP_PKEY *pktmp;

        pktmp = X509_get_pubkey(x);
        EVP_PKEY_copy_parameters(pktmp,pkey);
        EVP_PKEY_save_parameters(pktmp,1);
        EVP_PKEY_free(pktmp);

        if (!X509_set_issuer_name(x,X509_get_subject_name(x))) goto err;
        if (X509_gmtime_adj(X509_get_notBefore(x),0) == NULL) goto err;

        /* Lets just make it 12:00am GMT, Jan 1 1970 */
        /* memcpy(x->cert_info->validity->notBefore,"700101120000Z",13); */
        /* 28 days to be certified */

        if (X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days) == NULL)
                goto err;

        if (!X509_set_pubkey(x,pkey)) goto err;
        if (clrext)
                {
                while (X509_get_ext_count(x) > 0) X509_delete_ext(x, 0);
                }
        if (conf)
                {
                X509V3_CTX ctx;
                X509_set_version(x,2); /* version 3 certificate */
                X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0);
                X509V3_set_nconf(&ctx, conf);
                if (!X509V3_EXT_add_nconf(conf, &ctx, section, x)) goto err;
                }
        if (!X509_sign(x,pkey,digest)) goto err;
        return 1;
err:
        ERR_print_errors(bio_err);
        return 0;
        }


- Mình thấy validity period được set khi CA sign() certificate, không được set trong CSR của client.

Vậy mình nghĩ process của mrro sẽ gặp khó khăn ở các điểm sau:
- Không thể trực tiếp tạo 1 modified crt với các thông tin lấy từ crt cũ và bảo CA sign nó. Chỉ có thể tạo 1 csr mới từ crt cũ, csr này không mang thông tin về validity period (client không thể tự chỉ định mình muốn certificate của mình xài được trong bao lâu). csr này sau đó được gửi đi cho CA để tạo 1 crt mới với validity period mới.
- Để tạo được csr mới từ certificate cũ, bạn cần private key cũ tương ứng, private key này probably nằm trong certificate store trên máy client, bạn không thể bảo vài trăm user supply passphrase của họ để decrypt cái privatekey được

mrro có thể cho vài hướng giải quyết được không ?


[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 17/07/2009 05:31:09 (+0700) | #11 | 186530
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
@rcrackvn: bạn tìm hiểu đúng rồi đó. trước đó mình đưa ra giải pháp kia là mình đặt ở vị trí mình (nghĩa là CA operator) tự làm cho user luôn, kô cần user phải tạo lại CSR hay là lục lại CSR cũ rồi gửi lại cho mình.

sở dĩ trong lúc bạn tạo CSR trên phía client, openssl cần private key của user là để nó thực hiện thao tác tự ký (self-sign) trên cái CSR. Sau đó trong quá trình sign cái CSR, CA sẽ kiểm tra cái chữ ký này, nhằm đảm bảo là thằng gửi cái CSR nó thực sự có cái private key tương ứng với cái public key nằm trong cái CSR.

nên nếu nhìn kỹ lại, đứng ở vai trò CA như bạn messi65, thì mình đâu có cần private key của user để extend cái ngày trên certificate của họ đâu. chỉ cần có cái cert cũ, mình tự làm CSR mới rồi ký luôn, bởi vì mình đã biết chắc là user họ có cái private key ứng với cái cert mà mình đang muốn extend rồi.

đương nhiên cách này thì chỉ làm nội bộ, chứ đụng CA bên ngoài thì client phải tự tạo (hay lấy lại) CSR rồi gửi cho CA ký, chứ CA kô thể tự tiện extend một cái cert nào đó.

dẫu vậy, cái cách mà mình đề nghị đầu tiên là cách củ chuối, không có ai làm hết. mình nghĩ đến nó tự vì mình cứ cho là mình đóng vai CA :-p. cái cách dùng openssl mà mình đề nghị ở post số #8 và bạn rcrackvn đề nghị ở post số #10 mới là cách đơn giản và nên làm.

-m

http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 17/07/2009 05:38:14 (+0700) | #12 | 186532
messi655
Member

[Minus]    0    [Plus]
Joined: 23/03/2009 16:42:20
Messages: 7
Offline
[Profile] [PM]
Đây là command tạo certificate cho users.

Cái này mình viết perl script cho user nhập username là địa chỉ email và password. Sau đó submit thì hệ thống sẽ tự động gởi cho user một cái certificate với định dạng username.lhv.vn.p12

# openssl genrsa -des3 -passout pass:" . $user_passwd . " -out /opt/lhvCA/usercerts/" . $user_name . ".key 1024

# openssl req -subj /CN=" . $user_name . "/O=LHV\\ Software/OU=IT\\ Group/L=Hochiminh/ST=Saigon/C=VN/emailAddress=" . $user_name . "\@lhv.vn -passin pass:" . $user_passwd . " -new -key /opt/lhvCA/usercerts/" . $user_name . ".key -out /opt/lhvCA/usercerts/" . $user_name . ".csr

# openssl ca -batch -in /opt/lhvCA/usercerts/" . $user_name . ".csr -cert /opt/lhvCA/CA/lhvCA.crt -keyfile /opt/lhvCA/CA/lhvCA.key -out /opt/lhvCA/usercerts/" . $user_name . ".crt

# openssl pkcs12 -name " . $user_name . " -certfile /opt/lhvCA/CA/lhvCA.crt -passin pass:" . $user_passwd . " -passout pass:" . $user_passwd . " -export -clcerts -in /opt/lhvCA/usercerts/" . $user_name . ".crt -inkey /opt/lhvCA/usercerts/" . $user_name . ".key -out /opt/lhvCA/usercerts/" . $user_name . ".lhv.vn.p12
[Up] [Print Copy]
  [Question]   Tăng thời gian expired của certificate đã hết hạn. 21/07/2009 05:53:16 (+0700) | #13 | 186964
messi655
Member

[Minus]    0    [Plus]
Joined: 23/03/2009 16:42:20
Messages: 7
Offline
[Profile] [PM]
Sao ko có ai help mình hết ta. Mọi người vui lòng cho tôi những ý tưởng để tôi có thể sớm fix vấn đề này.

Cảm ơn mọi người!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|