使用自建证书配置HTTPS服务器
使用自建证书配置HTTPS服务器
安装升级openssl
-
首先,查看下当前设备的openssl版本,如果版本在openssl1.0.1g以上,请略过。查看命令:
openssl version -a
。 -
下载:
wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
。 -
下载完之后,解压并进行安装:
tar -zxvf openssl-1.0.2j.tar.gz
cd openssl-1.0.1g
./config shared zlib
make && make install
- 安装后再进行相应的设置:
#修改历史的OpenSSL文件设置备份
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
#设置软连接使其使用新的OpenSSL版本 刚刚安装的OpenSSL默认安装在/usr/local/ssl
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
#更新动态链接库数据
echo "/usr/local/ss
在Mac El Capitan 加入了Rootless机制,以上命令可能不失败,需要重启按住 Command+R,进入恢复模式,在实用工具菜单栏中打开终端设置:
csrutil disable
,再重启即可。 设置好后,后面如果要恢复默认,执行:csrutil enable
。
- 最后查看一下版本:
openssl version
创建CA相关的证书
-
首先,可以查看openssl配置文件,了解 CA 环境。
/etc/ssl/openssl.cnf
。 -
创建 demoCA 目录,命令:
cd /etc/ssl
mkdir demoCA
- 进入 demoCA 目录 ,在其下创建:private 目录、newcerts 目录、crl 目录及 index.txt、serial 文件。
cd demoCA
mkdir private newcerts crl
touch index.txt serial
echo 01 > serial #设定编号初始值
- 生成根密钥
命令:
cd /etc/ssl/demoCA
openssl genrsa -out private/cakey.pem 2048
genrsa :生成私钥
-out :输出到那里
rsa :提取公钥
注: 使用命令:( umask 077; openssl genrsa -out private/cakey.pem 2048 ) 可以使 cakey.pem 私钥文件权限为700
- 生成根证书
命令:
cd /etc/ssl/demoCA [可省略]
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
命令解析:
req: 生成证书签署请求
-news : 新请求
-key : 指定私钥文件
-out : 指定生成证书位置
-x509 : 生成自签署证书,并指定证书类型
-days n : 有效天数
命令效果:(:后为填写内容)
Country Name (2 letter code) [XX]:CN #国家(大写缩写)
State or Province Name (full name) []:shannxi #省份或洲
Locality Name (eg, city) [Default City]:xian #城市
Organization Name (eg, company) [Default Company Ltd]:xiyou #公司
Organizational Unit Name (eg, section) []:linux #部门
Common Name (eg, your name or your server's hostname) []:xxx.xxx.xxx.xxx.#主机
主机必须注意:必须与证书所有者能解析到的名字保持一致(即:你服务器的 IP 地址或域名),否则将无法通过验证
Email Address []: #邮箱(可以不填)
附:以上操作默认选项可通过修改配置文件(/etc/pki/tls/openssl.cnf)修改
创建配置apache相关的证书
- 为服务器生成 ssl 密钥,首先创建 ssl 目录:
命令:
cd /etc/apache2
mkdir ssl
cd ssl
openssl genrsa -out apache.key 2048
- 为apache服务器生成证书签署请求
命令:openssl req -new -key apache.key -out apache.csr
命令解释如下
注:如果证书的使用者是自己,所填项必须与上面填的一样,负责最后 CA 根据证书请求来签署证书时报错
若是证书的使用者是别人,除了 Commone Name 一定要是你要授予证书的服务器域名或主机名,其它内容随便
请注意:两者在最后 CA 根据证书请求来签署证书时,使用的方法不同
命令效果:(:后为填写内容)
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:shannxi
Locality Name (eg, city) []:xian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xiyou
Organizational Unit Name (eg, section) []:linux
Common Name (e.g. server FQDN or YOUR name) []:xxx.xxx.xxx.xxx
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(不填) #证书请求需要加密存放
An optional company name []:(不填)
- 根据请求从CA来签署证书
- 证书的使用者是自己的情况
把上一步生成的证书请求 csr 文件,发到 CA 服务器上,在CA上执行
命令: cp apache.csr /etc/ssl cd /etc/ssl openssl ca -in apache.csr -out apache.crt 命令解析: ca : CA 证书相关子命令 openssl ca 默认使用了-cert cacert.pem -keyfile cakey.pem 命令效果: Using configuration from /etc/ssl/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Dec 30 08:49:17 2015 GMT Not After : Dec 27 08:49:17 2025 GMT Subject: countryName = CN stateOrProvinceName = shannxi organizationName = xiyou organizationalUnitName = linux commonName = xxx.xxx.xxx.xxx X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: D4:83:D5:B4:54:00:C2:FD:BC:70:52:FD:CF:74:0A:69:56:7E:54:02 X509v3 Authority Key Identifier: keyid:1B:DB:DC:36:5A:82:A5:AF:1A:A9:9C:7B:71:51:54:44:10:31:C3:4B Certificate is to be certified until Dec 27 08:49:17 2025 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
- 证书的使用者是别人的情况
把上一步生成的证书请求 csr 文件,发到 CA 服务器上,在CA上执行
命令: cp apache.csr /etc/ssl cd /etc/ssl openssl x509 -req -in apache.csr -CA /etc/ssl/demoCA/cacert.pem -CAkey /etc/ssl/demoCA/private/cakey.pem -CAcreateserial -out apache.crt 命令效果: Check that the request matches the signature Signature ok Getting private key
最后将生成的 crt 证书发回 apache 服务器使用
命令: cp apache.crt /etc/apache2/ssl cd /etc/apache2/ssl cat apache.crt cd /etc/apache2
配置 Apache 以使用 SSL
-
首先启用ssl模块:
a2enmod ssl
-
配置default-ssl.conf
修改 sites-available 子目录中的 default-ssl.conf 文件
命令:
cd /etc/apache2/sites-available
sudo vim default-ssl.conf
修改内容如下:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt ***** 需要修改部分
SSLCertificateKeyFile /etc/apache2/ssl/apache.key ***** 需要修改部分
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
启用default-ssl.conf,执行:a2ensite default-ssl.conf
。
- VirtualHost的SSL配置(以wodedata.com为例)
修改wodedata.com.conf文件:vi /etc/apache2/sites-available/wodedata.com.conf
,添加以下内容:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName wodedata.com
DocumentRoot /var/www/wodedata.com
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
</VirtualHost>
</IfModule>
- 最后重启Apache服务:
service apache2 restart
以上参考:
基于 Ubuntu 系统下,自建 CA 及颁发 SSL 证书
How To Set Up Multiple SSL Certificates on One IP with Apache on Ubuntu 12.04
How to upgrade OpenSSL (macOS)
Mac OS X 11中的/usr/bin 的“Operation not permitted”