рд╣рдо рдирд┐рд╖рд┐рджреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

рд╕реА # , рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдФрд░ рдорд┐рдХреНрд░реЛрдЯрд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд╛рдЙрдЯрд░рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдкрд░ рдирд┐рд╖рд┐рджреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди

рдЫрд╡рд┐

рдЪреЗрддрд╛рд╡рдиреА! 03/19/2014 рдХреЛ рд╣рд╛рд▓ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдЪреНрдЫреЗрдж рд╕рдВрд╢реЛрдзрд┐рдд


рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ



рдХрд╛рдо рдореЗрдВ рд╣рдо рджреВрд░рд╕рдВрдЪрд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрдВрдЧреЗред
рдХрд╛рд░реНрдп рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
  1. рдирд┐рд╡реЗрджрди рд╕реГрдЬрди
  2. рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
  3. рдЕрдиреБрд░реЛрдз рд╣рд╕реНрддрд╛рдХреНрд╖рд░
  4. рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  5. рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
  6. MikroTik рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛


рдирд┐рд╡реЗрджрди рд╕реГрдЬрди



рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдЕрдирд▓реЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдз рдлрд╝рд╛рдЗрд▓ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреА рд╣реЛрдЧреАред рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

<?xml version="1.0" encoding="windows-1251"?> <request> <requestTime>2012-01-01T01:01:01.000+04:00</requestTime> <operatorName><![CDATA[ ]]></operatorName> <inn>1234567890</inn> <ogrn>1234567890123</ogrn> <email>email@email.ru</email> </request> 




рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░реВрдк 2012-01-01T01: 01: 01.000 + 04: 00 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдордп рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд┐рдВрдбреЛрдЬрд╝ -1251 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

C # рдореЗрдВ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЬрдирд░реЗрд╢рди рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб:

 public static String GeneratingRequest(String operatorName, String inn, String ogrn, String email) { String result = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>"; result += "<request><requestTime>"; result += DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz"); result += "</requestTime><operatorName>"; result += "<![CDATA[" + operatorName + "]]>"; result += "</operatorName><inn>"; result += inn; result += "</inn><ogrn>"; result += ogrn; result += "</ogrn><email>"; result += email; result += "</email></request>"; return result; } 


рдЕрдм рдлрд╛рдЗрд▓ рдХреЛ windows-1251 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╕реЗрд╡ рдХрд░реЗрдВ:
 String Request = GeneratingRequest(" ", "1234567890", "1234567890123", "email@email.ru") StreamWriter swRequest = new StreamWriter(@"C:\request.xml", false, Encoding.GetEncoding("Windows-1251")); swRequest.Write(Request); swRequest.Close(); 


рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЙрд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрдПрд▓рдПрд╕ - рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдкрди рд╕реЛрд░реНрд╕ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред

OpenSSL


рдЗрд╕ рд╕рд╛рдЗрдЯ рд╕реЗ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ - slproweb.com рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ Win64 OpenSSL v1.0.1g рдерд╛ ред

рд╣рд╛рдВ, рдЗрд╕ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рд╡рд┐рдЬреБрдЕрд▓ C ++ 2008 Redistributables рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рд╡рд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред "рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдЪреБрдиреЗрдВ" рд╕рдВрд╡рд╛рдж рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп , рдЖрдкрдХреЛ "рдж рдУрдкрдирдПрд╕рдПрд╕рдПрд▓" рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ (/ рдмрд┐рди) рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдБ рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛: C: / OpenSSL / bin рдФрд░ editsl.cfg рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝реЗрдВ:

openssl_conf = openssl_def

рдЕрдВрдд рдореЗрдВ:
[openssl_def]
engines=engine_section

[engine_section]
gost=gost_section

[gost_section]
engine_id=gost
dynamic_path = C:/OpenSSL/bin/gost.dll
default_algorithms=ALL

рд╕рдм рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ:
OPENSSL_CONF = C: /OSSSSL/bin/openssl.cfg - Opensl.cfg рдХрд╛ рдкреВрд░реНрдг рдкрде
рдЦреИрд░, рдкреЗрдЯ + рдореЗрдВ = рд╕реА: / рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ / рдмрд┐рди;

рдЕрдм рд╣рдореЗрдВ рдИрдбреАрдПрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдк рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдореЗрдВ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВред P12FromGostCSP рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Windows рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░рдВрд╕реА рд╕реЗ PKCS # 12 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреБрдВрдЬреА рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреНрдпреЛрдВ P12FromGostCSP
рдореИрдВ рд▓реЗрдЦ рдкрд░ рдПрдлрдПрдХреНрд╕рдЯреНрд░реЙрди рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ GOST рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рдкрд░ рдкреАрдПрдЪрдкреА-рд╕рд╛рдмреБрди рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ

рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдорд╛рдирдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рджреГрд╢реНрдп рд╕рдВрд╡рд╛рдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рдУрдкрдирд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ:
рдореИрдХ рдиреЗ рдареАрдХ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛
рдмреИрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
рд▓реЛрдХрд▓рдХрд┐рдб: режрез режреж режреж
friendlyName: REGISTRY \\ mstaff
Microsoft CSP рдирд╛рдо: рдХреНрд░рд┐рдкреНрдЯреЛ-рдкреНрд░реЛ GOST R 10/34/2001 рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛
рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддреНрд░реБрдЯрд┐
140017040754368: рддреНрд░реБрдЯрд┐: 06074079: рдбрд┐рдЬрд┐рдЯрд▓ рд▓рд┐рдлрд╛рдлрд╛ рджрд┐рдирдЪрд░реНрдпрд╛: EVP_PBE_CipherInit: рдЕрдЬреНрдЮрд╛рдд pbe рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо: evp_pbe.c: 167: TYPE = 1.2.840.11.149.1.12.1.80
140017040754368: рддреНрд░реБрдЯрд┐: 23077073: PKCS12 рджрд┐рдирдЪрд░реНрдпрд╛: PKCS12_pbe_crypt: pkcs12 algor рд╕рд┐рдлрд░рд┐рдЯрд┐рдЯ рддреНрд░реБрдЯрд┐: p12_decr.c: 83:
140017040754368: рддреНрд░реБрдЯрд┐: 2306A075: PKCS12 рджрд┐рдирдЪрд░реНрдпрд╛: PKCS12_item_decrypt_d2i: pkcs12 pbe рдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐: p12_decr.c: 130:

рдмрд╕ рдпрд╣реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдРрд╕реА рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ:

P12FromGostCSP рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ PKCS # 12 рдХрдВрдЯреЗрдирд░ CryptoCom LLC (Opensl рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░ Top Cross LLC рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рдорд╛рди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, CryptoPro рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред CSP (рд╕рдВрд╕реНрдХрд░рдг R3 рдХреЗ рдмрд╛рдж рд╕реЗ)ред

рдХреНрд░рд┐рдкреНрдЯреЛрдкреНрд░реЛ рд╕реАрдПрд╕рдкреА рдЖрд░ 3 рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкреАрдХреЗрд╕реАрдПрд╕ # 12 рдХрдВрдЯреЗрдирд░ рдХреЗ рдПрдПрд╕рдПрди 1 рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рджреЗрдЦрдирд╛ рдФрд░ рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдХрдВрдЯреЗрдирд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рдХреА рдУрдкрдирд╕реАрдПрд▓ рдпрд╛ рд▓рд┐рд░реНрд╕рд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ:

#openssl asn1parse тАУinform DER тАУin <PKCS рдХрдВрдЯреЗрдирд░ # 12>

рдпрджрд┐ рдЖрдк рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреБрд░рдВрдд рдЖрдкрдХреА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо GOST R 34.11-94 рдХреЗ рдмрдЬрд╛рдп, SHA1 рдХрд╛ рдЙрдкрдпреЛрдЧ CryptoPro рд╕реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдХрд░ рдХрдВрдЯреЗрдирд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рддреЛ рдЖрдкрдХреЛ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛:

#openssl pkcs12-in <PKCS рдХрдВрдЯреЗрдирд░ # 12>



PKCS # 12 рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП! рдЖрдк рдЗрд╕реЗ рдХрдорд╛рдВрдб рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 openssl.exe pkcs12 -in C:/key.pfx -nodes 


рдЫрд╡рд┐

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ PEM рдореЗрдВ рдмрджрд▓реЗрдВ ред OpenSSL рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ - рдпрд╣ PKCS # 12 рдХреБрдВрдЬреА рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ):

 openssl.exe pkcs12 -in C:/key.pfx -out C:/key.pem -nodes -clcerts 


рдЫрд╡рд┐

рд╣рд░ рдХреЛрдИ рдЕрдм рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рдЕрдиреБрд░реЛрдз рд╣рд╕реНрддрд╛рдХреНрд╖рд░



рдЖрдк рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде OpenSSL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 openssl.exe smime -sign -in C:/request.xml -out C:/request.xml.sign -signer C:/key.pem -outform DER 


рдЫрд╡рд┐

рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдЗрдирд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ C # рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛:

 public static Boolean SignRequest() { Boolean ret = true; String OpenSSLPath = @"C:\OpenSSL\bin"; String RequestPath = @"C:\request.xml"; String SignRequestPath = @"C:\request.xml.sign"; String KeyPEMPath = @"C:\key.pem"; try { Process cmdProcess = new Process(); /* *     *    PATH *    OpenSSL */ cmdProcess.StartInfo.WorkingDirectory = OpenSSLPath; cmdProcess.StartInfo.FileName = "openssl.exe"; cmdProcess.StartInfo.Arguments = String.Format("smime -sign -in {0} -out {1} -signer {2} -outform DER", RequestPath, SignRequestPath, KeyPEMPath); cmdProcess.StartInfo.CreateNoWindow = true; cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmdProcess.Start(); // dimzon541 if (!cmdProcess.WaitForExit(5000)) { cmdProcess.Kill(); ret = false; } } catch (Exception) { ret = false; } return ret; } 


рдЕрдм рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг : gosuslugi.ru , рдЪреБрдиреЗрдВ - рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ред ES - рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ, PKCS # 7 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ

рдЖрдк рдЗрд╕реЗ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░рдХрд╛рд╢рдХ рдХреЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдИрдбреАрдПрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреАрдИрдПрдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЖрдк рдЕрднреА рднреА рдпрд╣рд╛рдВ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ):
 openssl x509 -inform der -in C:/most.cer -out C:/most.pem 


рдФрд░ рд╣рдорд╛рд░реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
 openssl.exe smime -verify -in C:/request.xml.sign -content C:/request.xml -CAfile C:/most.pem -inform DER -out C:/validrequest.xml 


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд▓рд╛рдЗрди рджреЗрдЦреЗрдВрдЧреЗ:
 Verification successful 

рдФрд░ request.xml рдХреА рд╕рд╛рдордЧреНрд░реА validrequest.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдЧреАред

рд╣рдо рдирд┐рд╖рд┐рджреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдПрдХ рдбрдВрдк рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рдФрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЕрдкрд▓реЛрдб рдХрд░рдирд╛



рд╕рдм рдХреБрдЫ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ: рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдлреЙрд░реНрдо , рд╣рдо рдЕрдиреБрд░реЛрдз рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЙрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ ( C: /request.xml рдФрд░ C: /request.xml.sign ) рднреЗрдЬрддреЗ рд╣реИрдВ

рдЫрд╡рд┐

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ - рдЕрдиреБрд░реЛрдз рдЖрдИрдбреА, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдЬрд╝рд┐рдк рдкреНрд░рд╛рд░реВрдк рдореЗрдВ 5 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджреЛ рдбрдВрдкред xml рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА - рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдбрдВрдк рдФрд░ рдЗрд╕рдХрд╛ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ред

рдЖрдк OpenSSL рдпрд╛ gosuslugi.ru рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 openssl.exe smime -verify -in C:/dump.xml.sig -content C:/dump.xml -CAfile C:/cartk.pem -inform DER -out C:/validdump.xml 


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд▓рд╛рдЗрди рджреЗрдЦреЗрдВрдЧреЗ:
 Verification successful 

рдФрд░ dip.xml рдХреА рд╕рд╛рдордЧреНрд░реА validdump.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдЧреА ред

рдЕрдм рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрддрд░рд╛рдИ рдХреЗ рд▓рд┐рдП, рд╕реЛрдк рдПрдХреНрд╕реЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рддрд╣рдд рд╕реЗрд╡рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реИ , рдкрддрд╛: рд╕реЗрд╡рд╛ ред рдбрдмреНрд▓реВрдПрд╕рдбреАрдПрд▓ рдпреЛрдЬрдирд╛ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ: рдбрдмреНрд▓реВрдПрд╕рдбреАрдПрд▓ рдпреЛрдЬрдирд╛ ред

рд╕реЗрд╡рд╛ рдореЗрдВ 4 рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:



рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди:


рдореЗрдореЛ рдореЗрдВ рд╡рд╛рд╣рдХ рдХреЛ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреАрдбрдмреИрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред

рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ:
  1. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдЕрдирд▓реЛрдб рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, getLastDumpDateEx рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдкрд┐рдЫрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрджрд┐ lastDumpDateUrgently рдХрд╛ рдорд╛рди рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рддреБрд░рдВрдд рдПрдХ рдЕрджреНрдпрддрди рдЕрдирд▓реЛрдб рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд┐рд╡реЗрдХ рдкрд░ рдЕрдирд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рджрд┐рди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ ред
  2. рдпрджрд┐ рдЕрдирд▓реЛрдб рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ SendRequest рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВред
  3. рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рдмрд╛рдж, рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП getResult рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдЕрднреА рддрдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ (рдкрд░рд┐рдгрд╛рдо рдХреА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ рдХреНрд╖реЗрддреНрд░), рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рдмрд╛рдж рдЪрд░рдг 3 рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред


рд╣рдо рдбрдмреНрд▓реНрдпреВрдПрд╕рдбреАрдПрд▓ рдпреЛрдЬрдирд╛ рдХреЗ рдкрддреЗ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП рд╕реЗрд╡рд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб getLastDumpDate , sendRequest , getResult

MaxReceivedMessageSize
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдкреНрд░рдкрддреНрд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреАрдВ: рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрджреЗрд╢ рдЖрдХрд╛рд░ рдХрд╛ рдХреЛрдЯрд╛ ( 65536 ) рдкрд╛рд░ рдХрд░ рдЧрдпрд╛ рд╣реИред рдХреЛрдЯрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, MaxReceivedMessageSize рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрддреНрд╡ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ MaxReceivedMessageSize рд╕рдВрдкрддреНрддрд┐ рдмрдврд╝рд╛рдиреА рдкрдбрд╝реА ред
рд╕рдорд░реНрдерди рдЯрд┐рдкреНрдкрдгреА:
рдлрд┐рд▓рд╣рд╛рд▓, getResult рдореЗрдердб рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдореЗрдВ рдПрдХ xml рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ 65536 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред



 public static Int64 LastDumpDate() { Int64 lastDumpDate = 0; BasicHttpBinding HttpBinding = new BasicHttpBinding(); HttpBinding.MaxReceivedMessageSize = 1*1024*1024*1024; //1Gb using (ChannelFactory<ServiceReference.OperatorRequestPortType> scf = new ChannelFactory<ServiceReference.OperatorRequestPortType>( HttpBinding, new EndpointAddress("http://vigruzki.rkn.gov.ru/services/OperatorRequest/"))) { ServiceReference.OperatorRequestPortType channel = scf.CreateChannel(); ServiceReference.getLastDumpDateResponse glddr = channel.getLastDumpDate(new ServiceReference.getLastDumpDateRequest()); lastDumpDate = glddr.lastDumpDate; } return lastDumpDate; } public static Boolean SendRequest(out String resultComment, out String code, Byte[] requestFile, Byte[] signatureFile) { Boolean result = false; code = null; BasicHttpBinding HttpBinding = new BasicHttpBinding(); HttpBinding.MaxReceivedMessageSize = 1*1024*1024*1024; //1Gb using (ChannelFactory<ServiceReference.OperatorRequestPortType> scf = new ChannelFactory<ServiceReference.OperatorRequestPortType>( HttpBinding, new EndpointAddress("http://vigruzki.rkn.gov.ru/services/OperatorRequest/"))) { ServiceReference.OperatorRequestPortType channel = scf.CreateChannel(); ServiceReference.sendRequestRequestBody srrb = new ServiceReference.sendRequestRequestBody(); srrb.requestFile = requestFile; srrb.signatureFile = signatureFile; ServiceReference.sendRequestResponse srr = channel.sendRequest(new ServiceReference.sendRequestRequest(srrb)); resultComment = srr.Body.resultComment; if (result = srr.Body.result) { code = srr.Body.code; } } return result; } public static Boolean GetResult(out String resultComment, out Byte[] registerZipArchive, String code) { Boolean result = false; registerZipArchive = null; BasicHttpBinding HttpBinding = new BasicHttpBinding(); HttpBinding.MaxReceivedMessageSize = 1*1024*1024*1024; //1Gb using (ChannelFactory<ServiceReference.OperatorRequestPortType> scf = new ChannelFactory<ServiceReference.OperatorRequestPortType>( HttpBinding, new EndpointAddress("http://vigruzki.rkn.gov.ru/services/OperatorRequest/"))) { ServiceReference.OperatorRequestPortType channel = scf.CreateChannel(); ServiceReference.getResultRequestBody grrb = new ServiceReference.getResultRequestBody(); grrb.code = code; ServiceReference.getResultResponse grr = channel.getResult(new ServiceReference.getResultRequest(grrb)); resultComment = grr.Body.resultComment; if (result = grr.Body.result) { registerZipArchive = grr.Body.registerZipArchive; } } return result; } 


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ:

 String resultComment, code; if(SendRequest(out resultComment, out code, File.ReadAllBytes(@"C:/request.xml"), File.ReadAllBytes(@"C:/request.xml.sign"))) { //...   } 


рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдЕрдирд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЕрджреНрдпрддрди рдХрд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдпреВрдирд┐рдХреНрд╕ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╕реЗ рдбреЗрдЯрдЯрд╛рдЗрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 DateTime LastDumpDate = (new DateTime(1970, 1, 1, 0, 0, 0, 0)).AddSeconds(LastDumpDate()/1000); 


рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдбрдВрдк рдХрд░реЗрдВ



рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЦреЛрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
 // Byte[] registerZipArchive -     GetResult(); File.WriteAllBytes(@"C:/register.zip", registerZipArchive); ZipFile.ExtractToDirectory(@"C:/register.zip", @"C:/register"); 


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдбрдВрдк C: /register/dump.xml рдорд┐рд▓рддрд╛ рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдбрдВрдк рд╕рд╛рдордЧреНрд░реА:
 <?xml version="1.0" encoding="windows-1251"?> <reg:register updateTime="2014-02-02T12:00:00+04:00" xmlns:reg="http://rsoc.ru" xmlns:tns="http://rsoc.ru" updateTimeUrgently="2014-02-01T11:00:00"> <content id="68" includeTime="2013-12-01T10:00:05"> <decision date="2013-12-01" number="9" org=""/> <url><![CDATA[http://site1.com/index.php]]></url> <domain><![CDATA[site1.com]]></domain> <ip>1.1.1.1</ip> </content> <content id="68" includeTime="2013-12-01T10:00:05"> <decision date="2013-12-01" number="9" org=""/> <url><![CDATA[http://site2.com/page1.php]]></url> <url><![CDATA[http://site2.com/page2.php]]></url> <url><![CDATA[http://site2.com/page3.php]]></url> <domain><![CDATA[site2.com]]></domain> <ip>1.1.1.1</ip> <ip>1.1.1.2</ip> </content> <content id="9999" includeTime="2014-02-01T15:17:51" urgencyType="1"> <decision date="2014-02-01" number=" " org=""/> <url><![CDATA[http://site3.com/page1.html]]></url> <domain><![CDATA[site3.com]]></domain> <ip>1.2.3.4</ip> </content> </reg:register> 


рдкрд╛рд░рд╕рд┐рдо рдПрдХреНрд╕рдПрдордПрд▓

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдПрдВ: рдкрд╣рд▓реЗ RegisterDump рдореЗрдВ UpdateTime рдлрд╝реАрд▓реНрдб рдФрд░ рд╕рд╛рдордЧреНрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреА , рдФрд░ рджреВрд╕рд░рд╛ ItemRegisterDump рд╕рднреА рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдордЧреНрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛ ред

 public class RegisterDump { /* * <reg:register updateTime="2013-07-15T10:05:00+04:00" xmlns:reg="http://rsoc.ru" xmlns:tns="http://rsoc.ru"> * <content></content> * <content></content> * ... * <content></content> * </reg:register> */ public List<ItemRegisterDump> Items { get; set; } public String UpdateTime { get; set; } public RegisterDump() { this.Items = new List<ItemRegisterDump>(); this.UpdateTime = String.Empty; } public RegisterDump(String UpdateTime, List<ItemRegisterDump> Items) { this.Items = Items; this.UpdateTime = UpdateTime; } } public class ItemRegisterDump { /* * <content id="60" includeTime="2013-01-12T16:33:38"> * <decision date="2013-11-03" number="-6" org=""/> * <url><![CDATA[http://habrahabr.ru/post/187574/]]></url> * <ip>123.45.67.89</ip> * </content> * <content id="69" includeTime="2013-05-12T12:43:34"> * <decision date="2013-10-02" number="" org=""/> * <domain><![CDATA[chelaxe.ru]]></domain> * <ip>123.45.67.89</ip> * <ip>87.65.43.210</ip> * </content> */ public String id { get; set; } public String includeTime { get; set; } public String date { get; set; } public String number { get; set; } public String org { get; set; } public List<String> url { get; set; } public List<String> domain { get; set; } public List<String> ip { get; set; } public ItemRegisterDump() { id = String.Empty; includeTime = String.Empty; date = String.Empty; number = String.Empty; org = String.Empty; url = new List<String>(); domain = new List<String>(); ip = new List<String>(); } } 


Pars:

 RegisterDump Register = new RegisterDump(); String dumpfile = @"C:/register/dump.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(dumpfile); Register.UpdateTime = xmlDoc.GetElementsByTagName("reg:register")[0].Attributes.GetNamedItem("updateTime").InnerText; XmlNodeList content = xmlDoc.GetElementsByTagName("content"); for (int i = 0; i < content.Count; i++) { ItemRegisterDump item = new ItemRegisterDump(); item.id = content[i].Attributes.GetNamedItem("id").InnerText; item.includeTime = content[i].Attributes.GetNamedItem("includeTime").InnerText; foreach (XmlNode node in content[i].ChildNodes) { switch(node.Name) { case "decision": item.date = node.Attributes.GetNamedItem("date").InnerText; item.number = node.Attributes.GetNamedItem("number").InnerText; item.org = node.Attributes.GetNamedItem("org").InnerText; break; case "url": item.url.Add(node.InnerText); break; case "domain": item.domain.Add(node.InnerText); break; case "ip": item.ip.Add(node.InnerText); break; } } Register.Items.Add(item); } 


рдЕрдм рдЗрд╕ рд╕рд╛рд░реЗ рд╕рд╛рдорд╛рди рдХреЛ рд╣рдорд╛рд░реЗ рдорд┐рдХреНрд░реЛрдЯрд┐рдХ рдкрд░ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрдВред

рдорд┐рдХреНрд░реЛрдЯрд┐рдХ рдХреЗ рд╕рд╛рде рдЕрд╡рд░реБрджреНрдз


рд╣рдо рдЗрд╕реЗ рд▓реЗрдпрд░ 7-рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
/ip firewall layer7-protocol add name=12 comment=register regexp=^.+(chelaxe.ru).*$
/ip firewall filter add action=drop chain=forward disabled=no dst-port=80 layer7-protocol=12 protocol=tcp src-address=192.168.0.0/24 comment=register

рдЫрд╡рд┐
рдЫрд╡рд┐
рдЫрд╡рд┐
рдЫрд╡рд┐

192.168.0.0/24 рд╕рдмрдиреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреИрдХреЗрдЯ рдЯреАрд╕реАрдкреА рдореЗрдВ 80 рд╕реЗ рдЕрдзрд┐рдХ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪрдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрдиреЗрдЯрд┐рдВрдЧ chelaxe.ru рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЫреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ ред
рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ, рд╢рд┐рд▓рд╛рд▓реЗрдЦ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧреА:

/ip firewall layer7-protocol remove [find comment=register]
/ip firewall filter remove [find comment=register]

рдЫрд╡рд┐

рдорд┐рдХреНрд░реЛрдЯрд┐рдХ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рд╣реИ: рд╡рд┐рдХреА / рдПрдкреАрдЖрдИ # рд╕реА

рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдХреНрд▓рд╛рд╕) рдФрд░ рдКрдкрд░ рдмреНрд▓реЙрдХ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо C # рдореЗрдВ рдпрд╣ рд╕рдм рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ

 public static Boolean AddFilterL7(String ip, String username, String password, RegisterDump dump, String SRCAddress) { Boolean ret = true; try { // MK   http://wiki.mikrotik.com/wiki/API_in_C_Sharp MK mikrotik = new MK(IPAddress.Parse(ip).ToString()); if (mikrotik.Login(username, password)) { mikrotik.Send("/system/script/add"); mikrotik.Send("=name=cleaner"); mikrotik.Send("=source=/ip firewall layer7-protocol remove [find comment=register]\n/ip firewall filter remove [find comment=register]", true); mikrotik.Read(); mikrotik.Send("/system/script/run"); mikrotik.Send("=number=cleaner", true); mikrotik.Read(); /* Cleaner * /ip firewall layer7-protocol remove [find comment=register] * /ip firewall filter remove [find comment=register] */ foreach (ItemRegisterDump item in dump.Items) { for (Int32 i = 0; i < item.domain.Count; i++ ) { mikrotik.Send("/ip/firewall/layer7-protocol/add"); mikrotik.Send("=name=" + item.id + "_" + i); mikrotik.Send("=comment=register"); mikrotik.Send("=regexp=^.+(" + item.domain[i] + ").*$", true); mikrotik.Read(); mikrotik.Send("/ip/firewall/filter/add"); mikrotik.Send("=action=drop"); mikrotik.Send("=chain=forward"); mikrotik.Send("=disabled=no"); mikrotik.Send("=dst-port=80"); mikrotik.Send("=layer7-protocol=" + item.id + "_" + i); mikrotik.Send("=protocol=tcp"); mikrotik.Send("=src-address=" + SRCAddress); mikrotik.Send("=comment=register", true); mikrotik.Read(); } } } } catch (Exception) { ret = false; } return ret; } 


рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдбреЛрдореЗрди рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред URL рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓реЗрдпрд░ 7-рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

^.*(/summary).*(chelaxe.ru).*$

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 5 рд╡реАрдВ рд╢рд╛рдЦрд╛ рд╕реЗ рд░рд╛рдЙрдЯрд░рдУрдПрд╕ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдПрдХ рдорд┐рдХреНрд░реЛрдЯрд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдкред

рдпрд╣рд╛рдВ рд╕реНрд░реЛрдд рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред

рдЬрдм рдирд┐рд░реНрдорд╛рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдореЗрдореЛ
OpenSSL 1.0.1c + libGOST.so + CryptoPro + ruToken рд╕реЗ рдХреБрдВрдЬреА
рд╣рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╕рдВрд╕рд╛рдзрди рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рдорд┐рд▓реА
Roskomnadzor рдиреЗ "рдкрд╛рдпрд░реЗрдЯреЗрдб" рдлрд┐рд▓реНрдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХреА
рд░реЗрдЧреНрдпреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рд╕реАрдЦрдиреЗ, рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП RegExr рд╕рд╣рдЬ рдЙрдкрдХрд░рдг

Source: https://habr.com/ru/post/In187574/


All Articles