openssl 程式設計。 證書製作
一、openssl證書製作:
1、建立目錄./demoCA/ ./demoCA/newcerts/,建立檔案 ./demoCA/index.txt ./demoCA/serial。
2、執行echo 01 > ./demoCA/serial
3、製作自己的CA證書
$openssl req -new -x509 -keyout ca.key -out ca.crt
4、生成服務端的私鑰(key檔案)及csr檔案
$openssl genrsa -des3 -out server.key 1024
$openssl req -new -key server.key -out server.csr
5、生成客戶端的私鑰(key檔案)及csr檔案
$openssl genrsa -des3 -out client.key 1024
$openssl req -new -key client.key -out client.csr
6、用生成的CA的證書為剛才生成的server.csr,client.csr檔案簽名
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
7、生成pem格式證書
有時需要用到pem格式的證書,可以用以下方式合併證書檔案(crt)和私鑰檔案(key)來生成
$cat client.crt client.key> client.pem
$cat server.crt server.key > server.pem
二、openssl程式設計
openssl的程式設計有兩種風格:原生態的和層層封裝的。
2.1原生態openssl程式設計
需要使用BSD socket和openssl中的較底層的API。原生態openssl有兩個比較重要的結構SSL和SSL_CTX。
SSL_CTX資料結構是用與建立SSL/TSL連線的結構,可用於指定通訊協議(SSLv23/TSLv1)、證書、金鑰等相關資訊。
SSL資料結構是和具體會話相關聯的結構。
常用函式:
SSL_library_init():初始化一個openssl庫。
SSL_CTX_new(const SSL_METHOD *method):建立一個CTX結構。
SSL_new(SSL_CTX *ctx):建立一個SSL結構。
SSL_set_fd(SSL *ssl, int fd):把ssl結構和具體會話相關聯。
SSL_accept(SSL *ssl)、SSL_connect(SSL *ssl):用於SSL會話握手。
SSL_read(SSL *ssl, void *buf, int num)和SSL_write(SSL *ssl, void *buf, int num)用於SSL讀寫。
SSL_shutdown(SSL *ssl)用於關閉一個SSL/TSL會話。
使用這些函式就可以進行最基本的openssl程式設計了。Openssl程式設計框架如下。
程式碼示例:HTTPS伺服器和客戶端
伺服器端:
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <arpa/inet.h>
- #include <openssl/bio.h>
- #include <openssl/ssl.h>
- #include <openssl/err.h>
- #define SERVER_PEM "../digitCert/server.pem"
- #define SERVER_KRY "../digitCert/server.key"
- int password_callback(char *buf, int size, int rwflag, void *userdata)
- {
- /* For the purposes of this demonstration, the password is "ibmdw" */
- printf("*** Callback function called/n");
- strcpy(buf,"123456");
- return strlen(buf);
- }
- int main()
- {
- int serv_sock,cli_sock;
- socklen_t client_len;
- struct sockaddr_in server_address;
- struct sockaddr_in client_address;
- SSL_CTX * ctx;
- SSL *ssl;
- int (*callback)(char *, int, int, void *) = &password_callback;
- printf("Serving it up in a secure manner/n/n");
- SSL_library_init();
- SSL_load_error_strings();
- ERR_load_BIO_strings();
- ERR_load_SSL_strings();
- OpenSSL_add_all_algorithms();
- printf("Attempting to create SSL context... ");
- ctx = SSL_CTX_new(SSLv23_server_method());
- if(ctx == NULL)
- {
- printf("Failed. Aborting./n");
- return 0;
- }
- printf("/nLoading certificates.../n");
- SSL_CTX_set_default_passwd_cb(ctx, callback);
- if(!SSL_CTX_use_certificate_file(ctx, SERVER_PEM, SSL_FILETYPE_PEM))
- {
- ERR_print_errors_fp(stdout);
- SSL_CTX_free(ctx);
- return 0;
- }
- else printf("load server.csr successful!/n");
- if((SSL_CTX_use_PrivateKey_file(ctx, SERVER_KRY, SSL_FILETYPE_PEM))<=0)
- {
- printf("use private key failed!/n/n");
- ERR_print_errors_fp(stdout);
- SSL_CTX_free(ctx);
- return 0;
- }
- serv_sock = socket(AF_INET,SOCK_STREAM,0);
- if(-1 == serv_sock){
- perror("socket");
- }
- server_address.sin_family = AF_INET;
- server_address.sin_port = htons(443);
- server_address.sin_addr.s_addr = htonl(INADDR_ANY);
- int ret = bind(serv_sock,(struct sockaddr*)&server_address,sizeof(struct sockaddr));
- if(-1 == ret){
- perror("bind");
- }
- listen(serv_sock,5);
- while(1){
- cli_sock = accept(serv_sock,(struct sockaddr *)&client_address,(socklen_t *)&client_len);
- ssl = SSL_new(ctx);
- SSL_set_fd (ssl, cli_sock);
- SSL_accept (ssl);
- //讀取
- char line[4096];
- SSL_read(ssl, line, sizeof (line));
- //正常處理HTTP協議
- //寫入,返回報文。
- SSL_write(ssl,"HTTP/1.0 200 OK/r/n/r/n",19);
- SSL_write(ssl,"<html><header></header><body><p1>Hello World<p1></body></html>",62);
- close(cli_sock);
- SSL_shutdown(ssl);
- SSL_free(ssl);
- }
- SSL_CTX_free (ctx);
- }
客戶端:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <errno.h>
- #include <unistd.h>
- #include <netinet/in.h>
- #include <limits.h>
- #include <netdb.h>
- #include <arpa/inet.h>
- #include <ctype.h>
- #include <openssl/crypto.h>
- #include <openssl/ssl.h>
- #include <openssl/err.h>
- #include <openssl/rand.h>
- #define DEBUG 1
- /********************************************
- 功能:搜尋字串右邊起的第一個匹配字元
- ********************************************/
- char *Rstrchr(char *s, char x)
- {
- int i = strlen(s);
- if (!(*s))
- return 0;
- while (s[i - 1])
- if (strchr(s + (i - 1), x))
- return (s + (i - 1));
- else
- i--;
- return 0;
- }
- /**************************************************************
- 功能:從字串src中分析出網站地址和埠,並得到使用者要下載的檔案
- ***************************************************************/
- void GetHost(char *src, char *web, char *file, int *port)
- {
- char *pA;
- char *pB;
- memset(web, 0, sizeof(web));
- memset(file, 0, sizeof(file));
- *port = 0;
- if (!(*src))
- return;
- pA = src;
- if (!strncmp(pA, "http://", strlen("http://")))
- pA = src + strlen("http://");
- elseif (!strncmp(pA, "https://", strlen("https://")))
- pA = src + strlen("https://");
- pB = strchr(pA, '/');
- if (pB) {
- memcpy(web, pA, strlen(pA) - strlen(pB));
- if (pB + 1) {
- memcpy(file, pB + 1, strlen(pB) - 1);
- file[strlen(pB) - 1] = 0;
- }
- } else
- memcpy(web, pA, strlen(pA));
- if (pB)
- web[strlen(pA) - strlen(pB)] = 0;
- else
- web[strlen(pA)] = 0;
- pA = strchr(web, ':');
- if (pA)
-
相關推薦
openssl 程式設計。 證書製作
一、openssl證書製作:1、建立目錄./demoCA/ ./demoCA/newcerts/,建立檔案 ./demoCA/index.txt ./demoCA/serial。2、執行echo 01 > ./demoCA/serial3、製作自己的CA證書$openssl req -new -x509
Weblogic HTTPS SSL證書製作(自己使用openssl來製作CA證書和伺服器證書,自己充當CA的角色)
一、生成CA證書1、建立私鑰openssl genrsa -out /home/ca/ca-key.pem 10242、建立證書請求openssl req -new -out /home/ca/ca-req.csr -key /home/ca-key.pem3、自簽名證書1
WIN64使用OPENSSL生成SSL證書
nbsp 請求 md5 輸入 ssl證書 密碼 http 私鑰 x509 WIN64使用OPENSSL生成SSL證書 下載OPENSSL http://slproweb.com/products/Win32OpenSSL.html 生成服務器端的私鑰(key文件):open
OpenSSl生成SSL證書(支持https)
https openssl 一:環境與安裝說明 WIN7_64,Nginx服務器,OpenSSL_Win64。本人使用phpStudy集成開發環境,使用Nginx+PHP,支持瀏覽器https請求。 nginx下載地址:http://nginx.org/en/download.html
Linux下使用Openssl頒發Apache證書
value req org 工作 pki 準備 提前 httpd try 1安裝openssl #yum install -y openssl 2進入目錄/etc/pki/tls/certs #cd /etc/pki/tls/certs 3.生成私鑰文件(key) #ope
openssl生成SSL證書的流程 - moonhillcity的部落格 - CSDN部落格
1.安裝openssl 之後在/usr/lib/ssl目錄下(ubuntu系統,用whereis查下ssl目錄即可)下找到openssl.cnf,拷貝到工作目錄下。 2.工作目錄下新建demoCA資料夾,資料夾中新建檔案index.txt和serial,再建立一個newcerts的資料夾。在serial裡面
90後前端妹子,愛程式設計。
【我】出生於江南的一個很美麗的小鎮,依山傍水風景如畫,像詩歌裡描述的那般,是煙柳繁華之地、溫柔富貴之鄉。踏上青石板,聽著深沉的鐘聲,在煙雨的季節裡走過那長長的街巷,看那青苔遍滿的牆根與光滑閃亮的石階泛青的面龐。 【暱稱】祈澈姑娘 【地點】目前就職於上海市徐彙區某物聯網科技公司,其實一直都想知
openssl 查看證書細節
req 系列 ext clas pri eat rfc fin openssl 打印證書的過期時間 openssl x509 -in signed.crt -noout -dates 打印出證書的內容: openssl x509 -in cert.pem -noou
openssl 學習之證書中提取N 和 E
通常數字證書包含很多資訊,其中N和E值即我們稱為的公鑰。如何從PEM 或者DER格式的證書中提出證書呢?下面給出程式碼實現從PEM和DER編碼的證書中提出N、E。 #include <openssl/evp.h> #include <openssl/x
https雙向認證、證書製作過程
1、生成伺服器證書庫 輸入命令: keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore D:\jks\server.keystore -dname "CN=127.0.0.1,OU=icesoft,O=ices
組建App開發團隊還是選擇免程式設計平臺快速製作?詳細對比分析
現在App開發除了自己組建APP開發團隊外,還可以使用第三方的傻瓜式自助平臺,不用程式設計自己快速開發製作App,兩者有何差別,該如何選擇呢?接下來我們對組建APP開發團隊和自建APP之間進行詳細對比。 組建App開發團隊 (一)人員配置: 1、產品經理 專案
Openssl Win64生成證書
一、準備工作: 1、 下載win64的Openssl,可到http://slproweb.com/products/Win32OpenSSL.html下載,這裡下載1.0.1j版本。 先安裝Visual C++ 2008Redistributables (x64),然後安
一步一步教你做ios推送 pem證書製作 php推送
最近在研究ios的推送問題,遇到了一些問題,最終整理了一下。放在這裡和大家分享 APNS的推送機制 首先我們看一下蘋果官方給出的對ios推送機制的解釋。如下圖 Provider就是我們自己程式的後臺伺服器,APNS是Apple Push Notification Service的縮寫,也就是
Kubernetes部署(三):CA證書製作
手動製作CA證書 1.安裝 CFSSL [[email protected] ~]# cd /usr/local/src [[email protected] src]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 [[ema
OpenSSL 程式設計入門
如果你急切的想構建一個簡單的Web客戶端和伺服器對,這時你就需要使用SSL了.. SSL是一種保護基於TCP協議的網路應用最快而且最簡單的的方法,如果你正在用C語言做開發,那麼對於你來說,最好的選擇可能就是使用OpenSSL了. OpenSSL是在Eric
13.openssl程式設計——ASN1庫
13.1 ASN1簡介 ANS.1(Abstract Syntax Notation One, X.208),是一套靈活的標記語言,他允許定義多種資料型別,從integer、bit string、一類的簡單型別到結構化型別,如set和sequence,並且可以使用這些型別
linux下的OPENSSL程式設計- 簡單函式介紹
在利用OpenSSL開始SSL會話之前,需要為客戶端和伺服器制定本次會話採用的協議,目前能夠使用的協議包括TLSv1.0、SSLv2、SSLv3、SSLv2/v3。需要注意的是,客戶端和伺服器必須使用相互相容的協議,否則SSL會話將無法正常進行。(3 ) 建立會話環境在OpenSSL中建立的SSL會話環境稱為
nginx反向代理cas-server之2:生成證書,centOS下使用openssl生成CA證書(根證書、server證書、client證書)
前些天搭好了cas系統,這幾天一致再搞nginx和cas的反向代理,一直不成功,但是走http還是測試通過的,最終確定是ssl認證證書這一塊的問題,原本我在cas服務端裡的tomcat已經配置了證書,並且能夠使用了,但是現在我用nginx代理使用ssl與cas-server
OpenSSL生成根證書CA及簽發子證書
系統:CentOS7 32位 目標:使用OpenSSL生成一個CA根證書,並用這個根證書頒發兩個子證書server和client。 先確保系統中安裝了OpenSSL,若沒安裝,可以通過以下命令安裝: ? 1 sudo yum ins
linux下利用openssl來實現證書的頒發(詳細步驟)
1、首先需要安裝openssl,一個開源的實現加解密和證書的專業系統。在centos下可以利用yum安裝。 2、openssl的配置檔案是openssl.cnf,我們一般就是用預設配置就可以。如果證書有特殊要求的話,可以修改配置適應需求。這樣必須把相關的檔案放到配置檔