The Problem
While working on Sitecore, it may happen that one of your SSL certificates may expire after some time. This can cause functionalities to break.For e.g., I encountered a problem where the SOLR search functionalities on my local Sitecore instance stopped working. You may be having similar problem if you face following issues -
- when you search a GUID in Content Editor to locate an item, it would not return any result and say that an exception has occurred.
- when you try to rebuild my SOLR indexes using Rebuild Search Indexes in Control Panel, the dialog did not list any of my SOLR indexes.
The Research
I looked into the logs to find the root cause to the problem and found following warnings -
128216 15:40:08 WARN IsOnline: Test connection has failed with an exception. Type: 'SolrConnectionException', Message: 'The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.'
I tried to load my local SOLR instance and it showed me errors related to SSL certificates. When I looked at the SSL certificate, I found it has expired.
The Solution
I realized fixing the SSL certificate for SOLR should be the first step towards fixing these issue related to search. For this, I needed to know how to generate a new SSL certificate and make it work with SOLR. Since this is not something developers do on regular basis, I started researching about it. That's when I realized how many developers face the same issue. Hence, I decided to list these steps in a blog so that it would serve the community and the future me if I face this issue again.
Here are the steps to add a new SSL certificated to SOLR ...
First, the expired SSL certificate needs to be removed from the system. We start with removing it form SOLR directories first.
- Goto <your solr directory>/server/etc
- You should see your SSL certificate here with .pfx or .jks or .p12 extension based on your setup.
- Rename it to .bak file.
- Go to your certificate manager and remove your expired certificate from there.
- If you dont see the delete option on certificate, you can use below script to remove the certificate -
$existingCert = Get-ChildItem Cert:\LocalMachine\Root | where Subject -eq "CN=<your certificate name here>"$existingCert | Remove-Item
- If you will refresh your Certificates folder, your certificate shall disappear from the list of installed certificates.
You may also want to remove expired SSL certificate from your browser as browser may keep using the expired certificate. If you are using Chrome, go to Settings> Privacy and Security>Security>Manage Device Certificates and remove your certificate from the list in the dialog that appears -
$cert = New-SelfSignedCertificate -DnsName "your certificate name here" -CertStoreLocation cert:\LocalMachine\My
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store "Root","LocalMachine"
$store.Open("ReadWrite")
$store.Add($cert)
$store.Close()
# remove the untrusted copy of the cert
$cert | Remove-Item
This script will generate the SSL certificate and add it to trusted root certification authority store.
Now, next step is add this SSL certificate to SOLR directories
$cert = Get-ChildItem Cert:\LocalMachine\Root | where Subject -eq "CN=your certificate name here"
$certStore = "<your solr server path here>\server\etc\solr-ssl.keystore.pfx" //make sure to put correct certificate name here that is used in your SOLR.in.cmd files
$certPwd = ConvertTo-SecureString -String "secret" -Force -AsPlainText
$cert | Export-PfxCertificate -FilePath $certStore -Password $certpwd | Out-Null
This shall export the SSL certificate from Root store into a pfx/jks/p12 file in <solr path>\server\etc folder.
Now, your newly generated SSL certificate is trusted on your machine and is located in SOLR directories so that it can be used by SOLR for a secured connection.
Now, go to Services.msc>locate your SOLR service and restart it.
Try loading the Solr url in browser. It shall not give the error anymore for SSL certificate. Your Sitecore instance shall also connect successfully to SOLR without any issue.
There is also a readymade script available here to achieve the same result but I found via comments that lots of developers are not able to use the script as-is as the setup in different projects may be slightly different. In such case, these scripts need modifications to match the local needs and developers again end up scratching their heads to get it done. Hence, it is better to understand what is being done in the script and how we can do it manually as well.
Thanks for reading. Hope it helps!!
Comments
Post a Comment