Revision: 67000
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 28, 2014 18:17 by miha
Initial Code
<?php // ISO_3166-2 $countries = array( array('AD', 'Andorra', 'Ðндорра'), array('AE', 'United Arab Emirates', 'Объединённые ÐрабÑкие Ðмираты'), array('AF', 'Afghanistan', 'ÐфганиÑтан'), array('AG', 'Antigua and Barbuda', 'Ðнтигуа и Барбуда'), array('AI', 'Anguilla', 'ÐнгильÑ'), array('AL', 'Albania', 'ÐлбаниÑ'), array('AM', 'Armenia', 'ÐрмениÑ'), array('AN', 'Netherlands Antilles', 'ÐидерландÑкие Ðнтилы'), array('AO', 'Angola', 'Ðнгола'), array('AQ', 'Antarctica', 'Ðнтарктида'), array('AR', 'Argentina', 'Ðргентина'), array('AS', 'American Samoa', 'ÐмериканÑкое Самоа'), array('AT', 'Austria', 'ÐвÑтриÑ'), array('AU', 'Australia', 'ÐвÑтралиÑ'), array('AW', 'Aruba', 'Ðруба'), array('AX', 'Aland Islands', 'ÐландÑкие оÑтрова'), array('AZ', 'Azerbaijan', 'Ðзербайджан'), array('BA', 'Bosnia and Herzegovina', 'БоÑÐ½Ð¸Ñ Ð¸ Герцеговина'), array('BB', 'Barbados', 'БарбадоÑ'), array('BD', 'Bangladesh', 'Бангладеш'), array('BE', 'Belgium', 'БельгиÑ'), array('BF', 'Burkina Faso', 'Буркина ФаÑо'), array('BG', 'Bulgaria', 'БолгариÑ'), array('BH', 'Bahrain', 'Бахрейн'), array('BI', 'Burundi', 'Бурунди'), array('BJ', 'Benin', 'Бенин'), array('BL', 'Saint Barthelemy', 'Сен-Бартельми'), array('BM', 'Bermuda', 'Бермуды'), array('BN', 'Brunei', 'Бруней'), array('BO', 'Bolivia', 'БоливиÑ'), array('BR', 'Brazil', 'БразилиÑ'), array('BS', 'Bahamas', 'Багамы'), array('BT', 'Bhutan', 'Бутан'), array('BV', 'Bouvet Island', 'ОÑтров Буве'), array('BW', 'Botswana', 'БотÑвана'), array('BY', 'Belarus', 'БеларуÑÑŒ'), array('BZ', 'Belize', 'Белиз'), array('CA', 'Canada', 'Канада'), array('CC', 'Cocos (Keeling) Islands', 'КокоÑовые (Килинг) оÑтрова'), array('CD', 'Congo (Democratic Republic)', 'Конго (ДемократичеÑÐºÐ°Ñ Ð ÐµÑпублика)'), array('CF', 'Central African Republic', 'ЦентральноафриканÑÐºÐ°Ñ Ð ÐµÑпублика'), array('CG', 'Congo', 'Конго'), array('CH', 'Switzerland', 'ШвейцариÑ'), array('CI', 'Cote d’Ivoire', 'Кот-д’Ивуар'), array('CK', 'Cook Islands', 'ОÑтрова Кука'), array('CL', 'Chile', 'Чили'), array('CM', 'Cameroon', 'Камерун'), array('CN', 'China', 'Китай'), array('CO', 'Colombia', 'КолумбиÑ'), array('CR', 'Costa Rica', 'КоÑта-Рика'), array('CU', 'Cuba', 'Куба'), array('CV', 'Cape Verde', 'Кабо-Верде'), array('CX', 'Christmas Island', 'ОÑтров РождеÑтва'), array('CY', 'Cyprus', 'Кипр'), array('CZ', 'Czech Republic', 'ЧехиÑ'), array('DE', 'Germany', 'ГерманиÑ'), array('DJ', 'Djibouti', 'Джибути'), array('DK', 'Denmark', 'ДаниÑ'), array('DM', 'Dominica', 'Доминика'), array('DO', 'Dominican Republic', 'ДоминиканÑÐºÐ°Ñ Ð ÐµÑпублика'), array('DZ', 'Algeria', 'Ðлжир'), array('EC', 'Ecuador', 'Ðквадор'), array('EE', 'Estonia', 'ÐÑтониÑ'), array('EG', 'Egypt', 'Египет'), array('EH', 'Western Sahara', 'Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ Ð¡Ð°Ñ…Ð°Ñ€Ð°'), array('ER', 'Eritrea', 'ÐритреÑ'), array('ES', 'Spain', 'ИÑпаниÑ'), array('ET', 'Ethiopia', 'ÐфиопиÑ'), array('EU', 'European Union', 'ЕвроÑоюз'), array('FI', 'Finland', 'ФинлÑндиÑ'), array('FJ', 'Fiji', 'Фиджи'), array('FK', 'Falkland Islands (Malvinas)', 'ФолклендÑкие оÑтрова (МальвинÑкие)'), array('FM', 'Micronesia', 'МикронезиÑ'), array('FO', 'Faroe Islands', 'ФарерÑкие оÑтрова'), array('FR', 'France', 'ФранциÑ'), array('GA', 'Gabon', 'Габон'), array('GB', 'United Kingdom', 'ВеликобританиÑ'), array('GD', 'Grenada', 'Гренада'), array('GE', 'Georgia', 'ГрузиÑ'), array('GF', 'French Guiana', 'ФранцузÑÐºÐ°Ñ Ð“Ð²Ð¸Ð°Ð½Ð°'), array('GG', 'Guernsey', 'ГернÑи'), array('GH', 'Ghana', 'Гана'), array('GI', 'Gibraltar', 'Гибралтар'), array('GL', 'Greenland', 'ГренландиÑ'), array('GM', 'Gambia', 'ГамбиÑ'), array('GN', 'Guinea', 'ГвинеÑ'), array('GP', 'Guadeloupe', 'Гваделупа'), array('GQ', 'Equatorial Guinea', 'ÐÐºÐ²Ð°Ñ‚Ð¾Ñ€Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ð“Ð²Ð¸Ð½ÐµÑ'), array('GR', 'Greece', 'ГрециÑ'), array('GS', 'South Georgia and the South Sandwich Islands', 'Ð®Ð¶Ð½Ð°Ñ Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ð¸Ñ Ð¸ Южные Сандвичевы оÑтрова'), array('GT', 'Guatemala', 'Гватемала'), array('GU', 'Guam', 'Гуам'), array('GW', 'Guinea-Bissau', 'ГвинеÑ-БиÑау'), array('GY', 'Guyana', 'Гайана'), array('HK', 'Hong Kong', 'Гонконг'), array('HM', 'Heard Island and McDonald Islands', 'ОÑтров Херд и оÑтрова Макдональд'), array('HN', 'Honduras', 'ГондураÑ'), array('HR', 'Croatia', 'ХорватиÑ'), array('HT', 'Haiti', 'Гаити'), array('HU', 'Hungary', 'ВенгриÑ'), array('ID', 'Indonesia', 'ИндонезиÑ'), array('IE', 'Ireland', 'ИрландиÑ'), array('IL', 'Israel', 'Израиль'), array('IM', 'Isle of Man', 'ОÑтров ÐœÑн'), array('IN', 'India', 'ИндиÑ'), array('IO', 'British Indian Ocean Territory', 'БританÑÐºÐ°Ñ Ñ‚ÐµÑ€Ñ€Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð² ИндийÑком океане'), array('IQ', 'Iraq', 'Ирак'), array('IR', 'Iran', 'Иран'), array('IS', 'Iceland', 'ИÑландиÑ'), array('IT', 'Italy', 'ИталиÑ'), array('JE', 'Jersey', 'ДжерÑи'), array('JM', 'Jamaica', 'Ямайка'), array('JO', 'Jordan', 'ИорданиÑ'), array('JP', 'Japan', 'ЯпониÑ'), array('KE', 'Kenya', 'КениÑ'), array('KG', 'Kyrgyzstan', 'КиргизиÑ'), array('KH', 'Cambodia', 'Камбоджа'), array('KI', 'Kiribati', 'Кирибати'), array('KM', 'Comoros', 'Коморы'), array('KN', 'Saint Kitts and Nevis', 'Сент-ÐšÐ¸Ñ‚Ñ Ð¸ ÐевиÑ'), array('KP', 'North Korea', 'Ð¡ÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐšÐ¾Ñ€ÐµÑ'), array('KR', 'South Korea', 'Ð®Ð¶Ð½Ð°Ñ ÐšÐ¾Ñ€ÐµÑ'), array('KW', 'Kuwait', 'Кувейт'), array('KY', 'Cayman Islands', 'ОÑтрова Кайман'), array('KZ', 'Kazakhstan', 'КазахÑтан'), array('LA', 'Laos', 'ЛаоÑ'), array('LB', 'Lebanon', 'Ливан'), array('LC', 'Saint Lucia', 'Сент-ЛюÑиÑ'), array('LI', 'Liechtenstein', 'Лихтенштейн'), array('LK', 'Sri Lanka', 'Шри-Ланка'), array('LR', 'Liberia', 'ЛибериÑ'), array('LS', 'Lesotho', 'ЛеÑото'), array('LT', 'Lithuania', 'Литва'), array('LU', 'Luxembourg', 'ЛюкÑембург'), array('LV', 'Latvia', 'ЛатвиÑ'), array('LY', 'Libya', 'ЛивиÑ'), array('MA', 'Morocco', 'Марокко'), array('MC', 'Monaco', 'Монако'), array('MD', 'Moldova', 'Молдова'), array('ME', 'Montenegro', 'ЧерногориÑ'), array('MF', 'Saint Martin', 'ОÑтров СвÑтого Мартина'), array('MG', 'Madagascar', 'МадагаÑкар'), array('MH', 'Marshall Islands', 'Маршалловы оÑтрова'), array('MK', 'Macedonia', 'МакедониÑ'), array('ML', 'Mali', 'Мали'), array('MM', 'Myanmar', 'МьÑнма'), array('MN', 'Mongolia', 'МонголиÑ'), array('MO', 'Macao', 'Макао'), array('MP', 'Northern Mariana Islands', 'Северные МарианÑкие оÑтрова'), array('MQ', 'Martinique', 'Мартиника'), array('MR', 'Mauritania', 'МавританиÑ'), array('MS', 'Montserrat', 'МонтÑеррат'), array('MT', 'Malta', 'Мальта'), array('MU', 'Mauritius', 'Маврикий'), array('MV', 'Maldives', 'Мальдивы'), array('MW', 'Malawi', 'Малави'), array('MX', 'Mexico', 'МекÑика'), array('MY', 'Malaysia', 'МалайзиÑ'), array('MZ', 'Mozambique', 'Мозамбик'), array('NA', 'Namibia', 'ÐамибиÑ'), array('NC', 'New Caledonia', 'ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÐµÐ´Ð¾Ð½Ð¸Ñ'), array('NE', 'Niger', 'Ðигер'), array('NF', 'Norfolk Island', 'ОÑтров Ðорфолк'), array('NG', 'Nigeria', 'ÐигериÑ'), array('NI', 'Nicaragua', 'Ðикарагуа'), array('NL', 'Netherlands', 'Ðидерланды'), array('NO', 'Norway', 'ÐорвегиÑ'), array('NP', 'Nepal', 'Ðепал'), array('NR', 'Nauru', 'Ðауру'), array('NU', 'Niue', 'ÐиуÑ'), array('NZ', 'New Zealand', 'ÐÐ¾Ð²Ð°Ñ Ð—ÐµÐ»Ð°Ð½Ð´Ð¸Ñ'), array('OM', 'Oman', 'Оман'), array('PA', 'Panama', 'Панама'), array('PE', 'Peru', 'Перу'), array('PF', 'French Polynesia', 'ФранцузÑÐºÐ°Ñ ÐŸÐ¾Ð»Ð¸Ð½ÐµÐ·Ð¸Ñ'), array('PG', 'Papua New Guinea', 'Папуа-ÐÐ¾Ð²Ð°Ñ Ð“Ð²Ð¸Ð½ÐµÑ'), array('PH', 'Philippines', 'Филиппины'), array('PK', 'Pakistan', 'ПакиÑтан'), array('PL', 'Poland', 'Польша'), array('PM', 'Saint Pierre and Miquelon', 'Сен-Пьер и Микелон'), array('PN', 'Pitcairn', 'Питкерн'), array('PR', 'Puerto Rico', 'ПуÑрто-Рико'), array('PS', 'Palestinian Territory', 'ПалеÑтинÑÐºÐ°Ñ Ð°Ð²Ñ‚Ð¾Ð½Ð¾Ð¼Ð¸Ñ'), array('PT', 'Portugal', 'ПортугалиÑ'), array('PW', 'Palau', 'Палау'), array('PY', 'Paraguay', 'Парагвай'), array('QA', 'Qatar', 'Катар'), array('RE', 'Reunion', 'Реюньон'), array('RO', 'Romania', 'РумыниÑ'), array('RS', 'Serbia', 'СербиÑ'), array('RU', 'Russian Federation', 'РоÑÑиÑ'), array('RW', 'Rwanda', 'Руанда'), array('SA', 'Saudi Arabia', 'СаудовÑÐºÐ°Ñ ÐравиÑ'), array('SB', 'Solomon Islands', 'Соломоновы оÑтрова'), array('SC', 'Seychelles', 'Сейшелы'), array('SD', 'Sudan', 'Судан'), array('SE', 'Sweden', 'ШвециÑ'), array('SG', 'Singapore', 'Сингапур'), array('SH', 'Saint Helena', 'СвÑÑ‚Ð°Ñ Ð•Ð»ÐµÐ½Ð°'), array('SI', 'Slovenia', 'СловениÑ'), array('SJ', 'Svalbard and Jan Mayen', 'Шпицберген и Ян Майен'), array('SK', 'Slovakia', 'СловакиÑ'), array('SL', 'Sierra Leone', 'Сьерра-Леоне'), array('SM', 'San Marino', 'Сан-Марино'), array('SN', 'Senegal', 'Сенегал'), array('SO', 'Somalia', 'Сомали'), array('SR', 'Suriname', 'Суринам'), array('SS', 'South Sudan', 'Южный Судан'), array('ST', 'Sao Tome and Principe', 'Сан-Томе и ПринÑипи'), array('SV', 'El Salvador', 'Ðль-Сальвадор'), array('SY', 'Syrian Arab Republic', 'СирийÑÐºÐ°Ñ ÐрабÑÐºÐ°Ñ Ð ÐµÑпублика'), array('SZ', 'Swaziland', 'Свазиленд'), array('TC', 'Turks and Caicos Islands', 'ОÑтрова Ð¢ÐµÑ€ÐºÑ Ð¸ КайкоÑ'), array('TD', 'Chad', 'Чад'), array('TF', 'French Southern Territories', 'ФранцузÑкие Южные территории'), array('TG', 'Togo', 'Того'), array('TH', 'Thailand', 'Таиланд'), array('TJ', 'Tajikistan', 'ТаджикиÑтан'), array('TK', 'Tokelau', 'Токелау'), array('TL', 'Timor-Leste', 'Тимор-ЛеÑте'), array('TM', 'Turkmenistan', 'ТуркмениÑ'), array('TN', 'Tunisia', 'ТуниÑ'), array('TO', 'Tonga', 'Тонга'), array('TR', 'Turkey', 'ТурциÑ'), array('TT', 'Trinidad and Tobago', 'Тринидад и Тобаго'), array('TV', 'Tuvalu', 'Тувалу'), array('TW', 'Taiwan', 'Тайвань'), array('TZ', 'Tanzania', 'ТанзаниÑ'), array('UA', 'Ukraine', 'Украина'), array('UG', 'Uganda', 'Уганда'), array('UM', 'United States Minor Outlying Islands', 'Малые ТихоокеанÑкие отдаленные оÑтрова Соединенных Штатов'), array('US', 'United States', 'Соединенные Штаты Ðмерики'), array('UY', 'Uruguay', 'Уругвай'), array('UZ', 'Uzbekistan', 'УзбекиÑтан'), array('VA', 'Holy See (Vatican)', 'ПапÑкий ПреÑтол (Ватикан)'), array('VC', 'Saint Vincent and the Grenadines', 'Сент-ВинÑент и Гренадины'), array('VE', 'Venezuela', 'ВенеÑуÑла'), array('VG', 'Virgin Islands (British)', 'ВиргинÑкие оÑтрова (БританÑкие)'), array('VI', 'Virgin Islands (U.S.)', 'ВиргинÑкие оÑтрова (СШÐ)'), array('VN', 'Viet Nam', 'Вьетнам'), array('VU', 'Vanuatu', 'Вануату'), array('WF', 'Wallis and Futuna', 'Ð£Ð¾Ð»Ð»Ð¸Ñ Ð¸ Футуна'), array('WS', 'Samoa', 'Самоа'), array('YE', 'Yemen', 'Йемен'), array('YT', 'Mayotte', 'Майотта'), array('ZA', 'South Africa', 'Ð®Ð¶Ð½Ð°Ñ Ðфрика'), array('ZM', 'Zambia', 'ЗамбиÑ'), array('ZW', 'Zimbabwe', 'Зимбабве'), ); // ru/en $language = 'ru'; $countries_codes = array(); foreach($countries as $country) { $countries_codes[] = $country[0]; } $countries_names = array(); foreach($countries as $country) { switch($language) { case 'ru': $countries_names[] = $country[2]; break; case 'en': $countries_names[] = $country[1]; break; } } $fields = array( 'countryName' => array( 'en' => 'Country', 'ru' => 'Страна', ), 'stateOrProvinceName' => array( 'en' => 'State or Province', 'ru' => 'ОблаÑÑ‚ÑŒ', ), 'localityName' => array( 'en' => 'Locality', 'ru' => 'Город', ), 'organizationName' => array( 'en' => 'Organization', 'ru' => 'Ðазвание организации', ), 'organizationalUnitName' => array( 'en' => 'Organizational Unit', 'ru' => 'Подразделение', ), 'commonName' => array( 'en' => 'Domain', 'ru' => 'Домен', ), ); if($_POST) { function validate_country_code($input) { global $countries_codes; if(!empty($input) && preg_match("/([A-Z]{2})/", $input) && in_array($input, $countries_codes)) { return TRUE; } else { return FALSE; } } function validate_latin($input) { if(!empty($input) && preg_match("/([A-z-\s]{1,256})/", $input)) { return TRUE; } else { return FALSE; } } function validate_domain($input) { // http://stackoverflow.com/a/4694816 if(!empty($input) && preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $input) && preg_match("/^.{1,253}$/", $input) && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $input)) { return TRUE; } else { return FALSE; } } $errors = array(); if(!validate_country_code($_POST['countryName'])) { switch($language) { case 'ru': $errors[] = 'Ðеправильно заполнено поле: '.$fields['countryName'][$language]; break; case 'en': $errors[] = 'Bad field: '.$fields['countryName'][$language]; break; } } foreach(array( 'stateOrProvinceName' => $_POST['stateOrProvinceName'], 'localityName' => $_POST['localityName'], 'organizationName' => $_POST['organizationName'], 'organizationalUnitName' => $_POST['organizationalUnitName'], ) as $key => $value) { if(!validate_latin($value)) { switch($language) { case 'ru': $errors[] = 'ЗаполнÑетÑÑ Ð»Ð°Ñ‚Ð¸Ð½Ð¸Ñ†ÐµÐ¹: '.$fields[$key][$language]; break; case 'en': $errors[] = 'Latin only: '.$fields[$key][$language]; break; } } } if(!validate_domain($_POST['commonName'])) { switch($language) { case 'ru': $errors[] = 'Ðеправильно заполнено поле: '.$fields['commonName'][$language]; break; case 'en': $errors[] = 'Bad field: '.$fields['commonName'][$language]; break; } } if(empty($errors)) { // http://php.net/manual/en/function.openssl-csr-new.php $dn = array( 'countryName' => $_POST['countryName'], 'stateOrProvinceName' => $_POST['stateOrProvinceName'], 'localityName' => $_POST['localityName'], 'organizationName' => $_POST['organizationName'], 'organizationalUnitName' => $_POST['organizationalUnitName'], 'commonName' => $_POST['commonName'], ); $configargs = array( 'private_key_bits' => 2048, 'encrypt_key' => FALSE, 'private_key_type' => OPENSSL_KEYTYPE_RSA, ); $privkey = openssl_pkey_new($configargs); openssl_pkey_export($privkey, $pkeyout, '', $configargs); $csr = openssl_csr_new($dn, $privkey, $configargs); openssl_csr_export($csr, $csrout); $sscert = openssl_csr_sign($csr, NULL, $privkey, 365, $configargs); openssl_x509_export($sscert, $certout); } else { echo "<ul>\n"; foreach($errors as $error) { echo '<li>'.$error."</li>\n"; } echo "</ul>\n"; } } ?> <form method="post"> <?=$fields['countryName'][$language]; ?>: <select name="countryName"> <?php foreach($countries as $country) { switch($language) { case 'ru': echo ' <option value="'.$country[0].'"'.((isset($_POST['countryName']) && $_POST['countryName'] === $country[0]) ? ' selected' : '').'>'.$country[2].'</option>'."\n"; break; case 'en': echo ' <option value="'.$country[0].'"'.((isset($_POST['countryName']) && $_POST['countryName'] === $country[0]) ? ' selected' : '').'>'.$country[1].'</option>'."\n"; break; } } ?> </select><br> <?php foreach($fields as $key => $value) { if($key === 'countryName') { continue; } echo ' '.$fields[$key][$language].': <input name="'.$key.'" type="text" value="'.((isset($_POST[$key])) ? $_POST[$key] : '').'"><br>'."\n"; } ?> <input type="submit"> </form> <?php if(isset($pkeyout) && isset($csrout) && isset($certout) && $_POST) { echo "Private key:<br>\n".'<textarea style="width: 560px; height: 200px;">'.$pkeyout."</textarea><br>\n"; echo "CSR:<br>\n".'<textarea style="width: 560px; height: 200px;">'.$csrout."</textarea><br>\n"; echo "X509:<br>\n".'<textarea style="width: 560px; height: 200px;">'.$certout."</textarea>\n"; }
Initial URL
Initial Description
Web-form for generating Private key, Certificate Signing Request and Self-signed-certificate
Initial Title
Self-signed-certificate PKEY+CSR+X509 (SSL)
Initial Tags
Initial Language
PHP