Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 12th, 2012  |  syntax: None  |  size: 19.99 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2.  
  3. @date_default_timezone_set(@date_default_timezone_get());
  4.  
  5. $settings['opts'] = array('digest_alg'       => 'sha1',
  6.                           'private_key_type' => OPENSSL_KEYTYPE_RSA,
  7.                           'private_key_bits' => 2048);
  8.  
  9. $settings['dn'] = array('commonName'             => 'Jas-',
  10.                         'emailAddress'           => 'jason.gerfen@gmail.com',
  11.                         'countryName'            => 'US',
  12.                         'stateOrProvinceName'    => 'Utah',
  13.                         'localityName'           => 'Roy',
  14.                         'organizationName'       => 'University Of Utah',
  15.                         'organizationalUnitName' => 'Marriott Library');
  16.  
  17. if (!empty($_POST['spki-key'])){
  18.  
  19.  if ((!empty($_POST['commonName']))&&
  20.      (!empty($_POST['emailAddress']))&&
  21.      (!empty($_POST['countryName']))&&
  22.      (!empty($_POST['stateOrProvinceName']))&&
  23.      (!empty($_POST['localityName']))&&
  24.      (!empty($_POST['organizationName']))&&
  25.      (!empty($_POST['organizationalUnitName']))){
  26.  
  27.   $settings['dn']['countryName'] = $_POST['countryName'];
  28.   $settings['dn']['stateOrProvinceName'] = $_POST['stateOrProvinceName'];
  29.   $settings['dn']['localityName'] = $_POST['localityName'];
  30.   $settings['dn']['organizationName'] = $_POST['organizationName'];
  31.   $settings['dn']['organizationalUnitName'] = $_POST['organizationalUnitName'];
  32.   $settings['dn']['commonName'] = $_POST['commonName'];
  33.   $settings['dn']['emailAddress'] = $_POST['emailAddress'];
  34.   $settings['dn']['SPKAC'] = $_POST['spki-key'];
  35.  
  36.   $key = openssl_pkey_new($settings['opts']);
  37.  
  38.   if (!empty($_POST['spki-key'])){
  39.    if (function_exists('openssl_spki_export_challenge')){
  40.     $pwd = openssl_spki_export_challenge($_POST['spki-key']);
  41.    }
  42.    if (function_exists('openssl_spki_export')){
  43.     $pkey = openssl_spki_export($_POST['spki-key']);
  44.    }
  45.    openssl_pkey_export($key, $pkey, $pwd);
  46.   }
  47.  
  48.   $a = openssl_pkey_get_private($pkey, $pwd);
  49.  
  50.   $b = openssl_csr_new($settings['dn'], $a, $settings['opts']);
  51.  
  52.   openssl_csr_export($b, $c);
  53.  
  54.   $d = openssl_csr_sign($c, NULL, $a, 365);
  55.   //$c = openssl_spki_export_cert($a, $_POST['spki-key'], $settings['dn'], $settings['opts']);
  56.  
  57.   //openssl_csr_export($c, $d);
  58.  
  59. echo '<pre>'; print_r($c); echo '</pre>';
  60. /*
  61.   $length = sizeof($d);
  62.   header('Last-Modified: '.date('r+b'));
  63.   header('Accept-Ranges: bytes');
  64.   header('Content-Length: '.$length);
  65.   header('Content-Type: application/x-x509-user-cert');
  66.   readfile('/tmp/'.$_POST['emailAddress'].'-cert');
  67.   exit;
  68. */
  69.  }
  70. }
  71. ?>
  72. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  73. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  74. <head>
  75.  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  76.  <title>PHP OpenSSL SPKI functionality</title>
  77.  <link rel="stylesheet" href="styles.css" type="text/css" media="screen" />
  78. </head>
  79. <body>
  80. <div id="contact-form" class="clearfix">
  81.  <h2>SPKAC to PKCS#7 certificate generator</h2>
  82.  <p>This form is to demo the HTML5 KeyGen tag and the new PHP OpenSSL SPKI family of functions</p>
  83.  <form id="spkac" name="spkac" method="post" action="openssl-spki.php">
  84.   <div>
  85.    <label for="emailAddress">Email:</label>
  86.     <input type="email" name="emailAddress">
  87.   </div>
  88.   <div>
  89.    <label for="commonName">Name:</label>
  90.     <input type="text" name="commonName">
  91.   </div>
  92.   <div>
  93.    <label for="countryName">Country:</label>
  94.     <select name="countryName">
  95.      <optgroup label="North America">
  96.       <option value="US">United States</option>
  97.       <option value="AI">Anguilla</option>
  98.       <option value="AG">Antigua and Barbuda</option>
  99.       <option value="ABC">Aruba</option>
  100.       <option value="BS">Bahamas</option>
  101.       <option value="BB">Barbados</option>
  102.       <option value="BZ">Belize</option>
  103.       <option value="BM">Bermuda</option>
  104.       <option value="VG">Virgin Islands, British</option>
  105.       <option value="CA">Canada</option>
  106.       <option value="KY">Cayman Islands</option>
  107.       <option value="CR">Costa Rica</option>
  108.       <option value="CU">Cuba</option>
  109.       <option value="DM">Dominica</option>
  110.       <option value="DO">Dominican Republic</option>
  111.       <option value="SV">El Salvador</option>
  112.       <option value="FK">Falkland Islands (Malvinas)</option>
  113.       <option value="GL">Greenland</option>
  114.       <option value="GD">Grenada</option>
  115.       <option value="GP">Guadeloupe</option>
  116.       <option value="GT">Guatemala</option>
  117.       <option value="HT">Haiti</option>
  118.       <option value="HN">Honduras</option>
  119.       <option value="JM">Jamaica</option>
  120.       <option value="MQ">Martinique</option>
  121.       <option value="MX">Mexico</option>
  122.       <option value="MS">Montserrat</option>
  123.       <option value="AN">Netherlands Antilles</option>
  124.       <option value="NI">Nicaragua</option>
  125.       <option value="PA">Panama</option>
  126.       <option value="PR">Puerto Rico</option>
  127.       <option value="KN">Saint Kitts and Nevis</option>
  128.       <option value="LC">Saint Lucia</option>
  129.       <option value="PM">Saint Pierre and Miquelon</option>
  130.       <option value="VC">Saint Vincent and The Grenadines</option>
  131.       <option value="TT">Trinidad and Tobago</option>
  132.       <option value="TC">Turks and Caicos Islands</option>
  133.       <option value="UM">United States Minor Outlying Islands</option>
  134.       <option value="VI">Virgin Islands, U.S.</option>
  135.      </optgroup>
  136.      <optgroup label="South America">
  137.       <option value="010">Argentina</option>
  138.       <option value="026">Bolivia</option>
  139.       <option value="030">Brazil</option>
  140.       <option value="043">Chile</option>
  141.       <option value="047">Colombia</option>
  142.       <option value="062">Ecuador</option>
  143.       <option value="074">French Guiana</option>
  144.       <option value="091">Guyana</option>
  145.       <option value="167">Paraguay</option>
  146.       <option value="168">Peru</option>
  147.       <option value="202">Suriname</option>
  148.       <option value="228">Uruguay</option>
  149.       <option value="231">Venezuela</option>
  150.      </optgroup>
  151.      <optgroup label="Antarctica">
  152.       <option value="008">Antarctica</option>
  153.       <option value="029">Bouvet Island</option>
  154.       <option value="076">French Southern Territories</option>
  155.       <option value="093">Heard Island and Mcdonald Islands</option>
  156.       <option value="198">South Georgia and The South Sandwich Islands</option>
  157.      </optgroup>
  158.      <optgroup label="Africa">
  159.       <option value="003">Algeria</option>
  160.       <option value="006">Angola</option>
  161.       <option value="023">Benin</option>
  162.       <option value="028">Botswana</option>
  163.       <option value="034">Burkina Faso</option>
  164.       <option value="035">Burundi</option>
  165.       <option value="037">Cameroon</option>
  166.       <option value="039">Cape Verde</option>
  167.       <option value="041">Central African Republic</option>
  168.       <option value="042">Chad</option>
  169.       <option value="048">Comoros</option>
  170.       <option value="049">Congo</option>
  171.       <option value="050">Congo, The Democratic Republic of The</option>
  172.       <option value="053">Cote D'ivoire</option>
  173.       <option value="059">Djibouti</option>
  174.       <option value="063">Egypt</option>
  175.       <option value="065">Equatorial Guinea</option>
  176.       <option value="066">Eritrea</option>
  177.       <option value="068">Ethiopia</option>
  178.       <option value="077">Gabon</option>
  179.       <option value="078">Gambia</option>
  180.       <option value="081">Ghana</option>
  181.       <option value="089">Guinea</option>
  182.       <option value="090">Guinea-bissau</option>
  183.       <option value="110">Kenya</option>
  184.       <option value="119">Lesotho</option>
  185.       <option value="120">Liberia</option>
  186.       <option value="121">Libyan Arab Jamahiriya</option>
  187.       <option value="235">Wallis and Futuna</option>
  188.       <option value="236">Western Sahara</option>
  189.       <option value="237">Yemen</option>
  190.       <option value="127">Madagascar</option>
  191.       <option value="128">Malawi</option>
  192.       <option value="131">Mali</option>
  193.       <option value="135">Mauritania</option>
  194.       <option value="136">Mauritius</option>
  195.       <option value="137">Mayotte</option>
  196.       <option value="144">Morocco</option>
  197.       <option value="145">Mozambique</option>
  198.       <option value="147">Namibia</option>
  199.       <option value="155">Niger</option>
  200.       <option value="156">Nigeria</option>
  201.       <option value="175">Reunion</option>
  202.       <option value="178">Rwanda</option>
  203.       <option value="179">Saint Helena</option>
  204.       <option value="186">Sao Tome and Principe</option>
  205.       <option value="188">Senegal</option>
  206.       <option value="190">Seychelles</option>
  207.       <option value="191">Sierra Leone</option>
  208.       <option value="196">Somalia</option>
  209.       <option value="197">South Africa</option>
  210.       <option value="201">Sudan</option>
  211.       <option value="204">Swaziland</option>
  212.       <option value="210">Tanzania, United Republic of</option>
  213.       <option value="213">Togo</option>
  214.       <option value="217">Tunisia</option>
  215.       <option value="222">Uganda</option>
  216.       <option value="238">Zambia</option>
  217.       <option value="239">Zimbabwe</option>
  218.      </optgroup>
  219.      <optgroup label="Europe">
  220.       <option value="002">Albania</option>
  221.       <option value="005">Andorra</option>
  222.       <option value="011">Armenia</option>
  223.       <option value="014">Austria</option>
  224.       <option value="015">Azerbaijan</option>
  225.       <option value="020">Belarus</option>
  226.       <option value="021">Belgium</option>
  227.       <option value="027">Bosnia and Herzegovina</option>
  228.       <option value="033">Bulgaria</option>
  229.       <option value="054">Croatia</option>
  230.       <option value="056">Cyprus</option>
  231.       <option value="057">Czech Republic</option>
  232.       <option value="058">Denmark</option>
  233.       <option value="067">Estonia</option>
  234.       <option value="070">Faroe Islands</option>
  235.       <option value="072">Finland</option>
  236.       <option value="073">France</option>
  237.       <option value="079">Georgia</option>
  238.       <option value="080">Germany</option>
  239.       <option value="082">Gibraltar</option>
  240.       <option value="083">Greece</option>
  241.       <option value="084">Greenland</option>
  242.       <option value="097">Hungary</option>
  243.       <option value="098">Iceland</option>
  244.       <option value="103">Ireland</option>
  245.       <option value="105">Italy</option>
  246.       <option value="109">Kazakhstan</option>
  247.       <option value="300">Kosovo</option>
  248.       <option value="117">Latvia</option>
  249.       <option value="122">Liechtenstein</option>
  250.       <option value="123">Lithuania</option>
  251.       <option value="124">Luxembourg</option>
  252.       <option value="126">Macedonia</option>
  253.       <option value="132">Malta</option>
  254.       <option value="140">Moldova, Republic of</option>
  255.       <option value="141">Monaco</option>
  256.       <option value="301">Montenegro</option>
  257.       <option value="150">Netherlands</option>
  258.       <option value="160">Norway</option>
  259.       <option value="171">Poland</option>
  260.       <option value="172">Portugal</option>
  261.       <option value="176">Romania</option>
  262.       <option value="177">Russia</option>
  263.       <option value="185">San Marino</option>
  264.       <option value="189">Serbia and Montenegro</option>
  265.       <option value="193">Slovakia</option>
  266.       <option value="194">Slovenia</option>
  267.       <option value="199">Spain</option>
  268.       <option value="203">Svalbard and Jan Mayen</option>
  269.       <option value="205">Sweden</option>
  270.       <option value="206">Switzerland</option>
  271.       <option value="218">Turkey</option>
  272.       <option value="223">Ukraine</option>
  273.       <option value="225">United Kingdom</option>
  274.       <option value="094">Vatican City</option>
  275.      </optgroup>
  276.      <optgroup label="Asia">
  277.       <option value="001">Afghanistan</option>
  278.       <option value="011">Armenia</option>
  279.       <option value="015">Azerbaijan</option>
  280.       <option value="017">Bahrain</option>
  281.       <option value="018">Bangladesh</option>
  282.       <option value="025">Bhutan</option>
  283.       <option value="031">British Indian Ocean Territory</option>
  284.       <option value="032">Brunei Darussalam</option>
  285.       <option value="036">Cambodia</option>
  286.       <option value="044">China</option>
  287.       <option value="056">Cyprus</option>
  288.       <option value="079">Georgia</option>
  289.       <option value="096">Hong Kong</option>
  290.       <option value="099">India</option>
  291.       <option value="100">Indonesia</option>
  292.       <option value="101">Iran</option>
  293.       <option value="102">Iraq</option>
  294.       <option value="104">Israel</option>
  295.       <option value="107">Japan</option>
  296.       <option value="108">Jordan</option>
  297.       <option value="109">Kazakhstan</option>
  298.       <option value="112">Korea, North</option>
  299.       <option value="113">Korea, South</option>
  300.       <option value="114">Kuwait</option>
  301.       <option value="115">Kyrgyzstan</option>
  302.       <option value="116">Laos</option>
  303.       <option value="118">Lebanon</option>
  304.       <option value="125">Macau</option>
  305.       <option value="129">Malaysia</option>
  306.       <option value="130">Maldives</option>
  307.       <option value="142">Mongolia</option>
  308.       <option value="146">Myanmar</option>
  309.       <option value="149">Nepal</option>
  310.       <option value="161">Oman</option>
  311.       <option value="162">Pakistan</option>
  312.       <option value="164">Palestinian Territory</option>
  313.       <option value="169">Philippines</option>
  314.       <option value="174">Qatar</option>
  315.       <option value="177">Russia</option>
  316.       <option value="187">Saudi Arabia</option>
  317.       <option value="192">Singapore</option>
  318.       <option value="200">Sri Lanka</option>
  319.       <option value="207">Syria</option>
  320.       <option value="208">Taiwan</option>
  321.       <option value="209">Tajikistan</option>
  322.       <option value="211">Thailand</option>
  323.       <option value="212">Timor-leste</option>
  324.       <option value="218">Turkey</option>
  325.       <option value="219">Turkmenistan</option>
  326.       <option value="224">United Arab Emirates</option>
  327.       <option value="229">Uzbekistan</option>
  328.       <option value="232">Vietnam</option>
  329.       <option value="237">Yemen</option>
  330.      </optgroup>
  331.      <optgroup label="Oceania">
  332.       <option value="004">American Samoa</option>
  333.       <option value="013">Australia</option>
  334.       <option value="045">Christmas Island</option>
  335.       <option value="046">Cocos (Keeling) Islands</option>
  336.       <option value="051">Cook Islands</option>
  337.       <option value="302">Easter Island</option>
  338.       <option value="071">Fiji</option>
  339.       <option value="087">Guam</option>
  340.       <option value="100">Indonesia</option>
  341.       <option value="111">Kiribati</option>
  342.       <option value="133">Marshall Islands</option>
  343.       <option value="139">Micronesia, Federated States of</option>
  344.       <option value="148">Nauru</option>
  345.       <option value="152">New Caledonia</option>
  346.       <option value="153">New Zealand</option>
  347.       <option value="157">Niue</option>
  348.       <option value="158">Norfolk Island</option>
  349.       <option value="159">Northern Mariana Islands</option>
  350.       <option value="163">Palau</option>
  351.       <option value="166">Papua New Guinea</option>
  352.       <option value="170">Pitcairn</option>
  353.       <option value="075">French Polynesia</option>
  354.       <option value="184">Samoa</option>
  355.       <option value="195">Solomon Islands</option>
  356.       <option value="214">Tokelau</option>
  357.       <option value="215">Tonga</option>
  358.       <option value="221">Tuvalu</option>
  359.       <option value="230">Vanuatu</option>
  360.      </optgroup>
  361.     </select>
  362.   </div>
  363.   <div>
  364.    <label for="stateOrProvinceName">State:</label>
  365.     <select name="stateOrProvinceName">
  366.      <option value="AL">Alabama</option>
  367.      <option value="AK">Alaska</option>
  368.      <option value="AZ">Arizona</option>
  369.      <option value="AR">Arkansas</option>
  370.      <option value="CA">California</option>
  371.      <option value="CO">Colorado</option>
  372.      <option value="CT">Connecticut</option>
  373.      <option value="DE">Delaware</option>
  374.      <option value="DC">District Of Columbia</option>
  375.      <option value="FL">Florida</option>
  376.      <option value="GA">Georgia</option>
  377.      <option value="HI">Hawaii</option>
  378.      <option value="ID">Idaho</option>
  379.      <option value="IL">Illinois</option>
  380.      <option value="IN">Indiana</option>
  381.      <option value="IA">Iowa</option>
  382.      <option value="KS">Kansas</option>
  383.      <option value="KY">Kentucky</option>
  384.      <option value="LA">Louisiana</option>
  385.      <option value="ME">Maine</option>
  386.      <option value="MD">Maryland</option>
  387.      <option value="MA">Massachusetts</option>
  388.      <option value="MI">Michigan</option>
  389.      <option value="MN">Minnesota</option>
  390.      <option value="MS">Mississippi</option>
  391.      <option value="MO">Missouri</option>
  392.      <option value="MT">Montana</option>
  393.      <option value="NE">Nebraska</option>
  394.      <option value="NV">Nevada</option>
  395.      <option value="NH">New Hampshire</option>
  396.      <option value="NJ">New Jersey</option>
  397.      <option value="NM">New Mexico</option>
  398.      <option value="NY">New York</option>
  399.      <option value="NC">North Carolina</option>
  400.      <option value="ND">North Dakota</option>
  401.      <option value="OH">Ohio</option>
  402.      <option value="OK">Oklahoma</option>
  403.      <option value="OR">Oregon</option>
  404.      <option value="PA">Pennsylvania</option>
  405.      <option value="RI">Rhode Island</option>
  406.      <option value="SC">South Carolina</option>
  407.      <option value="SD">South Dakota</option>
  408.      <option value="TN">Tennessee</option>
  409.      <option value="TX">Texas</option>
  410.      <option value="UT">Utah</option>
  411.      <option value="VT">Vermont</option>
  412.      <option value="VA">Virginia</option>
  413.      <option value="WA">Washington</option>
  414.      <option value="WV">West Virginia</option>
  415.      <option value="WI">Wisconsin</option>
  416.      <option value="WY">Wyoming</option>
  417.     </select>
  418.   </div>
  419.   <div>
  420.    <label for="localityName">City:</label>
  421.     <input type="text" name="localityName">
  422.   </div>
  423.   <div>
  424.    <label for="organizationalName">Organization:</label>
  425.     <input type="text" name="organizationName">
  426.   </div>
  427.   <div>
  428.    <label for="organizationalUnitName">Department:</label>
  429.     <input type="text" name="organizationalUnitName">
  430.   </div>
  431.   <div>
  432.   <label for="spki-key">Key strength:</label>
  433.    <keygen name="spki-key" keytype="rsa" challenge="testing"></keygen>
  434.   </div>
  435.   <input type="submit">
  436.  </form>
  437. </div>
  438. <div id="contact-form" class="clearfix" style="word-wrap:break-word; font-size: 12px">
  439. <?php
  440. if (empty($_POST['spki-key'])){
  441.  echo "Generating private key...";
  442.  $key = openssl_pkey_new(array('digest_alg' => 'sha512',
  443.                                'private_key_type' => OPENSSL_KEYTYPE_RSA,
  444.                                'private_key_bits' => 2048));
  445.  echo "done<br/>";
  446.  echo "============================<br/>";
  447. }
  448.  
  449. if (empty($_POST['spki-key'])){
  450.  echo "Creating SPKAC...<br/>";
  451.  if (function_exists('openssl_spki_new')){
  452.   $spki = openssl_spki_new($key, 'wtfd00d', 'sha512');
  453.   echo $spki;
  454.  }
  455.  echo "<br/>done<br/>";
  456.  echo "============================<br/>";
  457. }
  458.  
  459. if (!empty($_POST['spki-key'])){
  460.  echo "Recieved SPKAC...<br/>";
  461.  echo $_POST['spki-key']."<br/>";
  462.  echo "done<br/>";
  463.  echo "============================<br/>";
  464. }
  465.  
  466. echo "Verifying SPKAC...<br/>";
  467. if (function_exists('openssl_spki_verify')){
  468.  $y = (empty($_POST['spki-key'])) ?
  469.   openssl_spki_verify(preg_replace('/SPKAC=/', '', $spki)) :
  470.   openssl_spki_verify($_POST['spki-key']);
  471.  var_dump($y);
  472. }
  473. echo "<br/>============================<br/>";
  474.  
  475. echo "Exporting challenge from SPKAC...<br/>";
  476. if (function_exists('openssl_spki_export_challenge')){
  477.  $x = (empty($_POST['spki-key'])) ?
  478.   openssl_spki_export_challenge(preg_replace('/SPKAC=/', '', $spki)) :
  479.   openssl_spki_export_challenge($_POST['spki-key']);
  480.  echo $x;
  481. }
  482. echo "<br/>done<br/>";
  483. echo "============================<br/>";
  484.  
  485. echo "Exporting public key from SPKAC...<br/>";
  486. if (function_exists('openssl_spki_export')){
  487.  $z = (empty($_POST['spki-key'])) ?
  488.   openssl_spki_export(preg_replace('/SPKAC=/', '', $spki)) :
  489.   openssl_spki_export($_POST['spki-key']);
  490.  echo '<pre>'; print_r($z); echo '</pre>';
  491. }
  492. echo "<br/>============================<br/>";
  493.  
  494. echo "SPKAC details...<br/>";
  495. if (function_exists('openssl_spki_details')){
  496.  $w = (empty($_POST['spki-key'])) ?
  497.   openssl_spki_details(preg_replace('/SPKAC=/', '', $spki)) :
  498.   openssl_spki_details($_POST['spki-key']);
  499.  echo '<pre>'; print_r($w); echo '</pre>';
  500. }
  501. echo "done<br/>";
  502. echo "============================<br/>";
  503.  
  504. if (empty($_POST['spki-key'])){
  505.  openssl_free_key($key);
  506. }
  507. ?>
  508. </div>
  509. </body>