apache自签名证书

来源:互联网 发布:java输出多个变量 编辑:程序博客网 时间:2024/05/16 05:58

博主小白一个,博主小白一个,博主小白一个重要的事情说三遍。有错请指出

要提高网站的安全性,所以把http转成https,因此需要签名,网上一查那个啥通好贵。。又一查原来还可以自签名。于是乎自签名的道路开始了。。查了很多资料,都不齐,或者很乱,或者根本就行不通。当然是行不通啥的只是针对我的个人电脑啊之类的情况。以下的分享参考了网上的教程以及自己实践过程中对教程的一些修改。在此记录一下,以备不时之需。

网上教程很多,就不贴网址了,因为太多了不知道我参考的是哪个。我做的是服务器的ssl。本人电脑mac有终端直接敲命令(或者linux也行)。直接敲命令生成相关文件,再传到服务器端,服务器再进行相关配置。

一、证书文件生成,mac上进行

1,生成私钥文件(key文件)

 openssl genrsa -des3 -out server.key 1024

运行时会提示输入密码,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果不要口令,则可用以下命令去除口令:

openssl rsa -in server.key -out server.key(运行完第一个命令再运行第二个命令。因为博主不去密码,后面出现问题,又回过来去密码)

2,用server.key生成一个证书

openssl req -new -key server.key -out server.csr

这时候会提示

Enter pass phrase for server.key:输入密码

Country Name(2 letter code)[AU]:CN(国家)

State or Province Name (full name) [Some-State]:Yunnan(省市)

Locality Name (eg, city) []:Kunming(城市)

Organization Name (eg, company) [Internet Widgits Pty Ltd]:selfgene(随便写的)

Organizational Unit Name (eg, section) []:selfgene(随便写的)

Common Name (eg, YOUR name) []:www.selfgene.com(公司网址)

Email Address []:xxx@xxx.com(邮箱,有人说可以不用写)

A challenge password []:密码

An optional company name []:selfgene(随便写的)

二、证书需要CA的签名才可形成证书

1,生成CA的key文件ca.key和根证书ca.crt

openssl req -new -x509 -keyout ca.key -out ca.crt

这时候的提示输入信息和server.key的信息类似,大家看着填吧

三、用CA证书为server.csr证书签名

1,Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config /路径/openssl.cnf

此处会提示错误,比如没有什么文件夹之类的。

解决:在当前目录下新建文件夹 demoCA/newCerts(路径),demoCA/index.txt(空白),demoCA/serial(无后缀,内容写上 01 )

四、现在有了ca.crt,ca.key,server.crt,server.csr,server.key。最后使用的有ca.crt,server.crt,server.key。把这三个文件发到服务器端

五、将这两个文件放到Apache目录下的conf文件夹里,修改httpd.conf

1,去掉前面的#,LoadModule ssl_module modules/mod_ssl.so

2,去掉前面的#,Include conf/extra/httpd-ssl.conf。我是根本没有这句话,就加了这句话

3,看到有大神说也要打开httpd-vhosts.conf,我试了,打开或不打开,都没有任何影响,所以就不打开了。

六、修改extra/httpd-ssl文件,这真是一个大坑!!因为这个没配置好导致Apache无法打开

<VirtualHost _default_:443>

DocumentRoot "e:/aaa/bbb"

有大神说这个路径一定要和httpd.conf里面的DocumentRoot一样,我是一样了,但是网站打开是一个目录。

在此说一下,aaa下是网站的全部内容,bbb放的是网址访问的内容。所以正确说法是访问的网址的路径。有点绕,不懂的随意了。

ServerName 网址

ServerAdmin 这个我随便写的

ErrorLog "绝对路径/error.log"

TransferLog "绝对路径/access.log"

SSLCertificateFile "绝对路径/server.crt"

SSLCertificateKeyFile "绝对路径/server.key"

SSLCertificateChainFile "绝对路径/ca.crt"

<Directory "绝对路径/cgi-bin">
  SSLOptions +StdEnvVars
</Directory>

CustomLog "绝对路径/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

有改的标出来了,没改的就没写了。每个人Apache啥的版本不同,有区别,不讨论。

七、Apache打不开就看报错日志,会知道很多东西。这里简单说几句博主碰到的问题,随便写写,实际价值不高,嘿嘿

1,SSLPassPhraseDialog builtin is not supported on Win32

前文说到不去密码的证书会有问题,就是这个问题啦。extra/httpd-ssl文件有句SSLPassPhraseDialog  builtin只要去掉密码就ok了

2,Child: Parent process exited abruptly. Child process is ending

这个有大神说线程不够啥的,修改了httpd-mpm.conf,ThreadsPerChild      500,MaxRequestsPerChild    5000 没用

也有大神说是端口冲突。

反正我不是以上2个原因

3,有大神指出Apache启动不了可以查看我的电脑邮件-管理-啥的忘记了,有记录启动失败原因,我是远程登录,打不开管理,没看成...

4,最后的最后还是去研究extra/httpd-ssl文件了,因为httpd.conf关闭该文件Apache就打开正常,打开的话Apache就打不开。

其实也就是配置问题,按着第六步来做的话,祝大家好运,我反正是正常启动了Apache。

八、言归正传,重启服务器成功后,打开https://网址可以了,喜大普奔。but怎么让他自动跳转到https而不是http呢?很简单

在网站的启动文件(比如index.php)中加入以下几句

if ($_SERVER["HTTPS"] <> "on") { $xredir="https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; header("Location: ".$xredir); }

九、还是自签名的问题。

我期待的效果是像百度一样绿色无添加,安全有锁

结果是下面这样的


查看证书,又是说“此证书是由不被信任的签发者签名的”。

.

严重影响体验啊啊啊啊啊!!!然后在服务器端吧证书加入信任啊或者权威之类里面,没用。

大家有什么好办法,求教!

十、废话

以上是我参考网上各路大小神的意见、博客之类的文章加之自己的一些体会,言语不当请宿醉啊。有误请指教。






0 0