Install an SSL certificate on WordPress (Linux)
This topic describes how to configure an SSL certificate for WordPress on a Linux system. It covers how to download and upload certificate files and how to verify the installation.
Prerequisites
You have purchased and applied for a certificate by using the SSL Certificates Service, and its Status is Issued. To purchase and apply for a certificate, see Purchase a paid certificate and Apply for a certificate.
Your domain name is correctly resolved to the current server, and you have completed the MIIT ICP filing (for servers in the Chinese mainland).
You have administrative permissions on this server (a root account or an account with sudo permissions).
Procedure
Step 1: Download certificate and private key files
On the SSL Certificates page, find the certificate you want to deploy and confirm the following information:
Certificate Status: Make sure that the status is Issued. If the status is About to Expire or Expired, you must renew the SSL certificate.
Bound Domains: Make sure that the certificate covers all domain names that you want to protect. Otherwise, browsers show security warnings when users access unmatched domain names over HTTPS. To add or modify domain names, see Add and replace domain names.
In the Actions column of the target certificate, click More to go to the certificate details page. Then, on the Download tab, download the certificate package for the Server Type Server Type.
Decompress the downloaded certificate package.
If the package contains both a certificate file (.pem) and a private key file (.key), securely store both files. You need them for deployment.
If the package contains only a certificate file (.pem) and no private key file (.key), you must deploy the certificate together with the private key file that you saved locally.
NoteIf you generated a certificate signing request (CSR) file by using a tool such as OpenSSL or Keytool when you applied for the certificate, the private key file is stored only on your local machine and the downloaded package does not contain the private key file. If the private key is lost, the certificate becomes unusable. You must purchase a paid certificate and generate a new CSR and private key.
Step 2: Install SSL certificate on WordPress
Log on to the Linux server.
Alibaba Cloud server
The following operations use an Alibaba Cloud ECS instance as an example. For other types of servers, see their respective documentation.
Log on to the ECS console. In the top navigation bar, select the region where the target ECS instance is located.
In the left-side navigation pane, choose . On the Instances page, find the target ECS instance and click Remote Connection in the Remote connection column.
In the dialog box that appears, select Workbench and click Sign in now.
Select Terminal Connection as the connection method, enter the authentication information, and follow the on-screen instructions to complete the logon. You can then access the server terminal. For more information, see Connect to an ECS instance by using Workbench.
NoteIf the Security Group Whitelist Opening Prompt panel appears, click Add Rule as prompted.
Other cloud providers
Use the remote connection feature provided by the cloud provider to log on to the server terminal.
On-premises servers
Use an SSH tool on your local machine to log on to the server terminal.
Windows: Run the
ssh <username>@<server_ip_address>command in Command Prompt (cmd) or PowerShell. If the ssh command is not supported, you can use a third-party tool, such as PuTTY or WinSCP, to establish a connection.macOS/Linux: Run the
ssh <username>@<server_ip_address>command in the built-in terminal.
Some of the following commands vary based on the operating system. Select the appropriate command for your server's OS.
RHEL/CentOS series: includes Alibaba Cloud Linux, Red Hat Enterprise Linux, CentOS, AlmaLinux, Rocky Linux, Anolis OS, and their derivatives.
Debian/Ubuntu series: includes Debian, Ubuntu, and their derivatives.
Open port 443 in the security group and firewall.
Run the following command in the server terminal to check whether port 443 is open:
RHEL/CentOS
command -v nc > /dev/null 2>&1 || sudo yum install -y nc # Replace <your_server_public_ip_address> with the public IP address of your server. sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip_address> 443If the output contains
Ncat: Connected to <your_server_public_ip_address>:443, port 443 is open. Otherwise, you must open port 443 in the security group and firewall.Debian/Ubuntu
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat # Replace <your_server_public_ip_address> with the public IP address of your server. sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip_address> 443If the output contains
Connection to <your_server_public_ip_address> port [tcp/https] succeeded!or[<your_server_public_ip_address>] 443 (https) open, port 443 is open. Otherwise, you must open port 443 in the security group and firewall.Open port 443 in the security group.
ImportantIf your server is deployed on a cloud platform, make sure that its security group allows inbound traffic on TCP port 443. Otherwise, the service is not accessible from the internet. The following operations use an Alibaba Cloud ECS instance as an example. For other cloud platforms, see their official documentation.
Go to the ECS Instances page and click the name of the target instance to go to its details page. For more information, see Add a security group rule. Add a rule to the security group with Action set to Allow, Protocol Type set to TCP, Port Range set to HTTPS(443), and Authorization Object set to Anywhere (0.0.0.0/0).
Open port 443 in the firewall.
Run the following command to identify the current firewall service on your system:
if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then echo "firewalld" elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then echo "ufw" elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then echo "nftables" elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then echo "iptables" elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then echo "iptables" else echo "none" fiIf the output is
none, no further action is required. Otherwise, based on the firewall type (firewalld,ufw,nftables, oriptables), run the corresponding command to open port 443:firewalld
sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reloadufw
sudo ufw allow 443/tcpnftables
sudo nft add table inet filter 2>/dev/null sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/nulliptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTTo prevent iptables rules from being lost after a system reboot, run the following command to make the rules persistent:
RHEL/CentOS
sudo yum install -y iptables-services sudo service iptables saveDebian/Ubuntu
sudo apt-get install -y iptables-persistent sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
Upload the SSL certificate and private key files to the target directory on the server.
ImportantThis example uses
ssl.pem(certificate file) andssl.key(private key file) and uploads them to the/etc/ssl/certdirectory on the server. If this directory does not exist, runsudo mkdir -p /etc/ssl/certto create it.Alibaba Cloud server
The following steps use an Alibaba Cloud ECS instance as an example. For other types of servers, refer to the corresponding product documentation.
In the Workbench page you opened earlier, select File > Open New File Tree from the top menu bar.
In the file tree on the left, right-click the target storage directory (
/etc/ssl/cert), select Upload File, and upload the certificate filessl.pem.Repeat the previous step. Right-click the target directory (
/etc/ssl/cert), select Upload File, and upload the private key filessl.key.After the upload is complete, the path to the certificate file is
/etc/ssl/cert/ssl.pem, and the path to the private key file is/etc/ssl/cert/ssl.key.
Other cloud servers
Use the file upload feature provided by your cloud provider to upload the certificate and private key files to the target directory (
/etc/ssl/cert) on the server.Non-cloud servers
Use an SSH tool on your local machine to upload the certificate and private key files. In the following examples,
<username>is your username on the server, and<server_ip>is the server's public IP address.Windows
Use the built-in Command Prompt (cmd) or PowerShell to upload files with the
scpcommand. This example assumes the certificate and private key files are in the localC:\directory.# Upload the local certificate file to the server. Replace the paths C:\ssl.pem and /etc/ssl/cert with the actual source file and destination directory. scp C:\ssl.pem <username>@<server_ip>:/etc/ssl/cert # Upload the local private key file to the server. Replace the paths C:\ssl.key and /etc/ssl/cert with the actual source file and destination directory. scp C:\ssl.key <username>@<server_ip>:/etc/ssl/certIf the scp command is not available on your system, you can use the free and open-source PuTTY client and its accompanying pscp.exe tool to upload files from the command line. You can also use the graphical WinSCP client to upload files.
Linux/macOS
Use the built-in terminal to upload files with the
scpcommand. This example assumes the certificate and private key files are in the local/tmpdirectory.# Upload the local certificate file to the server. Replace /tmp/ssl.pem and /etc/ssl/cert with the actual source file and destination directory. scp /tmp/ssl.pem <username>@<server_ip>:/etc/ssl/cert # Upload the local private key file to the server. Replace /tmp/ssl.key and /etc/ssl/cert with the actual source file and destination directory. scp /tmp/ssl.key <username>@<server_ip>:/etc/ssl/certRun the following command to modify the certificate paths in the WordPress configuration file,
wordpress.conf. The paths must match the location where you uploaded the certificate and private key files.NoteThe WordPress environment in this example has Nginx installed by default. The configuration file path and name may be different in your environment. Adjust them to match your actual configuration.
sed -i 's|ssl_certificate\s*[^;]*;|ssl_certificate /etc/ssl/cert/ssl.pem;|; s|ssl_certificate_key\s*[^;]*;|ssl_certificate_key /etc/ssl/cert/ssl.key;|' /usr/local/nginx/conf/vhost/wordpress.confParameters:
/etc/ssl/cert/ssl.pem: Replace this with the absolute path to your certificate file on the server./etc/ssl/cert/ssl.key: Replace this with the absolute path to your private key file on the server./usr/local/nginx/conf/vhost/wordpress.conf: Replace this with the absolute path to your WordPress configuration file.
Run the following command to reload the Nginx service:
sudo systemctl reload nginxRun the following command to restart the database:
sudo service mysqld restart
Step 3: Verify certificate installation
Access your domain name over HTTPS. Example:
https://example.com. Replaceexample.comwith your actual domain name.If a lock icon appears in the browser's address bar, the certificate is deployed successfully. If an access error occurs or the lock icon does not appear, clear your browser's cache or try again in incognito or private mode.

Starting with Chrome 117, the
icon in the address bar has been replaced by a new
icon. Click this icon to view the security lock information.
If you still encounter issues, see FAQ for troubleshooting.
Next steps (Optional)
Enable domain monitoring
After the certificate is deployed, we recommend that you enable domain name monitoring. The system automatically checks the validity period of the certificate and sends reminders before the certificate expires. This helps you renew the certificate in a timely manner to prevent service interruptions. For more information, see Purchase and enable public domain name monitoring.
FAQ
Certificate not working or HTTPS inaccessible
Common reasons include:
The domain name has not completed ICP filing. See How to check DNS records and ICP filing information.
Port 443 is not open in the server's security group or firewall. See Open port 443 in the security group and firewall.
The Bound Domains of the certificate does not include the domain name being accessed. See How to check if a certificate matches the domain names.
The Nginx service was not reloaded after modifying the Nginx configuration file. See Reload the Nginx service.
The certificate files were not replaced correctly, or the Nginx configuration does not specify the correct certificate paths. Ensure that the Nginx configuration file and the certificate files are current and correct.
The domain name is integrated with cloud services such as CDN, SLB, or WAF, but the certificate is not installed on the corresponding service. For more information, see Certificate deployment location when traffic passes through multiple cloud services.
The domain name resolves to multiple servers, but the certificate is installed on only some of them. You must install the certificate on each server.
For further troubleshooting, see Troubleshoot certificate deployment issues based on browser errors and SSL certificate deployment troubleshooting guide.
Update or replace an SSL certificate
First, back up the original certificate files (.pem and .key) on your server. Then, log on to the SSL Certificates Service console, download the new certificate files (.pem and .key), and upload them to the server, overwriting the old files. Ensure the file paths and names are the same. Finally, reload the Nginx service to apply the new certificate.