跳至主要内容

为 Tomcat 增加 GoDaddy SSL 证书

为了信息安全,一般网站的用户注册和登录过程会使用加密的 HTTP(即HTTPS)传输用户的帐号和密码,这样可以防止“中间人”盗取帐号资料。

假如你的网站是用 Tomcat 直接搭建的,那么主要需要如下几个步骤:
1、购买 SSL 证书。
2、在你的服务器上生成一个私密钥匙(Private Key)。
3、在 SSL 证书销售商那里签名你的 Key。
4、将最终生成的认证证书导入 Tomcat KeyStore
5、修改 Tomcat 的配置。

下面详细讲解。

1、购买 SSL 证书


为网站添加 HTTPS 功能第一步需要购买一个SSL认证证书,目前使用比较广泛的有:

VeriSign 典型客户有 Microsoft Hotmail
Thawte 典型客户有 Google Gmail

不过这些品牌的证书价格不菲,假如你的网站只是想提供加密传输的话,可以购买 GoDaddy 的廉价SSL证书,目前报价是 $49.99/年,不过你可以通过推销链接以 $12.99/年买到,比如这个推销链接:http://www.godaddy.com/ssl/ssl-certificates.aspx?isc=IAPtssl1

2、生成私密钥匙

使用OpenSSL工具可以很容易生成私钥,不过由于我们准备给Tomcat使用,所以直接使用keytool更为方便。
转到 Tomcat 的安装目录,运行
$keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore

然后它会提示你设置一个密码,使用Tomcat常用的“changeit”即可,然后根据提示输入DN信息:
输入keystore密码:changeit  
再次输入新密码: changeit
您的名字与姓氏是什么?
  [Unknown]:  yourdomain.com
您的组织单位名称是什么?
  [Unknown]:  Networking
您的组织名称是什么?
  [Unknown]:  yourdomain.com
您所在的城市或区域名称是什么?
  [Unknown]:  Shenzhen
您所在的州或省份名称是什么?
  [Unknown]:  Guangdong
该单位的两字母国家代码是什么
  [Unknown]:  CN
CN=floatmark.com, OU=Networking, O=Floatmark.com, L=Shenzhen, ST=Guangdong, C=CN 正确吗?
  [否]:  y
输入<tomcat>的主密码 (如果和 keystore 密码相同,按回车):<直接回车>

完成后会在当前目录产生一个 tomcat.keystore 文件,然后在此基础上生成证书签名请求文件:
$ keytool -certreq -keyalg RSA -alias tomcat -file tomcat-yourdomain.csr -keystore tomcat.keystore


同样地,当它问起密码时,输入“changeit”即可,完成后你会得到一个 tomcat-yourdomain.csr 文件。

3、签名你的私钥

登录到你购买 SSL 证书商(比如 GoDaddy),根据提示会进入要求输入 CSR  的页面,用文本编辑器打开刚才生成的 tomcat-yourdomain.csr 文件,把里面的文本内容复制粘贴到页面的表单里即可。SSL 证书商会根据你的域名发送一封验证邮件到域名注册者的Email(所以你要提前注意你的域名注册的Email地址是什么,如果是错误的话需要先修正,否则收不到验证Email)。这个过程可能需要及分钟或者几小时,收到验证Email之后点击里面的链接地址就完成私钥签名了。

4、将证书导入 Tomcat

登录到你购买 SSL 的证书商,下载你的网站证书文件,在 GoDaddy 里你下载会得到一个压缩包,里面放有你的网站证书文件 yourdomain.com.crt,另外还有 GoDaddy 自己的证书(gd_cross_intermediate.crt,gd_intermediate.crt,gd_bundle.crt),这些都需要导入 tomcat 的 keystore 里的。
GoDaddy 的官方教程有些许错误,经过实验发现正确的过程如下:
a、到这里(https://certs.godaddy.com/anonymous/repository.seam)下载 valicert_class2_root.crt 文件,然后导入到 tomcat.keystore:
$ keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file valicert_class2_root.crt

b、导入 gd_cross_intermediate.crt,gd_intermediate.crt 和你网站的证书 yourdomain.com.crt:

$ keytool -import -alias cross -keystore tomcat.keystore -trustcacerts -file gd_cross_intermediate.crt
$ keytool -import -alias intermed -keystore tomcat.keystore -trustcacerts -file gd_intermediate.crt
$ keytool -import -alias tomcat -keystore tomcat.keystore -trustcacerts -file yourdomain.com.crt


5、修改 Tomcat 配置

编辑 Tomcat 的主配置文件 server.xml,在标准的 Connector 下面增加一个 HTTPS 的 Connector,如下:

<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="443" />
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="/PATH/TO/YOUR/TOMCAT/tomcat.keystore"
               keystorePass="changeit" />

其中第二行是新增加的,重启 Tomcat 之后,访问 https://yourdomain.com 应该能看到安全链接的效果。

6、其他

假如你在 Tomcat 之前使用了 Apache Httpd、nginx 等方向代理,那么就需要把上面的第2,4,5步骤替换成相应的方法,详细的可以参照 GoDaddy 的官方文档:http://community.godaddy.com/help/category/ssl-certificates/186

参考资料:

Generating a Certificate Signing Request (CSR) - Tomcat 4.x/5.x/6.x
http://community.godaddy.com/help/5276/generating-a-certificate-signing-request-csr--tomcat-4x5x6x

Installing an SSL Certificate in Tomcat 4.x/5.x/6.x
http://community.godaddy.com/help/article/5239

A few frequently used SSL commands
http://shib.kuleuven.be/docs/ssl_commands.shtml

评论

此博客中的热门博文

使用 Sendmail 在 CentOS 5.5 架设邮件服务器

假如你要架设一个有会员管理的网站,可能会遇到诸如“我忘记密码了”、“你有一年没来过了,有空过来瞧瞧吧”这类的问题,一般这类问题都是使用邮件解决的,比如发送一个重置密码的链接或者发送一封提醒邮件。
发送邮件的方法有很多,比如使用外面专业SMTP中继服务(一般收费惊人)、使用类似 Google Apps (Free) 的免费邮件发送服务(限制比较多,比如一天不能超过500封等),而比较廉价且彻底的解决方法应该是在自己的服务器上搭建邮件服务器(SMTP服务器)。假如你使用的是 Linux 系统,那么一般邮件服务器早已安装好了,比如 CentOS(RedHat、Fedora等)内置的 Sendmail 服务程序,你只需设置几下即可使用。

1、域名的设置

首先你要设置域名DNS的MX记录和SPF记录,一般我们只要有如下几条DNS记录就可以了:

记录类型    主机名   目标
------------------------------------
A                  @           123.123.123.123 (这里应该是你的服务器IP)
CNAME      www       your-domain.com
CNAME      SMTP      your-domain.com
MX              @            smtp.your-domain.com
TXT              @            v=spf1 a mx ~all

MX记录是邮件服务器必须依赖的,而TXT(SPF)是用来防止自己的邮件服务器发送的邮件不被当成垃圾邮件(spam email),假如不增加这条记录的话对方邮箱服务要么把你的邮件直接丢弃、要么塞到垃圾邮件文件夹里,所以这条记录也是必不可少的,更多的SPF设置方法参阅这里:http://www.openspf.org/

2、设置 Sendmail

我现在使用的 Sendmail 版本是 8.14,设置方法已经变得非常简单了,首先确保你系统已经有 sendmail 及其相关服务了:

#yum install sendmail  (这个必须的)
#yum install sendmail-cf
#yum install sendmail-devel
#yum install sendmail-mi…

一个人用的 Git

Git 是目前比较时髦的版本控制系统,虽然 linux 内核源码是使用它来管理的,但系统非常小巧而且使用简单,比起 svn (subversion) 系统,git 有一个明显的优势就是在不联网的情况下也可以查阅或者回滚历史版本,有时带着笔记本出外工作这个功能是非常有用的。下面介绍一下用 Git 管理个人电脑上的个人文档文件。(@ivarptr)

这篇文章有几个假设前提:
a、你从事的工作有很多文档需要书写或者整理,而且文档篇幅比较大需要经常修修改改,有时还可能需要回档(即恢复到历史的某个版本)。
b、你的文档具有关联性的,比如一个项目策划书,有多份文本文档、电子表格、图片,希望平时能整体记录一个版本(快照)。
c、你有多台工作用的电脑,为了简单起见,下文假设只有两台电脑。
d、你有一台能够在互联网上访问的服务器,最好是跑 linux 系统而且有 ssh 登录权限。
e、为了简明,省略了安全权限设置和Git最为突出的特性“分支”。

1、几个必须厘清的概念
a、svn只有一个远程仓库集中管理所有的版本,而Git分有“本地仓库”和“远程仓库”之分,在提交你的最新文档过程中,需要两层提交,一次是提交到本地仓库,然后才可以提交到远程仓库。
b、svn的远程仓库保存的总是全局最新的版本,各个支点(小组成员)必须对此仓库负责。而Git则没有集中远程仓库之说,理论上每个人的地位是平等的,同时每个人的本地仓库也可以配置为给他人访问的“远程仓库”。不过对于个人或者一个小团队来说,为了简便起见我们通常会协商好让某个远程服务器上的仓库保持最新并且集中管理,这点跟Svn类似。
c、svn的每次提交会产生一个递增的数字作为版本号码,而git每次提交会产生一个“快照”,快照不是用一个递增的数字作为名称的,而是一个hash值,当然用一个hash值来呼叫某一次提交也太累赘了,所以在实际应用过程中我们往往只用hash指的头4~6位就可以了(类似一个人的昵称)。

2、在服务器上创建 Git 仓库
关于在 linux 系统里如何安装 Git 程序可以参考这篇《在CentOS 5.5里安装Git以及搭建Git服务器最简单教程》,要记住 Git 程序是不区分服务端或客户端的。

首先我们要创建一个Git仓库,使用 ssh 登录到你的服务器,在用户home文件夹里创建一个文件夹,为了容易识别,最好在文件夹名字后面加一…