Linux+Apache+OpenSSL 实现一个证书服务器,提供 HTTPS 服务
Linux+Apache+OpenSSL 实现一个 SSL(Secure Socket Layer)证书服务器,提供安全的 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)服务。
安装 SSL
1。安装 openssl
tar -zxvf openssl-0.9.8a.tar.gz
cd openssl-0.9.8a
./configure
sl 已安装 /make
make install usr/local/ ssl 目录
2。安装 apache
tar -zxvf httpd-2.0.55.tar.gz
cd httpd-2.0.55
。 /configure –prefix=/usr/local/apache –enable-ssl –enable-rewrite –enable-so –with-ssl=/usr/local/ssl
make
make install
apache已安装
以上是通过源码安装在 usr/local/apache 目录中的。最好的安装方式是安装 rpm。首先安装 apache rpm,然后安装 openssl rpm。 openssl可以自动安装在apache目录下。
证书简介
SSL安全证书可以自行生成,也可以由第三方CA(证书颁发机构)付费颁发。
SSL 安全证书包括:
1。 CA 证书,也称为根证书或中间证书。单向认证https,CA证书可选。主要目的是将证书变成证书链,以便浏览器可以信任该证书。如果使用CA证书,则服务器证书和客户端证书均由CA证书签名。如果不安装CA证书,浏览器默认是不安全的。
2。服务器证书。必需的。使用服务器的私钥生成证书请求的CSR文件,然后使用CA的证书签名生成服务器的证书。
3. 客户证明。选修的。如果有客户端证书,则为双向身份验证的 HTTPS,否则为单向身份验证的 HTTPS。生成步骤与服务器证书类似。
您可以自行创建以上所有证书。在商业上,您通常将私钥和证书请求 CSR 提交到服务器或客户端证书端,并付费给第三方组织来请求服务器证书和 CA 签名的客户端证书。
创建证书
使用openssl提供的工具对证书进行签名。证书放置在 /usr/local/apache2/conf/ 目录中。首先复制工具:
cp /usr/share/ssl/misc/ /usr/local/apache2/conf/
1。 CA证书(根证书/中间证书)
由CA证书颁发机构颁发。如果是双向认证,则为必填项,否则为可选项。通过CA证书,形成一个证书链,让浏览器信任你的证书。如果使用 CA 证书,请使用它来签署服务器和客户端证书以实现浏览器信任目的。
自行生成CA证书步骤:
./ –newca
按Enter键创建新文件,输入加密密码并输入证书信息:
国家名称(2个字母代码) ) ) [AU]:CN
州或省名称(全称) [Some-State]:广东
地名(例如城市)[]:深圳
组织名称(例如公司)[Internet Widgits Pty Ltd]:xxx
组织单位名称(例如部门)[]:xxx
通用名称(例如您的姓名)[]:www.shenmiguo.com
电子邮件地址 []:xxx@ xxx.com
一般名称最好输入主机全名。该名称必须与通过浏览器访问您的网站所使用的 URL 完全相同,否则用户会发现您的服务器证书的 Common Name 与网站名称不匹配,用户会怀疑您的证书的真实性。服务器证书和客户端证书的通用名称应与CA一致。
生成结果:demoCA/private/是CA证书私钥文件,demoCA/是CA证书。
这就是CA服务器的创建方式。有了根证书和根证书私钥,现在可以用来签署服务器或客户端证书。
我们来规范一下CA证书的命名,将CA证书和密钥重命名为:
cp demoCA/private/ca.key
cp demoCA/
ca.key是中间证书的私钥,是中级证书。
2。服务器证书
a) 生成服务器私钥
openssl genrsa -des3 -out 1024
输入加密密码,使用128位rsa算法生成密钥并获取文件。
b) 生成服务器证书请求 (CSR)
openssl req -new -key -out server.csr
CSR(证书签名请求)是证书签名请求。在申请证书之前,您必须首先在线创建证书。在服务器上生成 CSR 并将其提交给 CA,然后 CA 才能向您颁发 SSL 服务器证书。可以这样想,CSR 是在您的服务器上生成的证书。 CSR 主要包含以下内容:
国家名称(两字母代码)[AU]:CN
州或省名称(全名)[Some-State]:广东
地名(例如城市) ) [ ]:深圳
组织名称(例如公司) [Internet Widgits Pty Ltd]:xxx
组织单位名称(例如部门)[]:xxx
通用名称(例如您的姓名)[ ]: shenmiguo .com
电子邮件地址[]:xxx@xxx.com
请输入以下“附加属性”
将您的证书请求发送给with
质询密码 []:
可选公司名称 []:
通用名称 输入与 CA 对应的主机名。
c) 自行生成服务器证书
如果不使用CA证书签名,则按如下方式生成:
openssl req -x509 -days 1024 -key -in server.csr >
使用服务器密钥和证书请求生成证书,-days 参数指定证书的有效期(以天为单位)。从商业角度来说,服务器证书是由第三方证书颁发机构颁发的。
如果使用CA证书签名,请使用openssl提供的工具生成服务器证书:
mv server.csr newreq.pem
./ -sign
mv newcert.pem
签署证书后,您将获得服务器证书,可以使用以下命令查看内容:
Opensl x509 -NOOUT -Text -IN
您可以使用以下命令查看服务器证书:
Opensl Check -CAFILE
3. 客户端证书
客户端的客户端证书是可选的。如果存在客户端证书,则为双向身份验证 HTTPS,否则为单向身份验证 HTTPS。
a) 生成客户端私钥
openssl genrsa -des3 -out client.key 1024
b) 生成客户端证书签名请求
openssl req -new -key client.key -out client. c) 生成客户端证书(由 CA 证书签名)
openssl ca -in client.csr -out client.crt
d) 将证书转换为浏览器可识别的格式
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out
4。证书列表
使用双向身份验证时,有三个私钥和三个证书。它们是 ca.key、、、、client.key、client.crt 和浏览器。
如果使用 CA 证书进行单向身份验证,则证书和私钥为 ca.key, , , 。
如果您使用没有 CA 证书的单向身份验证,则证书和私钥为 , 。
配置证书
Apache的标准做法是在对应的配置文件中配置扩展配置,直接包含一个包含各个功能配置的conf文件(例如php相关的配置称为到 ssl 被称为)。这样做的优点是配置易于管理和更改,并且仍然可以保持简单明了。
1。设置
包括conf/
2。设置
基本配置包括证书路径和身份验证策略:
监听 443 #https 端口
SSLRandomSeed 启动内置
SSLPassPhraseDialog 内置
s SSLSessionCacheTimeout 300
SSLMutex 默认值
ServerAdmin
DocumentRoot /usr/local/apache2/htdocs/
#DirectoryIndex digitalidCenter3.com4nSverName
ErrorLog 日志 /443-error_log
CustomLog /usr/ local/apache2/logs /ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
❝ 信息
SSLEngine在
SSLCipherSuite 全部:! ADH:!EXPORT56:RC4+RSA:+HIGH:+MID:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache2/conf// # 设置服务器证书路径
SSLCertificateKeyFile /usr/local/apache2/conf// # 服务器证书私钥路径
SSLCertificateChainFile /usr/local/apache2/conf// #CA 中间证书路径
SSLCACertificatePath /usr/pache2 客户端证书目录(仅使用)用于双向认证)
SSLCACertificateFile /usr/local/apache2/conf//client.crt # 客户端证书路径(仅用于双向认证)
SSLVerifyClient require # 强制客户端持有 SSL 证书 Request
SSLVerifyDepth 10
有关 mod_ssl 配置选项的详细说明,请参阅 apache 文档:://。 linux.gov.cn/Apache/ApacheMenu/mod/mod_ssl.html
3.启动Apache
cd /usr/local/apache2/bin
./apachectlstartsssl
要启动Apache,可以修改apachectl脚本并将其更改为默认的ssl模式。在 Apachectl 脚本中:
start|stop|restart |graceful)
$HTTPD -k $ARGV
ERROR=$?
;;
startsL)
startsl)||start- 开始l)| $HTTPD -k start -DSSL
ERROR=$?
;;
更改为:
stop|graceful)
$HTTPD -k $ARGV$
;;
重新启动)
killall -9 httpd
$HTTPD -k start -DSSL
;;
start |startsl|s$HTTP --- k start -DSSL
错误=$?
;;
启动时必须输入密码。存储可以用服务器私钥解密,重启时无需输入密码:
openssl rsa -in -out my-
chmod 400
Startup
已更改。 to:
SSLCertificateKeyFile /usr/local/apache2/conf//my- # 解密服务器证书的私钥路径。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网