Problem with openssl_verify

From: Date: Wed, 16 Apr 2003 13:10:39 +0000
Subject: Problem with openssl_verify
Groups: php.general 
Request: Send a blank email to php-general+get-144157@lists.php.net to get a copy of this message
Hi people, (and sorry for bad english) Im trying to verify a simple text with openssl_verify. The text is "hello world" without the quotes and the signature is attached as signature.txt and the pubkey probably used to make the signature (not quite sure since there is two pairs of keys and i have just started to research this topic. =)) is attached also as pubkey1.pem.. the other key that which the program gets from $_SERVER is not propably the key that is actually used to sign the text "hello world" but is used to crypt the connection between client and server. The other (which is attached) is the key that the browser plugin uses to generate the signature. I hope this is not too complicated for some of you.. for me this is. =) The program which i use to validate the signature is also attached as testi1.php.. sorry for finnish text and comments but you can read the syntax right? :) So when I use the program it says "blablbal:RSA_verify:wrong signature length".. Something is wrong.. i just dont have a clue. =) The testi1.htm is the output of the script.. Thanks for advance, Antti Peltonen

-----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIDAK2lMA0GCSqGSIb3DQEBBQUAMEwxCzAJBgNVBAYTAkZJ MRwwGgYDVQQKFBNWUkstRklOU0lHTiBHb3YuIENBMR8wHQYDVQQDFBZGSU5TSUdO IENBIGZvciBDaXRpemVuMB4XDTAzMDIwNzIzNTk1OVoXDTA2MDIwNDIzNTk1OVow ZzELMAkGA1UEBhMCRkkxETAPBgNVBAQUCFBFTFRPTkVOMQ4wDAYDVQQqFAVBTlRU STEhMB8GA1UEAxQYUEVMVE9ORU4gQU5UVEkgMTAwMTYxNDJCMRIwEAYDVQQFEwkx MDAxNjE0MkIwgZ0wDQYJKoZIhvcNAQEBBQADgYsAMIGHAoGBANcOk3etYvL+Kujh H9KTxnbRVJnEHTu+IHA3GLHfapQkzOnrtVteLxexEPQZMQ8hGqQpTBfZrdNE8c6O ZlkYswaOrexuMs5+zEGKMwwN7O+/F20wEGegdhMaszXi53l5+TY1B8t5rIWBSMya u3ejZnBffKJ73tVdSwbJMMJEnpjFAgEDo4HrMIHoMBEGA1UdDgQKBAhM1a8ozz1P bjAUBgNVHSAEDTALMAkGByqBdoQFAQEwEwYDVR0jBAwwCoAIRklOQ0FLMDEwDgYD VR0PAQH/BAQDAgZAMIGXBgNVHR8EgY8wgYwwgYmggYaggYOGgYBsZGFwOi8vMTkz LjIyOS4wLjIxMDozODkvY249Zmluc2lnbiUyMGNhJTIwZm9yJTIwY2l0aXplbixv PXZyay1maW5zaWduJTIwZ292LiUyMGNhLGRtZG5hbWU9ZmluZWlkLGM9Rkk/Y2Vy dGlmaWNhdGVyZXZvY2F0aW9ubGlzdDANBgkqhkiG9w0BAQUFAAOCAQEAKJ0+d0EL XTUB/cwENwU8LgGwk3U0bZSGRG6hXAFiSf5k5KzNFUAYvtknxGlySGRKgQ7kkQCo tYhIdCWonxXahZJ9bd5ya1RTP3UE+l8wijcXsZzlNCZsSwK7W1wfbIXaN1UST5rZ YyWak9JVoFg1F5OzCK4ZOW7iVfOuKvAO1iQJOttCUrtzzTwHmYGvJKmOXnAwZ2sl MgIcpR4vmV7fisLE8ppEDOeOxIMiKDJeiN6JuVWE6KoSe2AjMtlFhhm/jIJ3CWGd E0kqoQ7/9+KE4VYglO103v+2dho3ai9rJsWVd+SeMa8SjSb/AE+/rOj8YGAIIHXN xmDIF73f10qpeg== -----END CERTIFICATE----- MIIFOQYJKoZIhvcNAQcCoIIFKjCCBSYCAQExCzAJBgUrDgMCGgUAMBoGCSqGSIb3DQEHAaANBAtoZWxsbyB3b3JsZKCCA5owggOWMIICfqADAgECAgMAraUwDQYJKoZIhvcNAQEFBQAwTDELMAkGA1UEBhMCRkkxHDAaBgNVBAoUE1ZSSy1GSU5TSUdOIEdvdi4gQ0ExHzAdBgNVBAMUFkZJTlNJR04gQ0EgZm9yIENpdGl6ZW4wHhcNMDMwMjA3MjM1OTU5WhcNMDYwMjA0MjM1OTU5WjBnMQswCQYDVQQGEwJGSTERMA8GA1UEBBQIUEVMVE9ORU4xDjAMBgNVBCoUBUFOVFRJMSEwHwYDVQQDFBhQRUxUT05FTiBBTlRUSSAxMDAxNjE0MkIxEjAQBgNVBAUTCTEwMDE2MTQyQjCBnTANBgkqhkiG9w0BAQEFAAOBiwAwgYcCgYEA1w6Td61i8v4q6OEf0pPGdtFUmcQdO74gcDcYsd9qlCTM6eu1W14vF7EQ9BkxDyEapClMF9mt00Txzo5mWRizBo6t7G4yzn7MQYozDA3s778XbTAQZ6B2ExqzNeLneXn5NjUHy3mshYFIzJq7d6NmcF98onve1V1LBskwwkSemMUCAQOjgeswgegwEQYDVR0OBAoECEzVryjPPU9uMBQGA1UdIAQNMAswCQYHKoF2hAUBATATBgNVHSMEDDAKgAhGSU5DQUswMTAOBgNVHQ8BAf8EBAMCBkAwgZcGA1UdHwSBjzCBjDCBiaCBhqCBg4aBgGxkYXA6Ly8xOTMuMjI5LjAuMjEwOjM4OS9jbj1maW5zaWduJTIwY2ElMjBmb3IlMjBjaXRpemVuLG89dnJrLWZpbnNpZ24lMjBnb3YuJTIwY2EsZG1kbmFtZT1maW5laWQsYz1GST9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MA0GCSqGSIb3DQEBBQUAA4IBAQAonT53QQtdNQH9zAQ3BTwuAbCTdTRtlIZEbqFcAWJJ/mTkrM0VQBi+2SfEaXJIZEqBDuSRAKi1iEh0JaifFdqFkn1t3nJrVFM/dQT6XzCKNxexnOU0JmxLArtbXB9shdo3VRJPmtljJZqT0lWgWDUXk7MIrhk5buJV864q8A7WJAk620JSu3PNPAeZga8kqY5ecDBnayUyAhylHi+ZXt+KwsTymkQM547EgyIoMl6I3om5VYToqhJ7YCMy2UWGGb+MgncJYZ0TSSqhDv/34oThViCU7XTe/7Z2GjdqL2smxZV35J4xrxKNJv8AT7+s6PxgYAggdc3GYMgXvd/XSql6MYIBWDCCAVQCAQEwUzBMMQswCQYDVQQGEwJGSTEcMBoGA1UEChQTVlJLLUZJTlNJR04gR292LiBDQTEfMB0GA1UEAxQWRklOU0lHTiBDQSBmb3IgQ2l0aXplbgIDAK2lMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wMzA0MTYxMzA4MjRaMCMGCSqGSIb3DQEJBDEWBBQqrmw1yU/PtBXb6V9Ai5zpHuhG7TANBgkqhkiG9w0BAQEFAASBgKQbErF9tZD1YhbzhSAnnm7w8gKBrTn9Ha98kILXyg1qelwBveJhPQiB0lLuZa4kIgCFYxOc7SkSuAHD5Flt2kp6urQJBXWPL8zFtoOtxITZneZWfUOnrdE9MwCZJVTSLyKGFEYiU+Y7hd89AO7cBxj+VpGAI0MlH4UsHPTGZPp0<?php // käynnistetään sessio session_name("hsttesti1"); session_start(); // kökösti me näin hardkoodamme PELTOSEN antin pubkeyn testiä varten tänne =D ?> <html> <head> <title>testi1</title> </head> <body> <h3>Testataan allekirjoittamista...</h3> <br><i>HUOM! Keksi/eväste ("cookie") tuen tulee olla päällä selaimesta.</i> <?php // mitäs suoritetaan switch ($HTTP_GET_VARS["tila"]) { case 0: // näytä lomake echo "<form method=\"post\" action=\"testi1.php?tila=1\">\n"; echo "<textarea rows=\"25\" cols=\"50\" name=\"teksti\"></textarea><br/>\n"; echo "<input type=\"submit\" value=\"Siirry allekirjoittamaan &gt;&gt;\">\n"; echo "</form>\n"; break; case 1: // aseta se sessioon :) $syote_teksti = $HTTP_POST_VARS["teksti"]; session_register('syote_teksti'); // näytä teksti jne jne :) echo "Alla on kirjoittamasi teksti. Varmista sen oikeellisuus lukemalla se. Kun haluat allekirjoittaa paina \"Allekirjoita\" painiketta.<br/>\n"; echo "<hr><pre>". $HTTP_POST_VARS["teksti"]. "</pre><hr><br/>\n"; // piirrä namiska allekirjoitusta varten echo "<OBJECT CLASSID=\"CLSID:8AC8A833-2F0F-11D5-845D-0050DA2DEE56\" WIDTH=\"120\" HEIGHT=\"35\""; echo "<PARAM NAME=\"SRC\" VALUE=\"empty.sgn\">\n"; echo "<PARAM NAME=\"TYPE\" VALUE=\"text/x-text-to-sign\">\n"; echo "<PARAM NAME=\"WSXAction\" VALUE=\"https://betula.htk.fi/hst/testi1.php?tila=2\">\n"; echo "<PARAM NAME=\"WSXCustomBitmapURL\" VALUE=\"http://www.fineid.fi/images/etu.bmp\">\n"; echo "<PARAM NAME=\"WSXButtonName\" VALUE=\"Allekirjoita &gt;&gt;\">\n"; echo "<PARAM NAME=\"WSXName\" VALUE=\"FINEID_signature\">\n"; echo "<PARAM NAME=\"WSXFormat\" VALUE=\"PKCS7SIGNED\">\n"; echo "<PARAM NAME=\"WSXView\" VALUE=\"ShowData\">\n"; echo "<PARAM NAME=\"WSXWindow\" VALUE=\"_self\">\n"; echo "<PARAM NAME=\"WSXBase64\" VALUE=\"YES\">\n"; echo "<PARAM NAME=\"WSXDataToSign\" VALUE=\"". $HTTP_POST_VARS["teksti"]. "\">\n"; echo "\n"; echo "<EMBED\n"; echo "TYPE=\"text/x-text-to-sign\"\n"; echo "WIDTH=\"120\" HEIGHT=\"35\"\n"; echo "WSXButtonName=\"Allekirjoita &gt;&gt;\"\n"; echo "WSXName=\"FINEID_signature\"\n"; echo "WSXAction=\"https://betula.htk.fi/hst/testi1.php?tila=2\"\n"; echo "WSXCustomBitmapURL=\"http://www.fineid.fi/images/etu.bmp\"\n"; echo "WSXFormat=\"PKCS#7SIGNED\"\n"; echo "WSXView=\"ShowData\"\n"; echo "WSXWindow=\"_self\"\n"; echo "WSXDataToSign=\"". $HTTP_POST_VARS["teksti"]. "\"\n"; echo "WSXBase64=\"YES\">\n"; echo "</OBJECT>\n"; break; case 2: // tallenna sekin sessioon :) $syote_allekirjoitus = $HTTP_POST_VARS["FINEID_signature"]; session_register('syote_allekirjoitus'); echo "Alla on allekirjoitus..<br/>"; echo "<hr>"; echo "<pre>". $HTTP_POST_VARS["FINEID_signature"]."</pre>\n"; echo "<hr>\n"; echo "<form action=\"testi1.php?tila=3&aika=". $HTTP_GET_VARS["aika"]. "\" method=\"post\">"; echo "<input type=\"hidden\" name=\"FINEID_signature\" value=\"". $HTTP_POST_VARS["FINEID_signature"]. "\">\n"; echo "<input type=\"submit\" value=\"Varmista allekirjoitukseni ja minut &gt;&gt;\">\n"; echo "</form>\n"; break; case 3: // nyt meillä on sessiossa allekirjoitus sekä teksti. allekirjoituksesta löytyy myös julkinen avain. echo "Varmennetaan allekirjoittaja ". $_SERVER["SSL_CLIENT_S_DN_CN"]. " ja allekirjoitettu teksti.<br/>\n"; // tehdään lista CA certeistä :/ .. käytetään tässä testissä apachen hakemistossa olevaa certtiä $cainfo[0] = "/etc/apache/ssl.crt"; $cainfo[1] = "/etc/apache/ssl.crt/citizen.crt"; // 1) kaiva pubkey ulos $cert = openssl_x509_read($_SERVER["SSL_CLIENT_CERT"]) or die("En onnistunut kaivamaan avainta headereista.\n"); // tulikohan virheitä? :/ while($msg = openssl_error_string()) echo "openssl_x509_read: ". $msg . "<br />\n"; // 2) tarkista avain käyttötarkoitus if (openssl_x509_checkpurpose($_SERVER["SSL_CLIENT_CERT"], X509_PURPOSE_SMIME_SIGN, $cainfo)) //if (openssl_x509_checkpurpose($cert, X509_PURPOSE_SMIME_SIGN, $cainfo)) { echo "Avain on tarkoitettu allekirjoitukseen.<br>\n"; } else { echo "Avainta ei ole tarkoitettu allekirjoitukseen.. yritetään silti.<br>\n"; } // tulikohan virheitä? :/ while($msg = openssl_error_string()) echo "openssl_x509_checkpurpose: ". $msg . "<br />\n"; // dumpataan //echo "<pre>\n"; //var_dump(openssl_x509_parse($_SERVER["SSL_CLIENT_CERT"])); //echo "</pre>\n"; // 3) varmenna pubkey vasten CA:ta // @TODO: // 4) varmenna data + signi + pubkey $pubkeyid = openssl_get_publickey($_SERVER["SSL_CLIENT_CERT"]); // tulikohan virheitä? :/ while($msg = openssl_error_string()) echo "openssl_get_publickey: ". $msg . "<br />\n"; echo "<!-- ". base64_decode($_SESSION["syote_allekirjoitus"]). "-->"; switch (openssl_verify($_SESSION["syote_teksti"], base64_decode($_SESSION["syote_allekirjoitus"]), $pubkeyid)) { case 1; echo "Ok!<br>\n"; break; case 0; echo "Ei ok!<br>\n"; break; case -1; echo "Virhe!<br>\n"; break; } // tulikohan virheitä? :/ while($msg = openssl_error_string()) echo "openssl_verify: ". $msg . "<br />\n"; openssl_free_key($pubkeyid); break; } ?> <ul> <li><a href="index.php">Päävalikko</a></li> </ul> </body> </html>
« previous php.general (#144157) next »