顯示包含「SSL」標籤的文章。顯示所有文章
顯示包含「SSL」標籤的文章。顯示所有文章

2018/07/31

HTTP Server、SSL 操作與設定



Part 1: 自建 private key, 建立 CSR 申請第三方憑證
#private key, need password(keep it)
openssl genrsa -des3 -out private.key 2048

# certificate signing request (CSR)
openssl req -new -key private.key -out domaincsr.csr

#產生如下列問題:
Country Name (2 letter code) [XX]:TW => 填寫國名(兩碼),填完後按下enter
State or Province Name (full name) []:Taiwan =>填寫州或郡,填完後按下enter
Locality Name (eg, city) [Default City]:Taipei =>填寫城市名稱,填完後按下enter
Organization Name (eg, company) [Default Company Ltd]:MyCompany Inc =>填寫公司名稱,填完後按下enter
Organizational Unit Name (eg, section) []:IT Dept =>填寫部門名稱,填完後按下enter
Common Name (eg, your name or your server's hostname) []:www.mydomain.com =>填寫保護網域名稱,填完後按下enter
Email Address []: demo@mydomain.com=>填寫電子郵件地址(可不填),填完後按下enter
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []: =>請留空白,按下enter
An optional company name []: =>填寫公司名稱(可不填),填完後按下enter

#利用 domaincsr.csr 申請第三方憑證

refrence url:
1. https://blog.longwin.com.tw/2014/08/apache2-ssl-create-build-setup-2014/
2. https://slproweb.com/products/Win32OpenSSL.html
3. http://wiki.gandi.net/zh-tw/ssl/dcv


Part 2: 申請到憑證之後下載憑證串鏈
至少包含 2 張憑證,分別是
1. 中繼憑證 (第三方單位會提供 or 直接下載)
ex: GandiStandardSSLCA2.pem

2. 第三方單位發下來的憑證 (第三方單位會提供 or 直接下載)
ex: mydomain.crt

Part 3: 製作 HTTP Server 憑證串
#產製沒有加密過的 private key
openssl rsa -in private.key -out server_no_pwd.key

#產製包含 key 和 第三方憑證 PEM 檔案
cat server_no_pwd.key > server.key

cat GandiStandardSSLCA2.pem mydomain.crt > server.pem

Part 4: 確認共有三個檔案內容:
1. 自行產生的 private key: server.key
2. 串聯的憑證: server.pem
3. 第三方認證公司發行的憑證: mydomain.crt


於 Apache2 的設定範例

ServerAdmin admin@mydomain.com.tw
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on
SSLCertificateFile /var/www/html/gandi_key/server.pem
SSLCertificateKeyFile /var/www/html/gandi_key/server.key
SSLCertificateChainFile /var/www/html/gandi_key/mydomain.crt


SSLOptions +StdEnvVars


SSLOptions +StdEnvVars

BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown


於 Ngnix 的設定範例
# HTTPS server
server {
listen 443 ssl;
server_name mydomain.com.tw;
access_log C://data//BackendService//logs//access_log.log;

ssl_stapling on;
ssl_stapling_verify on;

ssl_certificate /ngnix/gandi_key/server.pem
ssl_certificate_key /ngnix/gandi_key/server.key

#ssl_session_cache shared:SSL:1m;
#ssl_session_timeout 5m;

#ssl_ciphers HIGH:!aNULL:!MD5;
#ssl_prefer_server_ciphers on;

ssl_trusted_certificate /ngnix/gandi_key/mydomain.crt

location / {
proxy_pass http://127.0.0.1:4001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

2008/09/17

Tomcat (5.5.X) + SSL (簡易憑證)

1.製作憑證 
(利用 jdk 中附的 keytool 製作簡易憑證) 指令 : keytool -genkey -alias maAlias -keypass myKeyPass -keystore myKeystore.jks -storepass myKeyPass -keyalg DSA -validity 730

[需要輸入內容]
您的名字與姓氏為何? 
[Unknown]: 
localhost (這個好像不能亂打,要打domain name.. ) (CN)
您的編制單位名稱為何? 
[Unknown]:OU
您的組織名稱為何? 
[Unknown]:O 
您所在的城市或地區名稱為何? 
[Unknown]:L 
您所在的州及省份名稱為何? 
[Unknown]:S 
該單位的二字國碼為何 
[Unknown]:TW 
CN=localhost, OU=OU, O=O, L=L, S=S, C=tw 正確嗎? 
[否]: Y 
 

注意事項 :
1.keypass 與 keystorepass 必須相同
2.其餘指令請參照
keytool中文說明 或是 Sun官方說明文件

2.設定Tomcat中 ${CATALINA_HOME}\conf\server.xml
(將產生好的憑證放置${CATALINA_HOME}\keystore\)

---
....
Connector port="8443" minprocessors="5" maxprocessors="75" uriencoding="UTF-8" enablelookups="true" disableuploadtimeout="true" acceptcount="100" debug="0" scheme="https" secure="true" clientauth="false" sslprotocol="TLS" keystorefile="keystore\myKeystore.jks" keystorepass="myKeyPass" keyalias="myAlias" algoritym="MD5" / >
....
---

3.連線 : https://localhost:8443/
3.1需要將憑證匯入至瀏覽器,使其信任憑證。
3.2亦可將憑證換成具有第三方簽署過的憑證(VeriSign. 等組織均預設存在於瀏覽器的信任憑證,當然與瀏覽器的預設有關),可以不需要做匯入動作。

4.完成!

NGINX SSL/設定檔案

#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #...