@@ -104,7 +104,6 @@ func (c *Conn) serverHandshake() error {
104104 }
105105 return hs .handshake ()
106106 }
107-
108107 hs := c .hs
109108 if hs == nil {
110109 hs = & serverHandshakeState {
@@ -124,7 +123,6 @@ func (hs *serverHandshakeState) handshake() error {
124123 if hs .err != nil && hs .err != errDataNotEnough {
125124 return hs .err
126125 }
127-
128126 if err := hs .processClientHello (); err != nil {
129127 hs .err = err
130128 return err
@@ -203,7 +201,6 @@ func (hs *serverHandshakeState) handshake() error {
203201 atomic .StoreUint32 (& c .handshakeStatus , 1 )
204202
205203 c .handshakeStatusAsync = stateServerHandshakeHandshakeDone
206-
207204 return nil
208205}
209206
@@ -651,8 +648,8 @@ func (hs *serverHandshakeState) doFullHandshake() error {
651648 return err
652649 }
653650 }
654-
655651 if c .config .ClientAuth >= RequestClientCert {
652+ // Request a client certificate
656653 initCertReq ()
657654 hs .finishedHash .Write (certReq .marshal ())
658655 if _ , err := c .writeRecord (recordTypeHandshake , certReq .marshal ()); err != nil {
@@ -669,6 +666,7 @@ func (hs *serverHandshakeState) doFullHandshake() error {
669666 if _ , err := c .flush (); err != nil {
670667 return err
671668 }
669+
672670 }
673671
674672 if c .handshakeStatusAsync < stateServerHandshakeDoFullHandshake2ReadHandshake1 {
@@ -684,7 +682,6 @@ func (hs *serverHandshakeState) doFullHandshake() error {
684682
685683 // If we requested a client certificate, then the client must send a
686684 // certificate message, even if it's empty.
687-
688685 if c .config .ClientAuth >= RequestClientCert {
689686 if c .handshakeStatusAsync < stateServerHandshakeDoFullHandshake2HandleCertificateMsg {
690687 c .handshakeStatusAsync = stateServerHandshakeDoFullHandshake2HandleCertificateMsg
@@ -717,7 +714,6 @@ func (hs *serverHandshakeState) doFullHandshake() error {
717714
718715 }
719716 }
720-
721717 if c .handshakeStatusAsync < stateServerHandshakeDoFullHandshake2HandleVerifyConnection {
722718 c .handshakeStatusAsync = stateServerHandshakeDoFullHandshake2HandleVerifyConnection
723719 if c .config .VerifyConnection != nil {
@@ -747,7 +743,6 @@ func (hs *serverHandshakeState) doFullHandshake() error {
747743 }
748744
749745 }
750-
751746 if c .handshakeStatusAsync >= stateServerHandshakeDoFullHandshake2ReadHandshake3 {
752747 return nil
753748 }
@@ -771,7 +766,6 @@ func (hs *serverHandshakeState) doFullHandshake() error {
771766 c .handshakeStatusAsync = stateServerHandshakeDoFullHandshake2ReadHandshake3
772767 return unexpectedMessageError (certVerify , msg )
773768 }
774-
775769 var sigType uint8
776770 var sigHash crypto.Hash
777771 if c .vers >= VersionTLS12 {
@@ -796,6 +790,11 @@ func (hs *serverHandshakeState) doFullHandshake() error {
796790 }
797791
798792 signed := hs .finishedHash .hashForClientCertificate (sigType , sigHash , hs .masterSecret )
793+ if pub == nil {
794+ if len (c .peerCertificates ) > 0 {
795+ pub = c .peerCertificates [0 ].PublicKey
796+ }
797+ }
799798 if err := verifyHandshakeSignature (sigType , pub , sigHash , signed , certVerify .signature ); err != nil {
800799 c .sendAlert (alertDecryptError )
801800 c .handshakeStatusAsync = stateServerHandshakeDoFullHandshake2ReadHandshake3
0 commit comments