Jump to content
DontheCat

Connectivity error or Security Certificate Issue ?

Recommended Posts

Hi folks,

a few days back, we enabled SSL on our office server and the intranet migrated to https. Everything is ok on the intranet.

On the public internet, we noticed today that the page on our website, which connects to our office server to fetch and display data was throwing an error, which I presumed was a Security Certificate issue... An area that's like the Dark Side of the Moon for me..

the webpage - https://liveconnections.in/hotjobs.php

This is the error from the logs

 PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed 
PHP Warning: file_get_contents(): Failed to enable crypto 
PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

Anycase, the internet was willing to help and so I updated the code to a curl function. The Data is not displaying still...

However, when I try to access the office server by loading the php page in my localhost, the data is displayed.

Here's the code... where am i going wrong ?

<?php 
	//error_reporting(E_ERROR | E_PARSE | E_ALL);
	$page="jobs-listing";
?>
<header class="section background-livec text-center">
            <h3 class="text-white margin-bottom-0 text-size-40 text-thin text-line-height-1">Current & Hot Jobs</h3>
        </header>
<?php 
	$industry = $_GET['industry'];
	$location = $_GET['location'];
	$expMin = $_GET['expMin'];
	$expMax = $_GET['expMax'];
	$sortBy = $_GET['sortBy'];
	$cpg    = $_GET['page'];
	
	if(empty($cpg) || $cpg==1)
		$npl = 1;
	else {
		//$npl = (($cpg+1)*10) - 9;
		$npl = $_GET['startingRowNo'];
	}

	$industry = str_replace(' ', '%20', $industry);
	$location = str_replace(' ', '%20', $location);
	
	$url = "https://xx.xxx.xxx.xxx/WebService/rest/";

	function file_get_contents_curl($url) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
	curl_setopt($ch, CURLOPT_URL, $url);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
	}

	if(!empty($sortBy)) { 
		$json = file_get_contents_curl($url.'getHeadersBySearch?industry='.$industry.'&location='.$location.'&expMin='.$expMin.'&expMax='.$expMax.'&sortBy='.$sortBy.'&startingRowNo='.$npl.'&noOfRows=1000000');
		$data = json_decode($json);
	} else if(!empty($industry) || !empty($location) || !empty($expMin) || !empty($expMax)) {
		$json = file_get_contents_curl($url.'getHeadersBySearch?industry='.$industry.'&location='.$location.'&expMin='.$expMin.'&expMax='.$expMax.'&sortBy=&startingRowNo='.$npl.'&noOfRows=1000000');
		$data = json_decode($json);
	} else {	
		//$json = file_get_contents_curl($url.'getOnlineWebPosting');
		$json = file_get_contents_curl($url.'getHeadersBySearch?industry='.$industry.'&location='.$location.'&expMin='.$expMin.'&expMax='.$expMax.'&sortBy=&startingRowNo='.$npl.'&noOfRows=1000000');
		$data = json_decode($json);
		
		//if (!$data) echo "Data Not Found" ;
	}

	if($sortBy=='DESC' || $sortBy=='') {
		$aclass = 'down_arrow';
	} else {
		$aclass = 'up_arrow';
	}
	$json2 = file_get_contents_curl($url.'getSearchData');
	$data2 = json_decode($json2);

	$industry = str_replace('%20', ' ', $industry);
	$location = str_replace('%20', ' ', $location);
	if($industry=='F amp A - BPO') {
		$industry = 'F & A - BPO';
	}	
	if($industry=='OIL amp GAS') {
		$industry = 'OIL & GAS';
	}
?>
        

<div class="section background-white"> 

	<div class="background-white"> 
	<p class="text-padding-bot text-letter-spacing1">A cross-section of Jobs currently available. We recommend you to contact our Executives for further info. <br />
	More details available when the Job is '<strong>View'</strong>ed. </p>
	</div>

<?php 
//$data='';
//if($data!=''){ ?> 

		<?php //if ($checkyear>2017) { ?>

        <div class="subJobs">
        	<ul>
        	    	<li> Industry <br /> 
        	        	<select name="industry" id="industry" class="sel">
			            	<option value="">Select Industry Name</option>
					<?php for($i=0; $i<count($data2[0]); $i++) { ?>
						<?php if(isset($industry) && $industry==$data2[0][$i]) { ?>
							<option selected value="<?php echo $data2[0][$i];?>"><?php echo $data2[0][$i];?></option>
						<?php } else { ?>
							<option value="<?php echo $data2[0][$i];?>"><?php echo $data2[0][$i];?></option>
						<?php } 
					} ?>
		        	</select>                    
                    	</li>
		        <li>Location<br /> 
		        	<select name="city" id="city" class="sel">
				    	 <option value="">Select City Name</option 
					><?php $m=0; for($j=0; $j<count($data2[1]); $j++) { ?>
						<?php $locat = explode(",",$location); ?>
						<?php if($locat[$m]!="" && $locat[$m]==$data2[1][$j]) { ?>
							<option selected value="<?php echo $data2[1][$j];?>"><?php echo $data2[1][$j];?></option>
						<?php ++$m; } else { ?>
							<option value="<?php echo $data2[1][$j];?>"><?php echo $data2[1][$j];?></option>
						<?php } 
					} ?>
				</select>
		        </li>
		       <li>Experience <br /> 
			       <select name="minyear" class="sel2" id="minyear">
			       	    <option value="">Min</option>
				    <?php for($ii=0; $ii<46; $ii++) { ?>
					<?php if($expMin!="" && $expMin==$ii) { ?>
						<option selected value="<?php echo $ii; ?>"><?php echo $ii; ?></option>
					<?php } else { ?>
				    		<option value="<?php echo $ii; ?>"><?php echo $ii; ?></option>
				    	<?php } 
				    } ?>
			       </select>
			       <select name="maxyear" class="sel2" id="maxyear" onchange="return select_max();">
			       	    <option value="">Max</option>
				    <?php for($ii=0; $ii<51; $ii++) { ?>
					<?php if($expMax!="" && $expMax==$ii) { ?>
						<option selected value="<?php echo $ii; ?>"><?php echo $ii; ?></option>
					<?php } else { ?>
				    		<option value="<?php echo $ii; ?>"><?php echo $ii; ?></option>
				    	<?php } 
				    } ?>
			       </select>
			       <!-- select name="" class="sel2" id="sort">
					<option value="">Select</option>
					<option value="ASC">ASC</option>
					<option value="DESC">DESC</option>
			       </select -->		       
		       </li>
               <li class="ser"><button type="button" onclick="search_by_category()" class="btn btn-default" style="margin-top:25px;"><i class="fa fa-search"></i> Search</button></li>
            </ul>
        </div>
       <!-- Selected Jobs Headline Info -->
		<div class="line">
			<p class="text-dark text-center text-size-16">
			<?php if($industry) echo 'Showing ' .  '<b>' . $industry .'</b>' .  ' Jobs' ; ?>  
			<?php if($location) echo ' at ' .  '<b>' . $location .'</b>' ; ?>
			<?php if($expMin) echo ' with Min ' .  '<b>' . $expMin .'</b>' ; ?>
			<?php if($expMax) echo ' to Max '.  '<b>' . $expMax.'</b>' ; ?>
			<?php if($expMin | $expMax) echo ' Years Experience' ;?>
			</p>
	</div>  

       <!-- Jobs Table -->
        <table id="example" class="display" cellspacing="0" width="100%">
            <thead>
              <tr>
                <th class="jobs_noshow text-center" width="5%">S.No</th>
                <th class="text-center" width="15%">Posted On</th>
                <th class="text-center" width="30%">Job Title</th>
                <th class="jobs_noshow text-center" width="15%">Level</th>
                <th class="jobs_noshow text-center" width="15%">Location</th>
                <th class="jobs_noshow text-center" width="15%">Job Code</th>
                <th class="text-center" width="5%">Action</th>
              </tr>
            </thead>
            <tbody>
              <?php $ri=1; foreach($data as $kk=>$d) { ?>
				  <?php  
					$date_posted = $d->postedDate; // get the Posted Date
					$date_posted_year=date("Y",strtotime($date_posted)); // Get the Year from the date and store in a variable
					if ($date_posted_year>$jobs_restrict_year) { // Show only Jobs posted after this year ?>
					  <tr>
						<td class="jobs_noshow text-center"><?php echo $ri; ?></td>
						<td class="text-center"><?php echo $d->postedDate; ?></td>
						<td><?php echo $d->title; ?></td>
						<td class="jobs_noshow  ctext notreq"><?php echo $d->level; ?></td>
						<td class="jobs_noshow text-center notreq"><?php echo $d->location; ?></td>
						<td class="jobs_noshow  text-center"><?php echo $d->requirementID; ?></td>
						<td class="text-center"><a class="button background-livec border-radius text-white" style="color:white" data-fancybox="ajax" href="?contentid=jobs-detail&requirementID=<?php echo $d->requirementID; ?>&requirementSeqNo=<?php echo $d->requirementSeqNo; ?>" data-type="ajax">View</a></td>
					  </tr>
				  <?php } ?>
              <?php $ri=$ri+1; } ?>
            </tbody>
          </table>
          <script type="text/javascript">
			$(document).ready(function () {
				var table = $('#example').DataTable( {
					"pageLength": 25,
					"sPaginationType":"full_numbers",
					"oLanguage": {
					"sInfo": 'Showing _START_ to _END_ of _TOTAL_ Jobs.',
					"sInfoEmpty": '',
					"sEmptyTable": "No Jobs found currently",
					}
				}); 
				$('#example').removeClass( 'display' ).addClass('table table-striped table-bordered');
			});
   		  </script>
          <style> .dataTables_filter { display: none; } </style>
          <!-- End of Table -->
 </div>      
<?php // } else { ?>
<div style="margin: 20px 0 40px 0px;height:200px;text-align:center;">
<h1 style="font-size:16px;">Server is unavailable at the moment. Please try after some time.</h1>
</div>
<?php //}?>     
  
</div>


<!--jobs end-->
<script type="text/javascript">
	function search_by_category() {
		industry	= $('#industry option:selected').val();
		//city1		= $('#city option:selected').val();
		minyear		= $('#minyear option:selected').val();
		maxyear		= $('#maxyear option:selected').val();
		//sortBy		= $('#sort option:selected').val();
		var city = $('select#city').val();
		var cur_pg = "<?php echo $cpg; ?>";
		var tot = "<?php echo $total; ?>";
		var tot_pgs = Math.ceil(tot/25);
		//if(cur_pg=="")
			cur_pg = 1;
		var last_pg = tot_pgs - cur_pg;
		if(last_pg==0)
			records = tot - ((tot_pgs -1) * 25);
		else
			records = 25;

		var strt_val = ((cur_pg-1) * 25) + 1; 
		
		if(industry=='F & A - BPO')
			industry ='F amp A - BPO';
		if(industry=='OIL & GAS')
			industry ='OIL amp GAS';
		city1 = document.getElementById("city").value;
		if(city1=="" || city1=="null") {
			city="";
		}		
		if(industry!="" || city!="" || minyear!="" || maxyear!="") {
			location.href="hotjobs.php?contentid=hotjobs&industry="+industry+"&location="+city+"&expMin="+minyear+"&expMax="+maxyear+"&sortBy=&startingRowNo=1"+"&noOfRows="+records+"&page="+cur_pg;
		} else {
			//alert("Please select any one of the fields");
			location.href="hotjobs.php?contentid=hotjobs&industry="+industry+"&location="+city+"&expMin="+minyear+"&expMax="+maxyear+"&sortBy=&startingRowNo=1"+"&noOfRows="+records+"&page="+cur_pg;
		}
	}
	function sort_by_location() {
		var order = '<?php echo $sortBy; ?>';
		industry	= $('#industry option:selected').val();
		city		= $('#city option:selected').val();
		minyear		= $('#minyear option:selected').val();
		maxyear		= $('#maxyear option:selected').val();
		city1 = document.getElementById("city").value;
		if(industry=='F & A - BPO')
			industry ='F amp A - BPO';
		if(industry=='OIL & GAS')
			industry ='OIL amp GAS';
		if(city1=="") {
			city="";
		} else {
			city = $('select#city').val();
		}
		if(order=="" || order=="DESC") {
			location.href="hotjobs.php?contentid=hotjobs&industry="+industry+"&location="+city+"&expMin="+minyear+"&expMax="+maxyear+"&sortBy=ASC"+"&startingRowNo=1&noOfRows=10";
		} else {
			location.href="hotjobs.php?contentid=hotjobs&industry="+industry+"&location="+city+"&expMin="+minyear+"&expMax="+maxyear+"&sortBy=DESC"+"&startingRowNo=1&noOfRows=10";
		}
	}

	function select_max() {
		minyear = document.getElementById("minyear").value;
		maxyear = document.getElementById("maxyear").value;
		if(parseInt(maxyear)>=parseInt(minyear)) {
			return true;
		} else {
			if(maxyear!="") {
				alert("Maximum year must be equal or greater than minimum year");
				$('#maxyear').val("");
				return false;
			}
		}
	}
	
</script>
	
	

Also, if i change the $url in my code to https:// , no data is displayed...

I raised a Support request to the Hosting provider, but they seem to have vanished into the ozone....

Any help would be highly appreciated.

Cheers - Murali

 


 

 

Share this post


Link to post
Share on other sites
$url = "https://xx.xxx.xxx.xxx/WebService/rest/";

That's what you're trying to connect to, right? That's what has the SSL problem that PHP/OpenSSL is complaining about?

Go to that URL in your browser and see what it says about the certificate. Worst case you'll have to disable SSL checking in your code, but that's really not a good thing to do.

Share this post


Link to post
Share on other sites

requinix, thanks for the response

I uploaded a simple text file to the root of that URL and the content is perfectly displayed when accessed using http

but this is the error when trying to access through https

Secure Connection Failed

An error occurred during a connection to xx.xxx.xxx.xxxx. PR_END_OF_FILE_ERROR

    The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.

btw, the website URL automatically reverts to https even if the URL is typed as http.... I also checked if curl is enabled on the webserver and it is.

Thanks

 

Share this post


Link to post
Share on other sites

Did you obtain a SSL certificate somewhere or generate your own?  If you created your own then it won't be trusted and SSL won't work until you add that certificate as a trusted certificate.

If you obtained one from a major known vendor then the certificate should be fine and trusted, but you may have a configuration problem.

What software and their versions are you using?  OS, Webserver, PHP, cURL, etc.

 

Share this post


Link to post
Share on other sites

The PR_END_OF_FILE_ERROR is either an issue with the format of your certificate or you might have an older version of nss.  

Share this post


Link to post
Share on other sites

Thanks folks... Sorry got bust with some offline work.

On 8/29/2019 at 2:54 AM, kicken said:

Did you obtain a SSL certificate somewhere or generate your own?  If you created your own then it won't be trusted and SSL won't work until you add that certificate as a trusted certificate.

If you obtained one from a major known vendor then the certificate should be fine and trusted, but you may have a configuration problem.

What software and their versions are you using?  OS, Webserver, PHP, cURL, etc.

 

It is self-generated. I'm trying to add the Certificate, but strangely the host doesn't offer SSL management through the CPanel. or WHM

I'm using Apache, PHP5.6. The cURL library is default installed.

On 8/29/2019 at 6:13 PM, taquitosensei said:

The PR_END_OF_FILE_ERROR is either an issue with the format of your certificate or you might have an older version of nss.  

taquitosensei> Thanks.. will check it out.

Share this post


Link to post
Share on other sites

You should upgrade your PHP install.  5.6 is pretty old and outdated at this point, and is no longer receiving any kind of development work (security or otherwise).

For the certificate, you can tell cURL what certificates to trust by setting the CURLOPT_CAINFO option to the name of a file that contains your certificate.

curl_setopt($ch, CURLOPT_CAINFO, 'certificate.pem');

 

Share this post


Link to post
Share on other sites

Thanks kicken.... I'm migrating to 7.0 right now ....

I'm still not able to understand one thing though..... why is the data being accessed and displayed if I access it on my localhost ? (Screenshot attached). But only partly.. the listings stop at Feb 2019 ...

Screenshot (1).png

Edited by DontheCat

Share this post


Link to post
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.   Restore formatting

  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.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.