<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    stone2083

    SSL相關(guān)命令隨記

    背景
    之前利用笨重的Java寫過內(nèi)網(wǎng)訪問程序(SSL雙向認(rèn)證系統(tǒng)),今天才發(fā)現(xiàn)curl等命令對(duì)SSL都有良好的支持。
    故記錄相關(guān)點(diǎn)滴。

    創(chuàng)建CA根證書

    #創(chuàng)建ca私鑰
    openssl genrsa -out ca.key
    #創(chuàng)建證書請(qǐng)求文件(Certificate Secure Request)
    openssl req -new -key ca.key -out ca.csr

    #創(chuàng)建CA根證書
    openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt

    創(chuàng)建服務(wù)器證書
    #創(chuàng)建服務(wù)器私鑰

    openssl genrsa -out server.key

    #創(chuàng)建服務(wù)器證書請(qǐng)求文件
    openssl req -new -key server.key -out server.csr

    #創(chuàng)建服務(wù)器證書
    openssl ca -in server.csr -cert ca.crt -keyfile ca.key -out server.crt

    PFX證書轉(zhuǎn)換
    #pfx格式證書導(dǎo)出成pem格式證書

    openssl pkcs12 -in jinli.pfx -nodes -out jinli.pem
    #導(dǎo)出私鑰
    openssl rsa -in jinli.pem -out jinli.key
    #導(dǎo)出證書,公鑰
    openssl x509 -in jinli.pem -out jinli.crt


    curl訪問HTTPS命令
    curl -E jinli.pem:${password} --cacert ca.crt https://www.cn.alibaba-inc.com/
    curl --cacert gmail.pem https://mail.google.com/mail
    curl --cert jinli.crt --key jinli.key --cacert ca.crt https://www.cn.alibaba-inc.com/
    參數(shù)解釋
        --cacert <file> CA certificate to verify peer against (SSL)
        --capath 
    <directory> CA directory to verify peer against (SSL)
     -E/--cert 
    <cert[:passwd]> Client certificate file and password (SSL)
        --cert-type 
    <type> Certificate file type (DER/PEM/ENG) (SSL)
        --key 
    <key>     Private key file name (SSL/SSH)

        --key-type 
    <type> Private key file type (DER/PEM/ENG) (SSL)

    python訪問HTTPS代碼
    from httplib import HTTPSConnection

    con 
    = HTTPSConnection('www.cn.alibaba-inc.com', cert_file='jinli.pem')
    con.connect()
    con.request(
    'GET''/xxx')
    res 
    = con.getresponse()
    print res.status
    print res.read()
    res.close()
    con.close()

    python查看證書信息代碼
    from OpenSSL import crypto
    x509 
    = crypto.load_certificate(crypto.FILETYPE_PEM, open('cert_file').read())
    print x509.get_issuer()

    pkcs 
    = crypto.load_pkcs12(open(pkcs_file).read(),passphrase)
    print pkcs.get_certificate().get_issuer()

     

    HTTPSConnection不理解的地方 

    def wrap_socket(sock, keyfile=None, certfile=None,
                    server_side
    =False, cert_reqs=CERT_NONE,
                    ssl_version
    =PROTOCOL_SSLv23, ca_certs=None,
                    do_handshake_on_connect
    =True,
                    suppress_ragged_eofs
    =True, ciphers=None):

        
    return SSLSocket(sock, keyfile=keyfile, certfile=certfile,
                         server_side
    =server_side, cert_reqs=cert_reqs,
                         ssl_version
    =ssl_version, ca_certs=ca_certs,
                         do_handshake_on_connect
    =do_handshake_on_connect,
                         suppress_ragged_eofs
    =suppress_ragged_eofs,
                         ciphers
    =ciphers)

     

    ssl wrap的函數(shù)是支持ca_certs參數(shù)的,但是HTTPSConnection不支持ca_certs參數(shù)
    class HTTPSConnection(HTTPConnection):
            
    "This class allows communication via SSL."

            default_port 
    = HTTPS_PORT

            
    def __init__(self, host, port=None, key_file=None, cert_file=None,
                         strict
    =None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
                         source_address
    =None):
                HTTPConnection.
    __init__(self, host, port, strict, timeout,
                                        source_address)
                self.key_file 
    = key_file
                self.cert_file 
    = cert_file

            
    def connect(self):
                
    "Connect to a host on a given (SSL) port."

                sock 
    = socket.create_connection((self.host, self.port),
                                                self.timeout, self.source_address)
                
    if self._tunnel_host:
                    self.sock 
    = sock
                    self._tunnel()
                self.sock 
    = ssl.wrap_socket(sock, self.key_file, self.cert_file)






    posted on 2011-10-17 20:22 stone2083 閱讀(3301) 評(píng)論(2)  編輯  收藏 所屬分類: python

    Feedback

    # re: SSL相關(guān)命令隨記 2011-10-17 22:04 tbw

    不錯(cuò) 學(xué)習(xí)了   回復(fù)  更多評(píng)論   

    # re: SSL相關(guān)命令隨記 2013-09-16 17:13 guojian

    不錯(cuò),學(xué)習(xí)了  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 中文字幕一区二区三区免费视频| 国产精品色拉拉免费看| 亚洲爱情岛论坛永久| 大学生一级毛片免费看| 免费夜色污私人影院网站电影| 亚洲精品字幕在线观看| 一本岛高清v不卡免费一三区| jizzjizz亚洲日本少妇| 亚洲高清视频在线观看| 日产乱码一卡二卡三免费| 国产一级片免费看| 亚洲日本VA午夜在线影院| 一本色道久久综合亚洲精品| 国产乱码免费卡1卡二卡3卡| 一本久久A久久免费精品不卡| 久久亚洲AV成人无码软件| 免费一级毛片在线观看| 久久综合国产乱子伦精品免费| 午夜亚洲WWW湿好爽| 亚洲综合婷婷久久| 亚洲国产精品成人一区| 免费福利网站在线观看| 精品熟女少妇aⅴ免费久久| 亚洲综合色一区二区三区| 亚洲av色影在线| 亚洲国产婷婷香蕉久久久久久| 久久久久久国产a免费观看黄色大片 | 亚洲综合一区国产精品| 亚洲精品国产美女久久久| 国产做床爱无遮挡免费视频| 日本高清在线免费| 老司机69精品成免费视频| 爱情岛论坛亚洲品质自拍视频网站 | 女人18一级毛片免费观看| 91禁漫免费进入| 一级女性全黄生活片免费看| 亚洲国产aⅴ成人精品无吗| 亚洲国产成a人v在线| 久久久影院亚洲精品| 狠狠综合久久综合88亚洲| 日本中文一区二区三区亚洲|