Jump to content
php.lv forumi

Help: JAVA JKS uz PHP curl


darksign

Recommended Posts

Šei ir veids kā to dara iekš JAVA:


import com.sun.net.ssl.internal.ssl.Provider;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.Security;
import java.util.Properties;

public class myClass
{

   public myClass(MyObject object1)
   {
       try
       {
           String s = System.getProperty("java.version");

               .....

           ServerURL = ...
           proxyHost = ...
           proxyPort = ...
           httpsHandler = ...
           httpsCipher = ...
           keystoreFile = ...
           keystoreType = ...
           keystorePass = ...
           connectionTimeout = ...
           System.setProperty("javax.net.ssl.keyStore", keystoreFile);
           System.setProperty("javax.net.ssl.keyStoreType", keystoreType);
           System.setProperty("javax.net.ssl.keyStorePassword", keystorePass);
           System.setProperty("javax.net.ssl.trustStore", keystoreFile);
           System.setProperty("javax.net.ssl.trustStoreType", keystoreType);
           System.setProperty("javax.net.ssl.trustStorePassword", keystorePass);

           if(httpsHandler != null && httpsHandler.length() > 1)
               System.setProperty("java.protocol.handler.pkgs", httpsHandler);

           if(httpsCipher != null && httpsCipher.length() > 1)
               System.setProperty("https.cipherSuites", httpsCipher);

           if(proxyHost != null && proxyHost.length() > 1)
           {
               System.getProperties().setProperty("https.proxyHost", proxyHost);
               if(proxyPort != null && proxyPort.length() > 1)
                   System.getProperties().setProperty("https.proxyPort", proxyPort);
           }

           if(connectionTimeout != null)
               System.setProperty("java.net.connectiontimeout", connectionTimeout);
       }
       catch(Exception exception)
       {
           System.err.println("error: configuration problems (" + exception.getMessage() + ")");
       }
   }

   public void openConnection()
   {
       try
       {
           URL url = new URL(ServerURL);
           Conn = (HttpURLConnection)url.openConnection();
           Conn.setDoOutput(true);
       }
       catch(Exception exception)
       {
           System.err.println("error: SSL connection problems (" + exception.getMessage() + ")");
       }
   }

   String ServerURL;
   String proxyHost;
   String proxyPort;
   String httpsHandler;
   String httpsCipher;
   String keystoreFile;
   String keystoreType;
   String keystorePass;
   String connectionTimeout;
   HttpURLConnection Conn;
}


 

Man nepieciešams šo te uztaisīt ar PHP.

Butībā nav skaidrs kā konkrētās rindas iebarot php curl vai kādai citai funkcijai iekš php:

           System.setProperty("javax.net.ssl.keyStore", keystoreFile);
           System.setProperty("javax.net.ssl.keyStoreType", keystoreType);
           System.setProperty("javax.net.ssl.keyStorePassword", keystorePass);
           System.setProperty("javax.net.ssl.trustStore", keystoreFile);
           System.setProperty("javax.net.ssl.trustStoreType", keystoreType);
           System.setProperty("javax.net.ssl.trustStorePassword", keystorePass);

 

 

Es domāju šajā virzienā.. bet te kaut kas nestrādā:

 

       //megjinam piesleegties serverim ar shaadiem parametriem
       CURLOPT_SSLKEY      => "/keystores/spec.keystore",       // The name of a file containing a private SSL key.
       CURLOPT_SSLKEYPASSWD      => "xxxparolexxx",       // The secret password needed to use the private SSL key specified in CURLOPT_SSLKEY.
       CURLOPT_POSTFIELDS      => $postfields,

 

šeit ir pilnais kods:

 


function get_curl($url, $postfields)
{

  if (!function_exists('curl_setopt_array'))
  {
     function curl_setopt_array(&$ch, $curl_options)
     {
         foreach ($curl_options as $option => $value)
         {
             if (!curl_setopt($ch, $option, $value))
             {
                 return false;
             }
         }
         return true;
     }
  }

  $options = array(
       CURLOPT_RETURNTRANSFER => true,     // return web page
       CURLOPT_HEADER         => false,    // don't return headers
       CURLOPT_FOLLOWLOCATION => true,     // follow redirects
       CURLOPT_ENCODING       => "",       // handle all encodings
       CURLOPT_USERAGENT      => "Firefox", // who am i
       CURLOPT_AUTOREFERER    => true,     // set referer on redirect
       CURLOPT_CONNECTTIMEOUT => 30,      // timeout on connect
       CURLOPT_TIMEOUT        => 60,      // timeout on response
       CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects

       //megjinam piesleegties serverim ar shaadiem parametriem
       CURLOPT_SSLKEY      => "/keystores/spec.keystore",       // The name of a file containing a private SSL key.
       CURLOPT_SSLKEYPASSWD      => "xxxparolexxx",       // The secret password needed to use the private SSL key specified in CURLOPT_SSLKEY.
       CURLOPT_POSTFIELDS      => $postfields,
       // The full data to post in a HTTP "POST" operation.
       //To post a file, prepend a filename with @ and use the full path.
       //This can either be passed as a urlencoded string like 'para1=val1&para2=val2&...'
       //or as an array with the field name as key and field data as value. If value
       //is an array, the Content-Type header will be set to multipart/form-data.
   );

   $ch      = curl_init( $url );
   curl_setopt_array( $ch, $options );   //tikai no php 5 un jaunaakas versijas
   $content = curl_exec( $ch );
   $err     = curl_errno( $ch );
   $errmsg  = curl_error( $ch );
   $header  = curl_getinfo( $ch );
   curl_close( $ch );

   $header['errno']   = $err;
   $header['errmsg']  = $errmsg;
   $header['content'] = $content;
   return $header;
}


 

Bet rezultātā patreiz dabūju šādu kļūdas ziņojumu:

 

[errmsg] => SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

 

Ir kādas idejas?

Link to comment
Share on other sites

Man šķiet, ka Javiskā keystore satur visu - gan tavu privāto atslēgu, gan arī Trusted Certification Authority saknes sertifikātus. Šobrīd caur PHP, man šķiet, ka tu padod tikai savu privāto atslēgu, bet neesi definējis nevienu root sertifikātu kam uzticies ar kuru tad varētu būt parakstīts servera sertifikāts.

Link to comment
Share on other sites

javai es iedodu config failu kuraa ir vairaakas rindas:

 

server_url=...

keystore_file_path=

password=

tips=JKS

utt..

un no turienes tiek panjemti.. nav nekaadi papildus parametri.. un man nav nevienu citu sertifikaatu failu, kaa tas ir "CA" gadiijumaa kur ir laikam 3 faili.. sertifikaats, atsleega, un veel chain fails...!

 

 

kaa shos pashus pareizi noraadiit ieksh php?

Edited by darksign
Link to comment
Share on other sites

JKS fails satur visus root CA sertifikātus + visus tavus privātos sertifikātus. Pamēģini izeksportēt ārā. Izeksportēt var, piemēram, ar IBMisko ikeyman.

Pamēģini (testa nolūkos) noskaidrot, kas ir parakstītājs tam serverim, kuram slēdzies klāt. Un norādīt šī parakstītāja root CA PEM failu, kā parametru:

CURLOPT_CAINFO => '/cels/rootCA/failu.crt';

Piemēram, lapai https://www.e-latvenergo.lv parakstītājs ir: VeriSign Class 3 Public Primary Certification Authority - G5

Tātad, lai nodibinātu savienojumu mums vajag, lai crt fails saturētu šo root sertifikātu. Iekopējam tur iekšā:

-----BEGIN CERTIFICATE-----
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
-----END CERTIFICATE-----

Un mēģinam slēgties klāt.

Link to comment
Share on other sites

Pamēģini (testa nolūkos) noskaidrot, kas ir parakstītājs tam serverim, kuram slēdzies klāt. Un norādīt šī parakstītāja root CA PEM failu, kā parametru:

CURLOPT_CAINFO => '/cels/rootCA/failu.crt';

Piemēram, lapai https://www.e-latvenergo.lv

...

 

Es pamēģināju, šeit kods:

 


<?php

function print_arr($arr)
{
  echo "<br />\n\n<xmp>\n\n";
  print_r($arr);
  echo "\n\n</xmp>\n\n<br />";
}


/**
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL.  Return an
* array containing the HTTP server response header fields and content.
*/

function get_curl($url)
{

  if (!function_exists('curl_setopt_array'))
  {
     function curl_setopt_array(&$ch, $curl_options)
     {
         foreach ($curl_options as $option => $value)
         {
             if (!curl_setopt($ch, $option, $value))
             {
                 return false;
             }
         }
         return true;
     }
  }

  $options = array(
       CURLOPT_RETURNTRANSFER => true,     // return web page
       CURLOPT_HEADER         => false,    // don't return headers
       CURLOPT_FOLLOWLOCATION => true,     // follow redirects
       CURLOPT_ENCODING       => "",       // handle all encodings
       CURLOPT_USERAGENT      => "Firefox", // who am i
       CURLOPT_AUTOREFERER    => true,     // set referer on redirect
       CURLOPT_CONNECTTIMEOUT => 30,      // timeout on connect
       CURLOPT_TIMEOUT        => 60,      // timeout on response
       CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects

       CURLOPT_CAINFO      => 'www.e-latvenergo.lv.crt',
   );

   $ch      = curl_init( $url );
   curl_setopt_array( $ch, $options );   //tikai no php 5 un jaunaakas versijas
   $content = curl_exec( $ch );
   $err     = curl_errno( $ch );
   $errmsg  = curl_error( $ch );
   $header  = curl_getinfo( $ch );
   curl_close( $ch );

   $header['errno']   = $err;
   $header['errmsg']  = $errmsg;
   $header['content'] = $content;
   return $header;
}


$url = "https://www.e-latvenergo.lv/";

$web = get_curl($url);
print_arr($web);

?>

 

 

Šeit rezultāts:

 

Array 
( 
 [url] => https://www.e-latvenergo.lv/ 
 [http_code] => 0 
 [header_size] => 0 
 [request_size] => 0 
 [filetime] => -1 
 [ssl_verify_result] => 0 
 [redirect_count] => 0 
 [total_time] => 0 
 [namelookup_time] => 0 
 [connect_time] => 0.016 
 [pretransfer_time] => 0 
 [size_upload] => 0 
 [size_download] => 0 
 [speed_download] => 0 
 [speed_upload] => 0 
 [download_content_length] => 0 
 [upload_content_length] => 0 
 [starttransfer_time] => 0 
 [redirect_time] => 0 
 [errno] => 77 
 [errmsg] => error setting certificate verify locations: 
CAfile: www.e-latvenergo.lv.crt 
CApath: none 
 [content] => 
) 

 

Veids kā dabūju to crt failu:

atvēru caur firefox vaļā https://www.e-latvenergo.lv/, tad nospiedu uz tā zaļā laukuma pie adreses kreisajā pusē, tur "More information"

tad uzspiedu "View Certificate" un sadaļā "Details" nospiedu "Export..." un saglabāju crt failu.

 

Šeit ir crt faila saturs (35 rindiņas, pēdējā ir tukša):

 

-----BEGIN CERTIFICATE-----
MIIF6jCCBNKgAwIBAgIQU3fUE4h+eRVq5mypwjNaYDANBgkqhkiG9w0BAQUFADCB
vjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug
YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE4MDYGA1UEAxMv
VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBTR0MgQ0Ew
HhcNMDcxMjE5MDAwMDAwWhcNMDkxMjE4MjM1OTU5WjCCAVQxEzARBgsrBgEEAYI3
PAIBAxMCTFYxEjAQBgsrBgEEAYI3PAIBAhMBLTESMBAGCysGAQQBgjc8AgEBEwEt
MRswGQYDVQQPExJWMS4wLCBDbGF1c2UgNS4oYikxFDASBgNVBAUTCzQwMDAzMDMy
OTQ5MQswCQYDVQQGEwJMVjEPMA0GA1UECBMGTGF0dmlhMQ0wCwYDVQQHFARSaWdh
MRYwFAYDVQQKFA1BUyBMYXR2ZW5lcmdvMTIwMAYDVQQLFClUZXJtcyBvZiB1c2Ug
YXQgd3d3LnZlcmlzaWduLmNoL3JwYSAoYykwNTEiMCAGA1UECxMZQXV0aGVudGlj
YXRlZCBieSBWZXJpU2lnbjEnMCUGA1UECxMeTWVtYmVyLCBWZXJpU2lnbiBUcnVz
dCBOZXR3b3JrMRwwGgYDVQQDFBN3d3cuZS1sYXR2ZW5lcmdvLmx2MIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQCyGT11zkNwqlzIvvRxkgpRjzdDA90nFmcbYgqg
SB3qTRAUljpw3dVmSbd+MkAR6pO9II9RJeSxA1EDq8RdG1peCMlpYQW4HHIVG2Yn
0Vv/dHEaDXU3PPeoWIU0oTol3R0G9KoDFpHcJJQu7LEXTs7jKAnmv4Fde0raS6dL
dniG1wIDAQABo4IBzTCCAckwCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwQwYDVR0g
BDwwOjA4BgtghkgBhvhFAQcXBjApMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy52
ZXJpc2lnbi5jaC9ycGEwPgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL0VWSW50bC1j
cmwudmVyaXNpZ24uY29tL0VWSW50bDIwMDYuY3JsMCgGA1UdJQQhMB8GCCsGAQUF
BwMBBggrBgEFBQcDAgYJYIZIAYb4QgQBMB8GA1UdIwQYMBaAFE5DyB127zdTek/y
WG+U8zji1b3fMG8GCCsGAQUFBwEBBGMwYTAkBggrBgEFBQcwAYYYaHR0cDovL29j
c3AudmVyaXNpZ24uY29tMDkGCCsGAQUFBzAChi1odHRwOi8vRVZJbnRsLWFpYS52
ZXJpc2lnbi5jb20vRVZJbnRsMjAwNi5jZXIwbgYIKwYBBQUHAQwEYjBgoV6gXDBa
MFgwVhYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUS2u5KJYGDLvQUjibKaxLB4sh
BRgwJhYkaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nbzEuZ2lmMA0GCSqG
SIb3DQEBBQUAA4IBAQBusmroMpTEyADXJ8Np+dsCIvORLnrXzzRmjs1iODUaVbOZ
VXRBR4L+YSaRXVQL9fhFaF5Hdw5EHbIRsJPcdAMmeZzpt05YzSxrcLBHHWkyruWE
fGhHUwam1YJfNVgJr79dr4S15DUE+Y3T23xYmzxr6gGfYMFPwrlcmsMXkpVT0Y+e
4cR1WPNtZYXppU2wAOA7DSgXe3vzBtO2gpqrSQf8EfVkWPZwQb7txoTAJhHCtS2P
G59rxaNO/FxFC7JVoj9VRfsA2ndVsltxkns9Siav5Itzl7szG7Au85pi5g2Ps4ld
Tn6wjg0jeAw75XGWFVD/XoZEk5POLCXkSTtRSp0k
-----END CERTIFICATE-----

 

Kas tur nav pareizi, kapēc viņš neredz kontentu? Kā viņam pareizi iebarot to sertifikāta failu?

P.S. Crt fails ir tai pašā direktorijā kur php fails.

Edited by darksign
Link to comment
Share on other sites

Tu izeksportēji un izmantoji paša e-latvenergo sertifikātu, bet vajadzēja pašu augšējo - VeriSign Class 3 Public Primary Certification Authority - G5 (nu to, kuru iepriekšējā atbildē biju ielicis)

 

Es šīm sertifikātu darbībām izmantoju šādus rīkus:

FireFox spraudni CertViewerPlus

Un no komandrindas openssl šādā formā:

openssl s_client -CAfile /etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem -showcerts -verify 10 -connect www.e-latvenergo.lv:443

 

FireFox parāda kādai būtu jābūt sertifikātu ķēdei e-latvenergo gadījumā:

.VeriSign Class 3 Public Primary Certification Authority - G5 (šitas ir tas, kas jānorāda iekš CAfile)

...VeriSign Class 3 Extended Validation SSL SGC CA (vari arī šo pielikt klāt tajā pašā CAfile zem iepriekšējā)

......www.e-latvenergo.lv

 

Savukārt, openssl (ja nenorāda parametru CAfile) parāda, ko faktiski serveris sūta (var atrast problēmas ar servera konfigurāciju, ja netiek sūtīta pilna/pareiza sertifikātu ķēde - Certificate Chain).

 

Faktiski linuxī man ir fails ca-certificates.crt, kurš atrodas šeit:

/etc/ssl/certs/ca-certificates.crt

kurš satur visus saknes un vidutājsertifikātus uzticamajiem sertifikātu izdevējiem. Pamēģini norādīt šo failu kā CAfile.

Link to comment
Share on other sites

tnx, par skaidrojumu, sāku kaut ko saprast, bet ne līdz galam.

 

Uzliku FF CertViewerPlus spraudni, apskatījos pem failus, izeksportēju un nokopēju pareizo, uztaisīju konekciju caur komandrindu, kā parādīji, viss ok, rādās ka konekcija ir. To pašu pamēģināju nenorādot sertifikāta failu, arī ir ok (nezinu kapēc tā...) rāda ka verified..., tad pamainīju komandu šādi "openssl s_client -verify 10 -connect www.e-latvenergo.lv:443" un atbildē dabūju ne vairs 10 kodu, bet 19 -> "Verify return code: 19 (self signed certificate in certificate chain)", vismaz rezultāts savādāks, sapratu to visu tā, ka ja nenorādu CA failu, tad openssl kaut vai tas sertifikāts nav self signed, bet gan trešās kompānijas izdots, vienalga ja neesmu norādījis savā pusē ka pieņemu, tad rāda self signed (pieļauju, ka FF to apstiprināšanu dara automātiski, ja ierauga pazīstamu izdevējfirmu)

 

Labi, lai arī tur būtu caur to komandrindu, bet mērķis man ir to visu dabūt caur php kodu. Lai es varētu pieslēgties, nosūtīt post datus (curl) un saņemt atpakaļ atbildi (redzēt sourci).

No sākuma gribēju izmēģināt ignorējot SSL prasības, pieliku parametrus:

       CURLOPT_SSL_VERIFYPEER      => false,     //Ja gadiijumaa apniik njemties, lai ignoree un iztiek bez handsheika
       CURLOPT_SSL_VERIFYHOST      => false,

 

Šie labi nostrādā uz latvenergo lapu, un viņam var nodot post datus, jo viņam ir po, ko es izmantoju, viņš atbalsta visu, ka tik klients atnāk līdz viņam, kaut vai pa nedrošu kanālu, un sourci varēju redzēt.

Bet kad šo pašu mēģināju tur kur man vajag, tad nekā... serveris atbildēja, lai eju tējot... bez pareiziem sertifikātiem nekā nedabūšu (kas arī ir pareizi no drošības puses).

 

Tad nu gribu to sourci uz latvenergo lapu dabūt neizmantojot CURLOPT_SSL_VERIFYPEER un CURLOPT_SSL_VERIFYHOST, jeb viņiem abiem jābūt ir true.

Kuros curl-setopt parametros man jāiebaro viņam tas pem vai kāds cits sertifikāta fails?

 

būšu ļoti pateicīgs par konkrētu atbildi :)

Link to comment
Share on other sites

Nu, tā par openssl un komandrindu:

"Verify return code: 19 (self signed certificate in certificate chain)"

Tā tam arī ir jābūt - viņš to saka nevis par e-latvenergo, bet gan par Verisign saknes sertifikātu, kurš tāpat kā jebkurš saknes sertifikāts ir self-signed - tā tam arī ir jābūt un tas ir ok.

 

Vai pareizi saprotu, ka curlam ir jāautentificējas serverī ar klienta SSL sertifikātu? Respektīvi, ir pakalpojuma sniedzēja (vai kāda no sertifikatoru, kuriem pakalpojuma sniedzējs uzticas) izdots sertifikāts, kurš curlam jāizmanto, lai veidotu pieslēgumu?

Link to comment
Share on other sites

apmēram jā.

 

Ir tā, ka sūtot pareizos post datus, es varu uztaisīt parastu html formu un nospiest submit, un es caur pārlūku redzu visu to ko vajag, pareizo atbildi. Ja iedodu nepareizus datus tad serveris atgriež 403 forbidden kļūdu (to viņš dara arī ja kaut kas nav kārtībā ar sertifikātiem utt.. t.i. uz visām kļūdām viena atbilde.. stulbi, bet tā viņš ir saprogrammēts).

 

Es tā kā zinu pareizos datus, gribu viņus nosūtīt caur php, bet šis man vai nu saka ka kaut kas nav ar SSL sertifikātu (pati curl funkcija) vai arī ja izmantoju nedrošu savienojumu ar

CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST uzliktiem kā false, tad vienmēr ir 403 kļūda.

 

Praktiski man jau neko krutāku kā to pašu atkārtot, ko dara tas pārlūks šajā gadījumā nevajag (drošā savienojumā apmierināt servera prasības un saņemt atbildi).

 

Bet praktiski man tas nesanāk... ceru ka problēmu apm saprati un varēsi palīdzēt.

p.s. tas serveris ne vienā ne otrā gadījumā man nav sūtījis nekādus papildus sertifikāta failus, ko vajadzētu izmantot. Ir tikai tas, ko redz pārlūks pats.

Link to comment
Share on other sites

Man šķiet, ka problēma drīzāk ir tajā (man pašam ir tā gadījies), ka serveris atšuj sakarā ar to, ka netiek padoti visi tie parametri, ko parasti padod pārlūks...

Pamēģini ar openssl no komandrindas padot visus savus datus un pārliecinies, ka serveris pareizi atbild.

Piemēram pārlūks padod visus šos datus, kad vienkārši veru vaļā https://www.inauda.lv

GET / HTTP/1.1
Host: www.inauda.lv
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Nezinu, kā to dara curl, bet man ir bijuši gadījumi, kad serveris atšuj, ja piemēram nenorādu HTTP/1.1 aiz GET...

Link to comment
Share on other sites

Hmmm...

Šo, taču tu jau esi lasījis:

http://curl.haxx.se/docs/sslcerts.html

Kas tieši šobrīd tev ir tajā CAcert failā? BTW, kas ir parakstītājs sertifikātam? Un vai ir pareiza ķēde uz servera?

Vari pamēģināt šo rīku:

http://www.digicert.com/help/

lai noskaidrotu, vai viss ir kārtībā ar servera konfigurāciju. Pārlūki ir mazāk piekasīgi par curliem/jakartām utt... ;)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...