面试题答案
一键面试1. 证书申请
- 选择证书颁发机构(CA):可选择知名CA,如Let's Encrypt(免费)、DigiCert、Comodo等。
- 生成证书签名请求(CSR):
- 通用步骤:在要安装证书的服务器(或专门的生成环境)上,使用工具生成CSR。例如OpenSSL,命令如下:
openssl req -new -newkey rsa:2048 -nodes -keyout your_domain.key -out your_domain.csr
- 填写信息:在生成过程中,会提示填写国家、地区、组织等信息,其中“Common Name(CN)”要填写通配符域名,如“*.example.com”。
- 提交CSR到CA:根据CA的要求,在其网站或管理控制台提交CSR,完成相关验证步骤(如域名所有权验证,可能通过DNS记录、文件上传等方式)。
- 下载证书:验证通过后,从CA下载通配符SSL证书,通常会包含证书文件(如
.crt
)和中间证书文件(如有)。
2. 不同操作系统安装配置
Linux
- Nginx服务器:
- 证书放置:将下载的证书文件(如
your_domain.crt
)和私钥文件(your_domain.key
)以及中间证书(如intermediate.crt
)放置到合适目录,如/etc/nginx/ssl/
。 - 配置文件修改:编辑Nginx配置文件(通常在
/etc/nginx/sites - available/
下),添加或修改SSL相关配置:
server { listen 443 ssl; server_name *.example.com; ssl_certificate /etc/nginx/ssl/your_domain.crt; ssl_certificate_key /etc/nginx/ssl/your_domain.key; ssl_trusted_certificate /etc/nginx/ssl/intermediate.crt; # 如果有中间证书 # 其他SSL配置,如SSL协议版本、密码套件等 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ... }
- 重启Nginx:执行
sudo systemctl restart nginx
使配置生效。
- 证书放置:将下载的证书文件(如
- Apache服务器:
- 证书放置:将证书和私钥文件放置到合适目录,如
/etc/httpd/conf/ssl/
。 - 配置文件修改:编辑Apache配置文件(通常是
/etc/httpd/conf/httpd.conf
或/etc/httpd/conf.d/ssl.conf
),添加或修改SSL配置:
<VirtualHost *:443> ServerName *.example.com SSLCertificateFile /etc/httpd/conf/ssl/your_domain.crt SSLCertificateKeyFile /etc/httpd/conf/ssl/your_domain.key SSLCertificateChainFile /etc/httpd/conf/ssl/intermediate.crt # 如果有中间证书 # 其他SSL配置 SSLProtocol All -SSLv2 -SSLv3 SSLCipherSuite HIGH:!aNULL:!MD5 ... </VirtualHost>
- 重启Apache:执行
sudo systemctl restart httpd
。
- 证书放置:将证书和私钥文件放置到合适目录,如
Windows
- IIS服务器:
- 导入证书:打开“Internet Information Services (IIS)管理器”,在服务器节点下选择“服务器证书”,点击“导入”,选择下载的证书文件(
.pfx
格式,若不是需转换,如使用OpenSSLopenssl pkcs12 -export -in your_domain.crt -inkey your_domain.key -out your_domain.pfx
),输入密码等信息完成导入。 - 绑定证书:在“网站”节点下,选择要配置SSL的网站,点击“绑定”,选择“https”类型,在“SSL证书”下拉框中选择刚导入的通配符证书,点击“确定”。
- 导入证书:打开“Internet Information Services (IIS)管理器”,在服务器节点下选择“服务器证书”,点击“导入”,选择下载的证书文件(
macOS
- 对于基于macOS的服务器(如使用Apache):
- 证书放置:将证书和私钥文件放置到合适目录,如
/etc/apache2/ssl/
。 - 配置文件修改:编辑Apache配置文件(通常是
/etc/apache2/httpd.conf
或/etc/apache2/extra/httpd - ssl.conf
),类似Linux下Apache的配置方式添加或修改SSL配置:
<VirtualHost *:443> ServerName *.example.com SSLCertificateFile /etc/apache2/ssl/your_domain.crt SSLCertificateKeyFile /etc/apache2/ssl/your_domain.key SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt # 如果有中间证书 # 其他SSL配置 SSLProtocol All -SSLv2 -SSLv3 SSLCipherSuite HIGH:!aNULL:!MD5 ... </VirtualHost>
- 重启Apache:执行
sudo apachectl restart
。
- 证书放置:将证书和私钥文件放置到合适目录,如
3. 不同后端服务配置
Java应用
- 使用Tomcat:
- 证书放置:将证书文件(
.crt
)和私钥文件(.key
)合并成PKCS12格式(如keystore.p12
),使用命令openssl pkcs12 -export -in your_domain.crt -inkey your_domain.key -out keystore.p12
,设置密码。 - 配置文件修改:编辑Tomcat的
server.xml
文件,添加或修改<Connector>
元素:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateFile="conf/keystore.p12" certificateType="PKCS12" type="RSA" password="your_password"/> </SSLHostConfig> </Connector>
- 重启Tomcat:执行
sh bin/catalina.sh stop
和sh bin/catalina.sh start
。
- 证书放置:将证书文件(
Python应用(如Flask,使用Gunicorn + Gevent)
- 生成密钥和证书:可使用
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
生成自签名证书(生产环境用CA颁发的证书)。 - 运行应用:使用Gunicorn启动应用并配置SSL:
其中gunicorn -w 4 -k gevent --certfile=cert.pem --keyfile=key.pem app:app
app:app
是Flask应用的入口,根据实际情况调整。
Node.js应用(如Express)
- 安装
https
模块:如果项目未安装,运行npm install https
。 - 使用证书:在Node.js代码中:
const https = require('https'); const fs = require('fs'); const app = require('express')(); const options = { key: fs.readFileSync('your_domain.key'), cert: fs.readFileSync('your_domain.crt') }; https.createServer(options, app).listen(443, () => { console.log('Server running on port 443'); });
4. 性能优化(OCSP Stapling)
- Nginx:
- 配置启用:在Nginx配置文件的
server
块中添加:
ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;
- 解释:
ssl_stapling on
启用OCSP Stapling,ssl_stapling_verify on
开启验证,resolver
指定DNS解析服务器及有效期,resolver_timeout
设置解析超时时间。
- 配置启用:在Nginx配置文件的
- Apache:
- 安装mod_ssl:如果未安装,执行
sudo apt - get install libapache2 - mod - ssl
(Ubuntu为例)。 - 配置启用:在Apache配置文件(如
ssl.conf
)中添加:
SSLUseStapling on SSLStaplingCache shmcb:/var/run/ocsp(128000)
- 解释:
SSLUseStapling on
启用OCSP Stapling,SSLStaplingCache
设置缓存位置和大小。
- 安装mod_ssl:如果未安装,执行
5. 兼容性故障排查思路
- 证书链问题:
- 检查方法:使用在线工具(如SSL Labs)或本地工具(如
openssl s_client -connect your_domain:443 -showcerts
)查看证书链是否完整。 - 解决方法:确保安装了完整的证书链,包括中间证书,按正确顺序配置(如在服务器配置文件中)。
- 检查方法:使用在线工具(如SSL Labs)或本地工具(如
- SSL协议和密码套件兼容性:
- 检查方法:在不同操作系统和浏览器下访问网站,查看是否能正常连接。也可使用工具如
openssl ciphers -v 'ALL:eNULL'
查看支持的密码套件。 - 解决方法:在服务器配置中调整SSL协议版本(如启用TLSv1.2及以上,禁用不安全的版本)和密码套件,使其符合大多数客户端的支持范围。
- 检查方法:在不同操作系统和浏览器下访问网站,查看是否能正常连接。也可使用工具如
- OCSP Stapling故障:
- 检查方法:使用工具如
openssl s_client -connect your_domain:443 -tlsextdebug
,查看输出中是否有OCSP Stapling相关信息。也可检查服务器日志(如Nginx或Apache日志)。 - 解决方法:确保DNS解析正常(用于获取OCSP响应),检查OCSP服务器是否可达,调整相关配置(如Nginx中的
resolver
设置)。
- 检查方法:使用工具如
- 特定操作系统或浏览器兼容性:
- 检查方法:在特定操作系统和浏览器版本下进行测试,记录错误信息。
- 解决方法:查找相关操作系统或浏览器的SSL相关文档,了解其对SSL配置的特殊要求,调整服务器配置以适配。例如,某些旧版本浏览器对特定密码套件或SSL协议版本有特殊需求。